c++词法分析器的实现(编译原理实验)

本文介绍了C++词法分析器的实现过程,强调单个字符读入处理的简单性和对状态自动机的理解。讨论了处理标识符、运算符、分隔符、常量等问题,以及如何处理多行注释和字符串常量的特殊情况。提供了代码实现,并提及未来计划生成状态自动机。最后补充了更新的Go语言版本实现链接。
摘要由CSDN通过智能技术生成

按照课本上,词法分析器应当使用状态自动机,而石油大的课本把状态机讲的七零八落的,老师讲的课……根本没抓到重点,因此还是要自己动手,丰衣足食。

词法分析的重点应当是把输入的代码转化成单词和符号以便于语法分析,因此不需要进行语法的检测(包括括号是否成对等)。

所以我们需要读取的单词【1】主要如下:标识符(包含保留字,变量等),运算符号,分割符号(括号,逗号,分号等等),常量(包括数常量和字符、字符串常量)。网上很多代码都是使用读取一整句然后进行分析的方法,这样可以解决大部分问题但是有少数的问题比如/**/注释可能为多行,特殊处理的话会有些麻烦。再有些使用空白字符分割单词,认为输入的单词之间都用空格符分割,而这样在处理字符串常量的时候会导致失真(“123   4”可能会被分割为【“123】【4”】两个单词)。

因此在吸纳了各种好的思想之后,我发现还是单个字符读入进行处理比较简单,并且可以更深一步的认识状态自动机。

不同的类型的单词的初始状态不同,比如标识符的初始状态是字母或者下划线,数字常量的初始状态是数字,字符串的初始状态是引号等等,之后这一个复杂的问题就可以划分为许多不同的问题。我的思路是先定义了一个未定义的状态(大概是UNDEFINED),在开始或者每一个状态结束的时候,将状态返回到UNDEFINED状态,有些状态返回的时候需要多读一位才能确认状态结束(比如读入一个标识符,发现新读的字符不是标识符的构成成分才能确认标识符结束),但是我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值