二、考核方式及评定标准
上机实验要求对PL语言及其编译器进行实现及扩充、修改。每个扩充或修改方式可得到不同的分数,满分为100分。
完成上机作业后,必须提交下列文档:
(1) 修改后的PL语言文本。包含词法分析(正规式),语法分析(BNF)。 (2) 有关修改后的PL编译/解释器的说明。详细说明编译器是如何编译新的
PL语言程序的。指出程序中最精彩的部分,以及为什么这样做,如何控制和恢复语义错误的。
(3) 给出改动后的编译器源程序清单,并标记出所修改的部分。比较你的编
译器和原来的编译器之间的差别。 (4) 说明你的编译器中可能存在的错误。
(5) 总结经验与教训,如果重做一遍,会有哪些新的改进? 对现存的PL编译程序做如下修改或扩充,其中(1)、(2)、(11)和(12)必须完成,剩余的均可任意选择,但总分必须超过40分。
(1) 注释(5分)
(2) 布尔类型的数据(10分)
(3) 布尔表达式的短路计算(5分)
(4) 数组(10分)为了便于解释执行,可能要增加新的PL机器操作指令。 (5) 参数(10分) 语法同Pascal(不用var声明)。 (6) 函数(10分)语法同Pascal。 (7) else子句和repeat语句(5分)
(8) for语句,语法参照Pascal或C语言(5分) (9) exit语句和break语句(5分)
(10)记录(结构),语法同Pascal语言(10分)。 (11)更有力的语法错误恢复机制(20分) (12)分离解释和编译器(5分)
三、参考资料与编译器分析
第一部分 PL语言及其编译器
1. PL语言介绍
PL程序设计语言是一个较简单的语言,它以赋值语句为基础,构造概念有顺序、条件和重复(循环)三种。PL有子程序概念,包括过程定义(可以嵌套)与调用且有局部变量说明。PL中唯一的数据类型是整型,可以用来说明该类型的常量和变量。当然PL也具有通常的算术运算和关系运算。具体的PL语法图如下。
4
1.1 PL语言的语法图
程序
程序体
语句序列 程序体 . const , ; var , ident = number ident ; procedure ident ; ; 程序体 语句 语句 ; 5
语句 条件 表达式 项
ident := 表达式 call ident begin 语句序列 end if 条件 then 语句 while 条件 do 语句 odd 表达式 表达式 = <> < > <= >= 表达式 + 项 - + - 项 6
因子
因子 * / 因子 ident number ( 表达式 ) 7
2. PL语言编译器
本书所提供的PL语言编译器的基本工作流程如图1-1所示:
源程序
词法分析 语法分析 符号表管理语义分析 错误诊断处理 代码生成 代码执行 执行结果
图1-1 PL编译器基本工作流程
8