![](https://csdnimg.cn/release/download_crawler_static/79502616/bg10.jpg)
上 机 实 习 题
对于如下文法所定义的 PASCAL 语言子集,试编写并上机调试一个词法分析程序:
〈程序〉→〈变量说明〉BEGIN〈语句表〉END.
〈变量说明〉→VAR〈变量表〉:〈类型〉;|〈空〉
〈变量表〉→〈变量表〉,〈变量〉|〈变量〉
〈类型〉→INTEGER
〈语句表〉→〈语句表〉;〈语句〉|〈语句〉
〈语句〉→〈赋值语句〉|〈条件语句〉|〈WHILE 语句〉|〈复合语句〉|〈过程定义〉
〈赋值语句〉→〈变量〉∶=〈算术表达式〉
〈条件语句〉→IF〈关系表达式〉THEN〈语句〉ELSE〈语句〉
〈WHILE 语句〉→WHILE〈关系表达式〉DO〈语句〉
〈复合语句〉→BEGIN〈语句表〉END
〈过程定义〉→PROCEDURE〈标识符〉〈参数表〉;
BEGIN〈语句表〉END
〈参数表〉→(〈标识符表〉)|〈空〉
〈标识符表〉→〈标识符表〉,〈标识符〉|〈标识符〉
〈算术表达式〉→〈算术表达式〉+〈项〉|〈项〉
〈项〉→〈项〉*〈初等量〉|〈初等量〉
〈初等量〉→(〈算术表达式〉)|〈变量〉|〈无符号数〉
〈关系表达式〉→〈算术表达式〉〈关系符〉〈算术表达式〉
〈变量〉→〈标识符〉
〈标识符〉→〈标识符〉〈字母〉|〈标识符〉〈数学〉|〈字母〉
〈无符号数〉→〈无符号数〉〈数字〉|〈数字〉
〈关系符〉→=|<|<=|>|>=|<>
〈字母〉→A|B|C|…|X|Y|Z
〈数字〉→0|1|2|…|8|9
〈空〉→
要求和提示:
(1) 单词的分类。
可将所有标识符归为一类;将常数归为另一类;保留字和分隔符则可采取一词一类。
(2) 符号表的建立。
可事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法
分析过程中建立。
(3) 单词串的输出形式。
所输出的每一单词,均按形如
(CLASS,VALUE)
的二元式编码。对于变量标识符和常数,CLASS 字段为相应的类别码,VALUE 字段则是
该标识符、常数在其符号表中登记项的序号 (要求在变量名表登记项中存放该标识符
的字符串,其最大长度为四个字符;常数表登记项中则存放该整数的二进制形式)。对
于保留字和分隔号,由于采用一词一类的编码方式,所以仅需在二元式的 CLASS 字段
上放置相应的单词的类别码,VALUE 字段则为“空”。不过,为便于查看由词法分析程
序所输出的单词串,也可以在 CLASS 字段上直接放置单词符号串本身。