资源描述:
《编译器的词法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、佛山科学技术学院实验报告课程名称编译原理实验项目编译器的词法分析专业班级计算机1班姓名学号指导教师黄营成绩H期2014⑹7一、实验目的;通过阅读PL语言的语法图,设计、编制并调试一个PL词法分析程序,加深学生对词法分析原理的理解。二、实验内容;(1)跳过分隔符(如空格,回车,制表符);(2)识别诸如begin,end,if,while等保留字;(3)识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量sym赋值为SYM」DENTIFIER。(4)识别数字序列,占前值赋给全局量NUM,sym则置为SYM_NUMBER;(5)识别:
2、二,<=,>二之类的特殊符号,全局量sym则分别被赋值另SYM_BECOMES,SYM_LEQ,SYM_GEQ等。相关过程(函数)冇getsym(),getch(),M屮getch()为获取单个字符的过程,除此Z外,它还完成:(1)识别且跳过行结束符;(2)将输入源文件进行词法分析后写到输出文件;(3)产生一份程序列表,输出相应行号或指令计数器的值。三、实验步骤;1.根据PL/O语言的文法规范,编写PL/O语言的词法分析程序。2.通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。3.掌握从
3、源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。四、程序代码;Alphabet.hpp:#inelude#inelude^includeusingnamespacestd;constintXUMBERMAX二10;constintLETTERMAX二52;constintKEYWORDMAX二13;//关键字13constintLTMTTMAX二5constintOPERMAX二12;//基本字//13conststringtag[KEYWORDMAX]={/zbeginz"c
4、all","const","do","end","if",〃ocld〃,"procedure":〃」〃〃▲匸〃〃〃〃「・[〃〃・亠〃iread,then,var,wn1Ie,write/conststringtagCode[KEYWORDMAX]={"beginsynT,"cal1sym〃,〃constsym","dosynf:"endsymz/,〃・“〃〃」」〃〃」〃〃」〃〃4[〃//〃/7[・i〃〃・〃[lisym,oddsym,proccduresym,readsym,thensym,varsym,whilesym,writesym/;//运
5、算符・*x/lf〃,〃〃〃〃■//〃/〃〃“〃〃/、〃〃/〃〃/〃〃、〃〃、〃〃conststringoper[0PERWX]={+,-,*,/,odd,二,<>,<,<=,>,>=,conststringoperCode[OPERMAX]={"plus","minus","times","slash","oddsym",〃eql〃,〃neq〃,〃丄〃〃〃//[〃】gtr,geq,becomes};//界符conststringconststringlimit[LIMITMAX]二{〃(〃,〃)〃,〃,〃,〃;〃,〃limitCode[LIMIT
6、MAX]={,zlpare/zrparen〃,"commeT,"semicolon〃,"period"};//标识符conststringident="ident";//常数conststringclassLookHead{public:stringresult;LookHead(charscan)row=0;this->scan=scan;state=false;}〃设置扫描标志的值voidsetScan(charscan){this->scan=sean;}〃得到扫描标志的值chargetScan(){returnsean;}//扫描器bool
7、Seanner();//词法分析voidMatch();private:introw;stringlookhead;stringtmplookhead;charscan;boolstate;voidprint(stringcode)i//cout<<<8、d=oper[i])!print(operCode[i]);returntrue;}}returnfalse;}boolm