编译原理实验报告 学 院 专 业 班 级 学 号 姓 名 指导教师 2 0 1 1 年 1 月 8 日 学院 专业 班 组、学号 姓名 协作者_________ 教师评定_________________ 实验题目 增加单词 一、 实验目的与要求 在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序。 二、 实验内容 增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN 运算符 += -= ++ -- 三、 设计方法 1、首先修改头文件“pl0.h”: enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon, period, becomes, beginsym, endsym, ifsym, thensym, whilesym, writesym, readsym, dosym, callsym, constsym, varsym, procsym, elsesym, forsym, tosym, downtosym, returnsym, pluseql, minuseql, plusplus, minusminus, /*符号枚举体增加5 个关键字4 个运算符,用黑体字标注*/ }; # define norw 18 /*关键字个数数由初始值 13增加至 18 */ #define symnum 41 /*符号数初始值由 32增加至 41 */ 2、接着修改源程序“PL0.cpp”: /*设置保留字名字,按照字母顺序,便于折半查找*/ strcpy(&(word[0][0]),"begin"); strcpy(&(word[1][0]),"call"); strcpy(&(word[2][0]),"const"); strcpy(&(word[3][0]),"do"); strcpy(&(word[4][0]),"downto"); /*增加保留字 DOWNTO*/ strcpy(&(word[5][0]),"else"); /*增加保留字 ELSE*/ strcpy(&(word[6][0]),"end"); strcpy(&(word[7][0]),"for"); /**增加保留字 FOR*/ strcpy(&(word[8][0]),"if"); strcpy(&(word[9][0]),"odd"); strcpy(&(word[10][0]),"procedure"); strcpy(&(word[11][0]),"read"); strcpy(&(word[12][0]),"return"); /*增加保留字 RETURN*/ strcpy(&(word[13][0]),"then"); strcpy(&(word[14][0]),"to"); /*增加保留字 TO*/ strcpy(&(word[15][0]),"var"); strcpy(&(word[16][0]),"while"); strcpy(&(word[17][0]),"write"); /*设置保留字符号*/ wsym[0]=beginsym; wsym[1]=callsym; wsym[2]=constsym; wsym[3]=dosym; wsym[4]=downtosym; /*增加保留字符号 downtosym*/ wsym[5]=elsesym; /*增加保留字符号 elsesym*/ wsym[6]=endsym; wsym[7]=forsym; /*增加保留字符号 forsym*/ ws...