1.单词的类型
单词符号是最基本的语法单位,具有确定的语法意义。通常,程序语言的单词符号可以分为5类:
(1)关键字:也称基本字或保留字,是程序设计语言定义的具有特定意义的名字,它通常标识源程序中语法成分的功能、开始或结束。例如,C++语言中的if、while、bool、class等。为了使得源程序易读,提高词法分析的效率,关键字一般不允许被用户重新定义。
(2)标识符:是用户在设计源程序时自己定义的名字,一般用来表示变量名、数组名、函数名等。
(3)常数:是程序设计语言或用户在设计源程序时定义的,其类型一般有整型、实型、布尔型、字符型等,比如12、3.14、true、A等都是常数。
(4)运算符:简称算符,是程序设计语言定义的符号,一般有算术运算符、逻辑运算符和关系运算符等,比如C++语言中+、-、*、/、&&、||、!、>=等都是算符。
(5)分界符:简称界符,是程序设计语言定义的符号,一般包括标点符号及一些特殊的符号,比如“;”、“,”、“/*”等都是界符。
2.单词的内部表示
前面已经说过,词法分析器输入的是源程序字符串,输出的是单词的内部表示。其内部表示形式一般为二元式:(单词种别编码,单词的属性值)。其中,单词的种别编码在语法分析时使用,单词的属性值在语义分析和中间代码生成时使用。
单词种别表示单词的种类,通常用整数表示。单词如何分类,如何编码,没有统一的规定,主要取决于处理上的方便。基本原则是不同的单词能彼此区别且有唯一的表示。一般来讲,一种程序设计语言的关键字、界符和算符都是固定的,可以采用一符一种的方式,标识符一般统归为一种,而常数则按其类型(整型、实型、字符型、布尔型等)进行分类。L语言的单词种别编码见表3-1。(www.xing528.com)
表3-1 L语言的单词种别编码
如果一个种别只含有一个单词(如表3-1所示的关键字、算符和界符),则单词的属性值没有必要给出,单词的种别码唯一地表示了这个单词。若一个种别含有多个单词,则需要给出单词的属性值。单词的属性值是指单词符号的特性。例如,标识符或常数的属性值可以是单词符号串本身,也可以是其信息在符号表中登记项的指针值。
例3.1 语句“while(flag=true)do a:=2*1.5;”经过词法分析后输出的二元式为:
(1)(14,-) (2)(44,-) (3)(39,"flag")
(4)(29,-) (5)(43,-) (6)(45,-)
(7)(15,-) (8)(39,"a") (9)(38,-)
(10)(40,"2") (11)(27,-) (12)(41,"1.5")
(13)(48,-)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。