- 34
- 0
- 约 12页
- 2017-08-15 发布于重庆
- 举报
实现C语言的词法分析器.doc
编译原理
实验二
学习经典的词法分析器。
实验分析:
词法分析器,有的教材又称扫描器,我倒是觉得扫描器更加符合其本意,因为词法分析器的主要作用是将文本代码流解析成一个个记号,供语法分析使用。
由于上一次实验,TINY编译器已经相对比较熟悉,这一次主要关注词法分析器的部分,即SCAN.C。就词法分析器本身的写法而言,并没有所谓的标准代码,不过经典代码还是很有参考价值的,而修改经典的过程也是体会经典的最佳形式。
实验过程:
阅读已有编译器的经典词法分析源程序:
我选择的仍然是TINY编译器,它的词法分析部分是SCAN.C文件。
调用词法分析器的形式:
在主函数中有如上语句是调用SCAN.C中的getToken()函数。
getToken()即词法分析器进行状态转换的核心部分。
词法分析器中的常量:
状态枚举:枚举的最大好处在于能够用字符(状态)代替数字,而且将这些封装在一个结构中。
TokenString是为了存储保留字的标识符
以下变量是为了处理输入缓存以及当前指针位置的相关存储:
保留字的结构体,这一部分可以清晰的看到所有保留字:
词法分析器的相关函数:
处理文件输入相关:
这两个函数是一对,前者是从缓存中读取下一个字符,后者则将当前读取的字符重新放回缓存。后者存在的最大的价值在于,当用下一字符的情况判断将跳转到什么状态时,如果该字符不属于当前标示符,则放回缓存,以保证下一标示符的
原创力文档

文档评论(0)