87143158 2020-03-06
词法分析:
图2-29中的伪代码在遇到空格、制表符或换行符时不断读取输入字符,从而跳过了空白部分。变量peek存放了下一个输入字符。在错误消息中加入行号和上下文有助于定位错误。这个代码使用变量line统计输入中的换行符个数。
图2-30中的伪代码读取一个整数中的数位,并用变量v累计得到这个整数的值。
图2-31中的伪代码使用get操作来查找保留字。这个伪代码从输入中读取一个以字母开头、由字母和数位组成的字符串s。我们假定读取的s尽可能地长,即只要词法分析器遇到字母或数位,它就不断从输入中读取字符。当它遇到的不是字母或数位,比如它遇到了空白符,已读取的词素就被复制到缓冲区b中。如果字符串表中已经有一个s的条目,它就返回由words.get得到的词法单元。这里s可能是一个关键字,在表words初始化的时候这个s就已经在表中了;它也可能是一个之前被加入到表中的标识符。如果不存在s对应的条目,那么由id和属性值s组成的词法单元被加入到字符串表中,并被返回。
子类Num增加了一个字段value,用于存放整数值
子类Word增加了一个字段lexem,用于保存关键字和标识符的词素
参考-《编译原理(第二版)》