资源描述:
《编译实验指导书-2012.9.18》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验指导书实验一词法分析一、实验目的通过实现PL/0语言(一种示例小语言)的词法分析器,理解词法分析过程,掌握程序各部分之间的接口安排。二、实验要求1、要求每位同学单独完成词法分析器,并接受检查;2、撰写实验报告。(1)用有限自动机画出“三、实验内容”中的词法规则;(2)实验报告不要摘抄全部代码,但需要流程图的形式描述程序结构;(3)必须书写设计和实现的过程中出现的一些问题以及解决方法。三、实验内容1、PL/0语言的单词结构关键字(10个):begin,end,if,then,while,do,const,var,call,procedure标识符:字母序列,最大
2、长度10常数:整型常数算符和界符(17个):+,-,*,/,odd,=,<>,<,>,<=,>=,:=,(,),,,.,;2、单词的种别SYM_IDENTIFIER,标识符SYM_NUMBER,常数SYM_PLUS,+SYM_MINUS,-SYM_TIMES,*SYM_SLASH,/SYM_ODD,oddSYM_EQU,=8SYM_NEQ,<>SYM_LES,SYM_GEQ,>=SYM_LPAREN,(SYM_RPAREN,)SYM_COMMA,,SYM_SEMICOLON,;SYM_PERIOD,.SYM_BECOMES,:=SY
3、M_BEGIN,beginSYM_END,endSYM_IF,ifSYM_THEN,thenSYM_WHILE,whileSYM_DO,doSYM_CONST,constSYM_VAR,varSYM_CALL,callSYM_PROCEDUREprocedure3、PL/0的语言的词法分析器将要完成以下工作:(1)跳过分隔符(如空格,回车,制表符);(2)识别诸如begin,end,if,while等保留字;(3)识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量sym赋值为SYM_IDENTIFIER。(4)识别数字序列,当前值赋给全局量NUM,s
4、ym则置为SYM_NUMBER;(5)识别:=,<=,>=之类的特殊符号,全局量sym则分别被赋值为8SYM_BECOMES,SYM_LEQ,SYM_GEQ等。4、词法分析器的实现方式:把词法分析器设计成一个独立子程序,以便于语法分析器调用。词法分析器运行一次产生一个单词符号。8实验二语法分析一、实验目的在实验一的基础上,采用递归下降的方法实现PL/0语言(一种示例小语言)的语法分析器。二、实验要求1、要求每位同学单独完成语法法分析器,并接受检查;2、撰写实验报告。(1)用上下文无关文法写出“三、实验内容”中的语法规则;(2)实验报告不要摘抄全部代码,但需要流程图的形式描
5、述程序结构;(3)必须书写设计和实现的过程中出现的一些问题以及解决方法。三、实验内容1、Test语言的语法结构程序体.(1)程序(2)程序体8(3)语句序列语句;(4)语句identcallbeginwhileendident:=ifdothen语句语句表达式语句序列条件条件(5)条件表达式odd表达式=<><><=>=表达式8(6)表达式项项+--+(7)项因子因子/*(8)因子identnumber表达式()82、采用递归下降的方法来设计PL/0编译器。以下我们给出该语言的FIRST和FOLLOW集合。非终结符(S)FIRST(S)FOLLOW(S)程序体constv
6、arprocedureidentcallifbeginwhile.;语句identcallbeginifwhile.;end条件odd+-(identnumberthendo表达式+-(identnumber.;)Rendthendo项identnumber(.;)R+-endthendo因子identnumber(.;)R+-*/endthendo注:表中R代表六个关系运算符。8实验三语义分析和中间代码产生一、实验目的在实验二的基础上,采用基于属性文法的语法制导翻译方法完成语义分析和中间代码产生。二、实验要求1、要求每位同学单独完成语义分析器中至少一种语法单位的翻译,并
7、接受检查;2、撰写实验报告。(1)用属性文法描述你要实现翻译的语法单位的属性文法;(2)必须书写设计和实现的过程中出现的一些问题以及解决方法。三、实验内容1、中间代码采用三地址代码形式表示2、自由选择一种语法单位对其进行语义分析和翻译。3、此程序通过在实验二基础上改动实现。8