【本章小结】
  本章是一个编译程序的实例,通过认真阅读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的信息变化,并分析这些变化的目的。例如,对过程入口的拉链返填方法。
  ⊙ 遇到看不懂的地方再回头看教材文本和注释中的说明和解释。
  ⊙ 检查你所得到的代码是否与例中的相同,若不同则找出原因。