本章你将会解析声明(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声明语法

(基于Java)编写编译器和解释器-第9章:解析声明-第一部分(连载)
留意常量和类型是“定义”的,而变量,过程以及函数是“声明”的。我们把定义和声明语句统称为“声明”(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.';

相关文章:

  • 2021-11-20
  • 2021-07-05
  • 2021-10-16
  • 2021-12-07
  • 2021-07-28
  • 2022-01-13
  • 2021-10-27
  • 2021-10-16
猜你喜欢
  • 2022-01-14
  • 2021-11-27
  • 2021-07-25
  • 2021-12-31
  • 2021-08-13
  • 2022-01-30
  • 2022-02-21
相关资源
相似解决方案