编译原理(1)用C++实现简单的词法分析器

主要功能

该词法分析程序能输入源程序并输出单词符号。在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。

数据定义

识别关键字:if、int、for、while、do、return、break、continue等
种别码1(该部分可在程序中自定义)
其它的都识别为标识符; 种别码 2
常数为无符号整形数; 种别码3
运算符包括:+、-、*、/、=、>、<、>=、<=、!= 种别码4
分隔符包括:,、;、{、}、(、) 种别码5

如何实现功能

  1. 字母模块:
    为了识别关键字,必须超前扫描多个字符。超前到能够肯定词性的地方为止。所以将扫描到的字母存入数组中,然后与提前设置的关键字数组进行对比,成功匹配则为关键字,若未匹配,则此单词可判定为标识符
  2. 常数模块:
    将扫描到的数字存入字符数组中,然后把常数字符转换为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

  1. 符号模块:
    将扫描到的符号存入字符数组中,逐个判断是否为运算符,若是则输出结果,若不是则继续判断是否为分隔符, 若是则输出结果,若不是则判断是否为程序中预设的结束符号,若是则结束扫描,若不是则报错
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值