- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理_实验报告PL0
PL/0 语言编译器分析实验报告
学院:计算机学院
学号:1112057195
姓名:夏建鑫
课程名称:编译原理
一、实验目的
通过阅读与解析一个实际编译器(PL/0语言编译器)的源代码, 加深对编译阶段(包括词法分析、语法分析、语义分析、中间代 码生成等)和编译系统软件结构的理解,并达到提高学生学习兴趣的目的。
二、实验要求
(1)要求掌握基本的程序设计技巧(C语言)和阅读较大规模程序 源代码的能力;
(2)理解并掌握编译过程的逻辑阶段及各逻辑阶段的功能;
(3)要求能把握整个系统(PL/0语言编译器)的体系结构,各功能 模块的功能,各模块之间的接口;
(4)要求能总结出实现编译过程各逻辑阶段功能采用的具体算法与技术。
三、实验步骤
(1) 根据PL/0语言的语法图,理解PL/0语言各级语法单位的结构,掌握PL/0语言合法程序的结构;
(2)从总体上分析整个系统的体系结构、各功能模块的功能、各模块之间的调用关系、各模块之间的接口;
(3)详细分析各子程序和函数的代码结构、程序流程、采用的主要算法及实现的功能;
(4)撰写分析报告,主要内容包括系统结构框图、模块接口、主要算法、各模块程序流程图等。
四、报告内容
PL/0 语言语法的 BNF 表示-1,对语法描述图的解析
程序 → 程序体.
程序体 → [常量说明部分][变量说明部分][过程说明部分]语句
常量说明部分 → const 常量定义{,常量定义};
常量定义 → 标识符=无符号整数
无符号整数 → 数字{数字}
变量说明部分 → var 标识符{,标识符};
标识符 → 字母{字母|数字}
过程说明部分 → 过程首部程序体{;过程说明部分};
过程首部 → procedure 标识符;
语句 → 赋值语句|条件语句|当型循环语句|过程调用语句|
复合语句
赋值语句 → 标识符:=表达式
复合语句 → begin 语句序列 end
语句序列 → 语句{;语句}
条件 → 表达式关系运算符表达式| odd 表达式
表达式 → [+|-]项{加法运算符项}
项 → 因子{乘法运算符因子}
因子 → 标识符|无符号整数|(表达式)
加法运算符 → +|-
乘法运算符 → *|/
关系运算符 → =|||=||=
条件语句 → if 条件 then 语句
过程调用语句 → call 标识符
当型循环语句 → while 条件 do 语句
字母 → a|b|...|x|y|z
数字 → 0|1|2|...|8|9
编译程序总体流程图
Pl/0词法分析程序Getsym
〈表达式〉的递归子程序实现
procedure expr;
begin
if sym in [ plus, minus ] then
begin getsym; term;
end
else term;
while sym in [plus, minus] do
begin
getsym; term;
end
end;
〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’
〈因子〉的递归子程序实现
procedure factor;
begin
if sym ident then
begin
if sym number then
begin
if sym = ‘(‘ then
begin
getsym;
expr;
if sym = ‘)’ then
getsym
else error
end
else error
end
else getsym
end
else getsym
end;
常量定义语句的处理语法:常量说明部分: := const 常量定义{, 常量定义};
常量定义: := 标识符=无符号整数
无符号整数: := 数字{ 数字}
if sym = constsym then
begin
getsym; (* 获取下一个token,正常应为
文档评论(0)