C词法分析器的Python简单实现

在学习编译原理的课程设计中,需要设计一个词法分许程序。于是尝试用Python来简单实现C语言词法分析器。其中其实并没有什么具体需要克服的难处,只要将部分的词法分析DFA设计好,实现起来思路便更清晰。

 

1、前言

C语言中我们需要提取出关键字,标识符,分隔符,运算符,不同数据类型的常量。其中标识符、标识符及分隔符的提取更简单,而运算符因为各运算符组合具有不同意义需详细分解,例如:>>、>=、>>=,常量更是最让人头疼的,例如:整型 八进制 00123u 十六进制 0x23fflu 、浮点型 123.434f 指数型 0123e-002。

词法分析器还需要能显示出行数、检测出出错位置,并跳过错误继续分析。另外我们还需要对单行注释、多行注释进行跳过,以及跳过暂时不能处理的宏定义、预编译。

2、部分有穷状态自动机实现

2.1、关键字及标识符

2.2、数字(最复杂的一个)

边上也有同学想用Python 的正则表达式,直接将符合前言中的那几种分别表示出来,进行直接匹配。但是其中还是有些复杂的结构无法表示,并且容易出误判,而无法显示出错位置。

不得不说其实不少代码冗余,本文全部的代码实现,欢迎拍砖 https://github.com/single-wolf/show-me-the-code/blob/master/analyzer.py

最近也喜欢上Python ,分享个练手的有趣东西 https://github.com/Show-Me-the-Code/show-me-the-code

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

%d 博主赞过: