理论教育 Pascal编译器设计:声明部分

Pascal编译器设计:声明部分

时间:2023-11-04 理论教育 版权反馈
【摘要】:#include是由预处理器识别的,而Pascal的单元声明USES是由Pascal编译器处理的。标准Pascal中对于常量的类型是由编译器根据常量值自动判定的,并且只允许使用整型、实型、字符型、字符串型四类常量。与其他高级语言比,Pascal嵌套声明机制并无明显优势,反倒使编译器的存储分配算法变得复杂。标准Pascal语言规定函数或过程的形参类型或返回类型必须是类型名,不允许为匿名类型。

Pascal编译器设计:声明部分

声明部分主要包含单元声明、标号声明、常量声明、类型声明、变量声明、函数或过程声明。

1.单元声明

单元声明用于声明程序所需包含的其他单元文件,功能与C语言的#include类似,但是其处理与#include是完全不同的。#include是由预处理器识别的,而Pascal的单元声明USES是由Pascal编译器处理的。

声明格式:

例如: USESaa,bb,cc;

2.标号声明

标号并标声不号明需格声要式明事用:先于声声明明就程可序所以直包接含使的用标号。,功能与C语言的标号非常相似,只是C语言的

例如: LABEL L1,L2,L3;

3.常量声明

的常量常声指量明格声的就式明是用:数于学声常明量程序。所使用的常量,与C语言的#define宏定义是有所不同的。Pascal

例如: CONSTa=12;b=1.2+3.1;c="r";

注意:常量声明部分必须以关键字CONST开始,等号右边的常量既可以是普通的常量,也可以是常量表达式,由编译器在编译阶段计算得到。标准Pascal中对于常量的类型是由编译器根据常量值自动判定的,并且只允许使用整型、实型、字符型、字符串型四类常量。不过,一些商用编译器对常量声明进行了扩展,例如,允许由用户指定常量的类型或者允许声明构造类型的常量等。

4.类型声明

类型声明用于声明用户自定义的类型,功能与C语言的typedef非常相似。

声明格式:

例如:978-7-111-32164-4-Chapter01-11.jpg(www.daowen.com)

C语言声明:978-7-111-32164-4-Chapter01-12.jpg

类型声明部分必须以关键字TYPE开始。“类型”可以是基本类型名用户自定义类型名,亦可以是匿名类型定义。关于类型定义的详细说明参见后续章节。

5.变量声明

变声量明格声式明用:于声明程序所使用的变量,功能与C语言的变量声明类似。

例如:978-7-111-32164-4-Chapter01-14.jpg

C语言声明:978-7-111-32164-4-Chapter01-15.jpg

变量声明部分必须以关键字VAR开始。“变量标识符列表”是一个用逗号隔开的标识符序列。冒号后面的“类型”可以是类型标识符,也可以是匿名类型声明,如上例的c变量声明形式。

6.函数或过程声明

函数或过程声明用于声明程序所包含的用户自定义函数或过程。函数或过程声明一般包含声明首部、声明部分、执行体部分三部分。其中,声明部分与主程序的声明部分类似,同样包含变量、常量、类型等声明部分。那么,函数或过程的声明部分中是否还可以包含函数或过程声明呢?答案是肯定的,标准Pascal规定可以嵌套声明函数或过程,即函数或过程仍然可以嵌套声明子函数或过程。然而,C语言是不允许函数嵌套声明的。函数或过程嵌套声明的优劣在此不便评说,但包括C、C++、BASIC、Java等在内的许多高级语言都不允许。与其他高级语言比,Pascal嵌套声明机制并无明显优势,反倒使编译器的存储分配算法变得复杂。这或许正是其他高级语言不允许这一声明机制的重要因素之一。考虑到读者可能是初学编译技术,为了简化设计与实现,故Neo Pascal编译器不允许函数或过程嵌套声明,这与标准Pascal有一定区别。

声明格式:

例如:978-7-111-32164-4-Chapter01-17.jpg

C语言声明:978-7-111-32164-4-Chapter01-18.jpg

注意:以上的声明形式与标准Pascal规范是存在一定差异的。标准Pascal规定过程或函数的形参除了值参数、变量参数(与C++的引用参数类似),还可以是过程参数、函数参数。Neo Pascal参考Delphi采用函数过程指针代替函数、过程参数。标准Pascal语言规定函数或过程的形参类型或返回类型必须是类型名,不允许为匿名类型。形如“FUNCTION AA(A:ARRAY[1..10]OF INTEGER):BOOLEAN;”的函数首部是非法的。

另外,Pascal语言还有两个特点:Pascal语言是大小写不敏感的,这与C语言是不同的;Pascal语言与C语言一样对于用户程序的阶梯型缩进是忽略的,这与Python语言是不同的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈