【本章小结】 本章是一个编译程序的实例,通过认真阅读PL/0语言编译程序文本,加深理解一般编译程序构造的整体结构和实现的步骤,对词法、语法、语义分析、代码生成及符号表管理每个过程的功能和相互联系及实现技术。联系实际做好作业和实验,巩固知识。 实验要求: ◇ 扩充条件语句 〈条件语句〉::=IF〈条件〉THEN〈语句〉[ELSE〈语句〉] ◇ 扩充重复语句 〈重复语句〉::=REPEAT〈语句〉{;〈语句〉}UNTIL〈条件〉 ◇ 对PL/0语言扩充整形数组(有条件的同学尽量做此题)。 读者自己设计语法并给出用语法图和EBNF描述 也可用其它语言改写PL/0编译程序 如用C语言或Java语言改写PL/0编译程序; 实验报告内容: ⑴ 对扩充部分用语法图和EBNF描述; ⑵ 对原PL/0语言编译程序文本中程序变动部分的说明; ⑶ 所用测试用例包括正确的测试用例和错误的测试用例; ⑷ 实验体会和建议。 建议:为了引起读者对阅读PL/0编译程序文本的兴趣,建议用本节教材文本中的PL/0源程序和目标程序的对应关系为例,阅读PL/0编译程序文本,并总结词法、语法、语义分析和目标代码生成之间的关系。其方法是: ⊙ 先用PL/0语言的语法图和EBNF检查例子的语言是否合乎语法规则。 ⊙ 阅读PL/0源程序文本。方法是从主程序开始,例中遇到什么语法成分就转到相应的语法处理过程。 ⊙ 遇到语义处理造名字表或生成目标代码时,用纸记录下它们操作的结果,以及名字表table和目标代码code的信息变化,并分析这些变化的目的。例如,对过程入口的拉链返填方法。 ⊙ 遇到看不懂的地方再回头看教材文本和注释中的说明和解释。 ⊙ 检查你所得到的代码是否与例中的相同,若不同则找出原因。 |