编译原理实验报告pl0

编译原理实验报告pl0

ID:35235189

大小:96.64 KB

页数:9页

时间:2019-03-22

编译原理实验报告pl0_第1页
编译原理实验报告pl0_第2页
编译原理实验报告pl0_第3页
编译原理实验报告pl0_第4页
编译原理实验报告pl0_第5页
资源描述:

《编译原理实验报告pl0》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、PL/0语言编译器分析实验报告学院:计算机学院学号:1112057195姓名:夏建鑫课程名称:编译原理一、实验目的通过阅读与解析一个实际编译器(PL/0语言编译器)的源代码,加深对编译阶段(包括词法分析、语法分析、语义分析、中间代码生成等)和编译系统软件结构的理解,并达到提高学生学习兴趣的目的。二、实验要求(1)要求掌握基本的程序设计技巧(C语言)和阅读较大规模程序源代码的能力;(2)理解并掌握编译过程的逻辑阶段及各逻辑阶段的功能;(3)要求能把握整个系统(PL/0语言编译器)的体系结构,各功能模块的功能,各模块之间的接口;(4)要求能

2、总结出实现编译过程各逻辑阶段功能采用的具体算法与技术。三、实验步骤(1)根据PL/0语言的语法图,理解PL/0语言各级语法单位的结构,掌握PL/0语言合法程序的结构;(2)从总体上分析整个系统的体系结构、各功能模块的功能、各模块之间的调用关系、各模块之间的接口;(3)详细分析各子程序和函数的代码结构、程序流程、采用的主要算法及实现的功能;(4)撰写分析报告,主要内容包括系统结构框图、模块接口、主要算法、各模块程序流程图等。四、报告内容PL/0语言语法的BNF表示-1,对语法描述图的解析<程序>→<程序体>.<程序体>→[<常量说明部分>

3、][变量说明部分>][<过程说明部分>]<语句><常量说明部分>→const<常量定义>{,<常量定义>};<常量定义>→<标识符>=<无符号整数><无符号整数>→<数字>{<数字>}<变量说明部分>→var<标识符>{,<标识符>};<标识符>→<字母>{<字母>

4、<数字>}<过程说明部分>→<过程首部><程序体>{;<过程说明部分>};<过程首部>→procedure<标识符>;<语句>→<赋值语句>

5、<条件语句>

6、<当型循环语句>

7、<过程调用语句>

8、<复合语句><赋值语句>→<标识符>:=<表达式><复合语句>→begin<语句序

9、列>end<语句序列>→<语句>{;<语句>}<条件>→<表达式><关系运算符><表达式>

10、odd<表达式><表达式>→[+

11、-]<项>{<加法运算符><项>}<项>→<因子>{<乘法运算符><因子>}<因子>→<标识符>

12、<无符号整数>

13、'('<表达式>')'<加法运算符>→+

14、-<乘法运算符>→*

15、/<关系运算符>→=

16、<>

17、<

18、<=

19、>

20、>=<条件语句>→if<条件>then<语句><过程调用语句>→call<标识符><当型循环语句>→while<条件>do<语句><字母>→a

21、b

22、...

23、x

24、y

25、z<数字>→0

26、1

27、2

28、...

29、

30、8

31、9编译程序总体流程图Pl/0词法分析程序Getsym识别的单词:(类别,值)保留字:如:BEGIN、END、IF、THEN等运算符:如:+、-、*、/、:=、#、>=、<=等标识符:用户定义的变量名、常数名、过程名常数:如:10、25、100等整数界符:如:‘,’、‘.’、‘;’、‘(’、‘)’等读字符子程序(getch)〈表达式〉的递归子程序实现procedureexpr;beginifsymin[plus,minus]thenbegingetsym;term;endelseterm;whilesymin[plus,minus]d

32、obegingetsym;term;endend;〈因子〉∷=〈标识符〉

33、〈无符号整数〉

34、‘(’〈表达式〉‘)’〈因子〉的递归子程序实现procedurefactor;beginifsym<>identthenbeginifsym<>numberthenbeginifsym=‘(‘thenbegingetsym;expr;ifsym=‘)’thengetsymelseerrorendelseerrorendelsegetsymendelsegetsymend;常量定义语句的处理语法:<常量说明部分>::=const<常量定义>{,<常量

35、定义>};<常量定义>::=<标识符>=<无符号整数><无符号整数>::=<数字>{<数字>}ifsym=constsymthenbegingetsym;(*获取下一个token,正常应为用作常量名的标识符*)repeat(*反复进行常量声明*)constdeclaration;(*声明以当前token为标识符的常量*)whilesym=commado(*如果遇到了逗号则反复声明下一常量*)begingetsym;(*获取下一个token,这里正好应该是标识符*)constdeclaration(*声明以当前token为标识符的常量*)

36、end;ifsym=semicolonthen(*如果常量声明结束,应遇到分号*)getsym(*获取下一个token,为下一轮循环做好准备*)elseerror(5)(*提示5号错误*)untilsym<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。