. 编译程序的设计思想
编译程序的设计可以采用自顶向下和自底向上两种不同的方法。由于许多高级语言(如
!"!,)中的语法成分都是递归定义的, 也是如此,所以本实验采用递归子程序法,
这是一种自顶向下的的编译方法,其基本思想是对源程序的每个(或若干个)语法成分编制一
个处理子程序,从处理程序这个语法成分的子程序开始,在分析过程中调用一系列过程或
函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。
在本上机实习中,我们给出用 !"! 语言编写的 的编译程序,要求学生先读懂它,
然后再用自己熟悉的高级语言改写它,能力强的同学可以按照所学知识,自行设计实现方案。
. 编译程序的功能
语法分析
对由 / 语言编制的程序作语法分析,确定是否属于 / 语言,同时揭示出程序
的内在结构。
语法错误检查
根据 / 语言的文法规则设置检测手段,通过查错子程序和一些查错语句,报告源程
序出错位置、性质等,直至整个程序结束为止。
生成目标代码
/ 语言的目标代码是建立在一个假想的处理机上,此处理机称为 / 处理机。
执行目标代码
/ 处理机是一种假想的处理机,其目标代码不能在实际的机器上执行,故此编译程
序设置了一个子程序,它对 / 语言的目标代码逐条解释执行,最后得出所需结果。
./ 编译程序的有关过程及函数
在 / 语言的编译文本中,除了常量和变量说明外,共有 A 个相互嵌套或并列的过程
或函数。现对这些过程和函数作扼要说明。
:其功能是报告 / 源程序的出错信息。 为错误类型号,共可查出 ? 种
错误。
7=::词法分析子程序。其功能为读单词。
7:读字符子程序。它嵌套于读单词子程序中。
7<,=,>,伪代码生成子程序。其功能是根据不同的 <、=、> 生成不同的伪代码。
< 表示指令码,= 表示层差,> 表示位移量或数。
,,:查错子程序。其功能是检测源程序中的语法错误。
694,<,=:分程序处理模块。其功能为对分程序进行处理。4 表示层差,
< 表示标识符表的下标,= 是符号集,表示可能出现的符号。
分程序处理模块是整个编译程序的核心,它包含以下的过程和函数。
C9:其功能是造符号表 6。9 表示符号的类型,其取值范围是,
46,6,即此子程序对常量、变量和过程造符号表 6,以备检查标识符是
否说明过。
D:其功能是查符号表,它是一个函数。 是所检查的标识符,若查到则给
出标识符 在标识符表中的位置,否则给 。
E:常量造表子程序。其功能是为常量造一张常量表,内填常量名、常
- 4 -