PLX编译程序改进及扩展.doc
文本预览下载声明
衡阳师范学院
计算机科学与技术专业
课
程
设
计
题 目: PL/X编译程序改进及扩展
指导教师: 徐雨明老师
年级班别: 08级1班
学 号:
学生姓名: 夏 彦
时 间: 2011年6月16日
目录
1 介绍 3
1.1 前言 3
2 编译器 4
2.1 PL/X编译器结构概述 4
2.2 语法元素 6
2.3语法图 7
2.4判断是否符合两条限制规则 15
2.5 语法出错表定义 18
3 虚拟机 19
3.1 虚拟机组织结构 19
3.2 虚拟机指令格式 20
4 程序设计 23
4.1 全局变量、全局常量 23
4.2 函数接口 30
5 程序测试 39
6 课程设计总结 40
7 参考文献 41
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) 幂运行**
10) 求阶乘!
11) 求和$
关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如除数为0)
允许变量名或函数名重复,但访问的时候以最后一次声明的为有效
2 编译器
2.1 PL/X编译器结构概述
图 PL/X编译程序的结构图图 PL/X的解释执行结构图 PL/X编译程序总体流程图语法分析过程是整个编译过程的核心,是指开始由主程序调用GETSYM取一个单词,再调用语法分析过程, 由当前单词根据语法规则再调用其它过程,如说明处理、代码生成或出错处理等过程进行分析,当分析完一个单词后,再调用GETSYM取下一个单词,一直重复到当前单词为结束符.表明源程序已分析结束。若未取到结束符.,而源程序已没有输入符号,这时表明源程序有错误,无法再继续分析。
图 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 ) |
显示全部