资源描述:
《编译方法实验.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1编译原理实验人民大学信息学院陈文萍2内容实验概述PL0语言简介词法分析器实验部分3实验设置实验内容PL/0编译器的实现实验目的理解编译器的工作机制掌握编译器的构造方法掌握词法分析器的生成工具LEX的用法掌握语法分析器的生成工具YACC的用法4实验要求独立完成程序源代码(有注释,易读)文档:整个编译器的设计说明(三个实验完成后提交)按时提交迟交影响成绩鼓励扩展5实验环境与考评成绩评定程序文档实验分成三部分:词法分析语法分析语义分析和代码生成实验环境WindowsC或C++6PL/0编译程序的实验流程PL0源程序词法分析器语义
2、分析和中间代码生成语法分析器类汇编代码PL/0类汇编C7PL/0语言简介PL/0语言是Pascal语言的子集数据类型只有整型标识符的有效长度是10,以字母开始的字母数字串数最多为14位过程无参,可嵌套(最多三层),可递归调用变量的作用域同PASCAL,常量为全局的8PL/0语言简介语句类型:赋值语句,if...then...,while...do...,read,write,call,复合语句begin...end,说明语句:const...,var...,procedure…13个保留字:if,then,while,do,
3、read,write,call,begin,end,const,var,procedure,odd9PL0语言的EBNF范式EBNF:可说明哪些符号序列是对于某给定语言在语法上有效的程序。EBNF范式的符号说明<>:语法构造成分,为非终结符::=:该符号的左部由右部定义,读作“定义为”
4、:或{}:括号内的语法成分可重复[]:括号内成分为任选项():圆括号内成分优先10PL0语言的EBNF范式<程序>::=<分程序>.<分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句><常量说明部分>::=CO
5、NST<常量定义>{,<常量定义>};<常量定义>::=<标识符>=<无符号整数><无符号整数>::=<数字>{<数字>}<变量说明部分>::=VAR<标识符>{,<标识符>};<标识符>::=<字母>{<字母>
6、<数字>}11PL0语言的EBNF范式<过程说明部分>::=<过程首部><分程序>{;<过程说明部分>};<过程首部>::=PROCEDURE<标识符>;<语句>::=<赋值语句>
7、<复合语句>
8、<条件语句>
9、<当型循环语句>
10、<过程调用语句>
11、<读语句>
12、<写语句>
13、<空><赋值语句>::=<标识符>:=<表达式
14、><复合语句>::=BEGIN<语句>{;<语句>}END<条件>::=<表达式><关系运算符><表达式>
15、ODD<表达式><条件语句>::=IF<条件>THEN<语句>12PL0语言的EBNF范式<表达式>::=[+
16、-]<项>{<加法运算符><项>}<项>::=<因子>{<乘法运算符><因子>}<因子>::=<标识符>
17、<无符号整数>
18、’(‘<表达式>’)’<加法运算符>::=+
19、-<乘法运算符>::=*
20、/<关系运算符>::==
21、#
22、<
23、<=
24、>
25、>=<当型循环语句>::=WHILE<条件>DO<语句><过程调用语句>
26、::=CALL<标识符>13PL0语言的EBNF范式<读语句>::=READ’(‘<标识符>{,<标识符>}’)’<写语句>::=WRITE’(‘<表达式>{,<表达式>}’)’<字母>::=a
27、b
28、...
29、X
30、Y
31、Z<数字>::=0
32、1
33、...
34、8
35、914PL/0语言词法分析器实验实验内容:用flex工具生成一个PL/0语言的词法分析程序,对PL/0语言的源程序进行扫描,识别出单词符号的类别,统计输出各种符号的信息输入:PL0源程序输出:把单词符号分为下面五类,然后统计PL0源程序中各单词符号出现的次数。K类(关键字)I类
36、(标识符)C类(常量)P类(算符及界符)O类(其他)实验环境:词法分析器生成工具:flex编程语言:C调试环境:VC15PL/0语言词法分析器实验例如,对如下的程序:vara,b;proceduretest;vart;begint:=1;end;begincalltest;end.词法分析结果输出,类别包括关键字K(keyword),标识符I(ident),常熟C(const),算符P(operator)及界符O(symbol),其他(other)K类:var:2procedure:1…I类:a:1b:1…C类:1:1……1
37、6LEX概述LEX是一个词法分析器的自动产生系统。LEX源程序的核心是识别规则,它由正规式和动作组成。LEX源程序LEXlex.yy.c文件源语言程序yylex()函数单词符号串17LEX源程序的格式%{声明--可选%}辅助定义--可选%%识别规则--必须有%%用户子程序--可选18声明所