附录A一个完成的编译器前端程序.DOC

附录A一个完成的编译器前端程序

附录A 一个完成的编译器前端程序 这个附录给出了一个完整的编译器前端程序,它是基于2.5-2.8节中非正式描述的简单编译器编写的。和第二章的主要不同之处在于这个前端象6.6节中描述的那样为布尔表达式生成跳转代码。我们首先给出源语言的语法。描述这个语法所用的文法需要进行调整,以适应自顶向下的语法分析技术。 这个翻译器的Java代码由五个包组成:main、lexer、symbol、parser和inter。包inter中包含的类处理用抽象语法表示的语言结构。因为语法分析器的代码和其它各个包交互,它将在最后描述。每个包被存放在一个独立的目录中,每个类都有一个单独的文件。 作为语法分析器的输入时,源程序就是一个由词法单元组成的流,因此面向对象特性和语法分析器的代码之间没有什么关系。当由语法分析器输出时,源程序就是一棵抽象语法树,树中的结构或结点被实现为对象。这些对象负责处理下列所有的事情:构造一个抽象语法树结点,类型检查,生成三地址中间代码(见包inter)。 A.1源语言 这个语言的一个程序由一个块组成,该块中包含了可选的声明和语句。记号basic表示基本类型。 (见原文) 把赋值当作一个语句,而不是表达式中的运算,进行处理可以简化翻译工作。 (见原文) 表达式的产生式处理了运算符的结合率和优先级。它们对每个优先级级别都使用了一个非终结符号,而非终结符号factor被用来表示括号中的表达

文档评论(0)

1亿VIP精品文档

相关文档