本章你将会解析声明(declarations)。因为所有申明的信息都会放到符号表,所以这章也是第4章的一个延续。
==>> 本章中文版源代码下载:svn co http://wci.googlecode.com/svn/branches/ch9/ 源代码使用了UTF-8编码,下载到本地请修改!
目标与方法
本章有以下目标:
- 前端处理Pascal常量定义,类型定义,变量声明和类型说明的解析器。
- 在符号表中加入类型信息。
方法将是开发新的类表现Pascal类型信息,并分别放在intermediate,intermediate.symtabimpl和intermediate.typeimpl包中。为验证你的代码,你会扩展第4章开发的使用工具CrossReferencer使之包含类型信息。
程序语言的申明对解析来说通常是最难搞的一些语句,因为:
- 声明语句语法本身可以很难。
- 声明通常包含递归定义。
- 你得hold住各式各样的信息。
- 你得在符号表放置很多很多很多的东西。
Pascal声明(Declarations)
Pascal申明包含四个部分(本书不处理标识申明label delcaration,因为去掉了goto,也不处理集合和指针类型,这留给你实践吧)。每个部分都可以没有但它们的顺序不能乱,分别是:常量定义部分(constant),类型定义部分(type),变量申明部分以及过程和函数申明(procedure and function)部分。这章只讲前三部分,你会在11章中解析过程和函数申明。语法图9-1显示出Pascal申明有一个相对来说比较明了的语法。
图9-1:Pascal声明语法
留意常量和类型是“定义”的,而变量,过程以及函数是“声明”的。我们把定义和声明语句统称为“声明”(declarations)。
一个Pascal常量定义由1个标识符紧接着等于号"="和一个常量组成。看下面的常量定义部分的例子:
1: CONST
2: factor = 8;
3: epsilon = 1.0e-6;
4: ch = 'x';
5: limit = -epsilon;
6: message = 'Press the OK button to confirm your selection.';