- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理课程设计》
实验报告
课 题:编译器功能的实现
目 录
1 介绍 1
1.1 前言 1
2 编译器 2
2.1 PL/X编译器结构概述 2
2.2 语法元素 4
2.3语法图 5
2.4判断是否符合两条限制规则 13
2.5 语法出错表定义 16
3 虚拟机 17
3.1 虚拟机组织结构 17
3.2 虚拟机指令格式 18
4 程序设计 21
4.1 全局变量、全局常量 21
4.2 函数接口 28
5.编译器功能的实现 37
5.1 概述 37
5.2 实例一 37
5.3 实例二 41
5.4 实例三 43
1 介绍
1.1 前言
根据课程设计要求制作PL/X语言的编译器,完成词法分析、语法分析、语义分析及代码生成、出错处理和解释运行程序,并添加一定的扩展,最终实现一个PL/X的编译器。
所完成扩展点说明:
1)支持三种注释
a)单行注释
b)/*---*/ 多行注释
c)(*---*) 多行注释
2)支持read语句,因此可从终端获取输入
3)支持write语句,因此可从终端输出
4)支持for语句
5)支持do…while语句
6) call过程
7) 求余运算%
8) 整数的奇偶odd
9) 幂运行**
关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如除数为0)
允许变量名或函数名重复,但访问的时候以最后一次声明的为有效
2 编译器
2.1 PL/X编译器结构概述
图 1 PL/X编译程序的结构图
图 2 PL/X的解释执行结构
图 3 PL/X编译程序总体流程图
语法分析过程PROG是整个编译过程的核心,是指开始由主程序调用GETSYM取一个单词,再调用语法分析过程PROG, PROG由当前单词根据语法规则再调用其它过程,如说明处理、代码生成或出错处理等过程进行分析,当分析完一个单词后,PROG再调用GETSYM取下一个单词,一直重复到当前单词为结束符.表明源程序已分析结束。若未取到结束符.,而源程序已没有输入符号,这时表明源程序有错误,无法再继续分析。
图 4 PL/X过程调用相关示意图
2.2 语法元素
关键字:
and, begin, call, case, constant, do, else, end, false, for, if, integer, logical, not, or, “odd”,procedure, program, read, repeat, switch, then, true, until, while, write
操作符:
., ;, **, ++, “--, +, -, *, /, %, =, , =, , =, ==, !,+=, -=, *=, /=
2.3语法图
程序
程序体
语句序列
语句
条件
表达式
项
因子
prog = program ds { proc } begin ss end .
proc = procedure aident [ds] begin ss end
ds = d {; d }
d = integer aident {, aident} |
logical bident {, bident} |
constant aident = number {, aident = number}
ss = s { ; s }
s = aident := ae |
bident := be |
if be then ss [else ss] end |
while be do ss end |
repeat ss until be |
write ae .
read aident | bident
for s ; be ; s do ss end
call procedure
do ss . while be end
ae= [-] at {(-|+) at }
8) at = af1 {(*|/) af1}.
9) af1 = af {(%|**) af}. //扩展的求余运算
10) af = aident | number | ( ae ) | constant
be = bt {or bt}
bt = bf {and bf }
bf = bident | true | false |not bf |( be ) | re1
re1=odd re
re = (aident | number )( = | | = | | = | /= ) ae
ds = d {; d }
2.4判断是否符合两条限制规则
结构:
B1 = {
您可能关注的文档
- 电装实习报告4.doc
- 电装实习报告2.doc
- 电装实习报告9.doc
- 电视新闻专题节目的特点及发展趋势 毕业论文.doc
- 电装实习报告15.doc
- 电装实习报告16.doc
- 电视的广告投放策略 毕业论文.doc
- 电装实习报告7.doc
- 电话营销渠道的调查报告.doc
- 电话查询管理系统毕业设计.doc
- 2025-2030中国轮式挖沟机行业市场现状供需分析及投资评估规划分析研究报告.docx
- 2025-2030中国车载CT扫描仪行业市场现状供需分析及投资评估规划分析研究报告.docx
- 2025-2030中国车辆齿轮行业营销创新及发展动向追踪分析研究报告.docx
- 2025-2030中国输送带行业发展潜力与未来需求趋势研究报告.docx
- 2025-2030中国远程教育行业市场发展分析及前景趋势与投资机会研究报告.docx
- 2025-2030中国连接式准直器行业市场发展趋势与前景展望战略研究报告.docx
- 2025-2030中国输配电行业市场发展前瞻及投资战略研究报告.docx
- 2025-2030中国迟发性运动障碍治疗行业现状调研及未来趋势研究报告.docx
- 2025-2030中国软件定义的存储控制器软件行业市场发展趋势与前景展望战略研究报告.docx
- 2025-2030中国远程监控站行业市场现状供需分析及投资评估规划分析研究报告.docx
文档评论(0)