主要功能
该词法分析程序能输入源程序并输出单词符号。在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。
数据定义
识别关键字:if、int、for、while、do、return、break、continue等
种别码1(该部分可在程序中自定义)
其它的都识别为标识符; 种别码 2
常数为无符号整形数; 种别码3
运算符包括:+、-、*、/、=、>、<、>=、<=、!= 种别码4
分隔符包括:,、;、{、}、(、) 种别码5
如何实现功能
- 字母模块:
为了识别关键字,必须超前扫描多个字符。超前到能够肯定词性的地方为止。所以将扫描到的字母存入数组中,然后与提前设置的关键字数组进行对比,成功匹配则为关键字,若未匹配,则此单词可判定为标识符 - 常数模块:
将扫描到的数字存入字符数组中,然后把常数字符转换为int类型, 判断整个数字是否在无符号整形的范围内,若不在,则进行报错
Ps.
计算机中32位int类型变量的范围,其中int类型是带符号整数。
正数在计算机中表示为原码,最高位为符号位:
1的原码为0000 0000 0000 0000 0000 0000 0000 0001
2147483647的原码为0111 1111 1111 1111 1111 1111 1111 1111
所以最大的正整数是2147483647
在二进制中,0有两种表方法。
+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,
-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,
因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。
-2147483648的补码表示为1000 0000 0000 0000 0000 0000 0000 0000,在32位没有原码。
注意,这个补码并不是真正的补码,真正的补码是1 1000 0000 0000 0000 0000 0000 0000 0000,溢出。
所以带符号32位int类型整数为-2147483648~2147483647
- 符号模块:
将扫描到的符号存入字符数组中,逐个判断是否为运算符,若是则输出结果,若不是则继续判断是否为分隔符, 若是则输出结果,若不是则判断是否为程序中预设的结束符号,若是则结束扫描,若不是则报错