C++源代码单词扫描程序(词法分析)

实验内容及要求:

(1)C++源代码扫描程序识别C++记号。

C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。

(2)打开一个C++源文件,打印出所有以上的记号。

(3)要求应用程序应为Windows界面。

(4)选作部分:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。

(5)选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。

思路:

(1)由于需要处理特殊字符等,因此只能逐个字符扫描;

(2)观察上述要求的记号:标识符、关键字、数、特殊符号、运算符号(暂时不考虑注释和字符串,比较特殊后面再进行处理),可以发现这些记号几乎都被特殊符号分割开来了,如空格符、换行符、制表符、逗号、分号等;

(3)分词: 也就是说我们再逐个字符扫描的时候,若遇到这些特殊字符,要么就是某个记号的结束,或者记号本身(分号、逗号也是记号,即特殊符号);而我们扫描过程中,正在处理的字符若不是特殊符号,可以暂存起来,直到遇到结束符,然后把之前缓存起来的字符组合成一个词;

(4)类型判断:经过一轮扫描之后,我们就会得到一个个划分号的词,此时再进行记号类型的判断就容易多了;

(5)当然,除了注释和字符串需要特殊处理外,还有一些特殊字符不一定只有一个字节,比如(++,--)这些是两个字符作为一个整体,若按上面进行分词,这些记号就会被切分开来,不符合要求;这里我们也可以把无法判断是否多个字节的特殊字符缓存起来,等到下一个能确定结束的字符再进行处理;

 

 

程序运行效果图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值