对于上不去github的小伙伴已经配套上传到CSDN,编译原理课程设计:词法分析器-Python文档类资源-CSDN下载所使用的开发环境:Windows10、python(PyCharm)环境课题功能:创建一更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/RLIRiong/85379958
要求:
创建一个词法分析程序,该程序支持分析常规语法。使用DFA(确定性有限自动机)来实现此程序。 程序有两个输入:1)一个文本文档,包括一组3º语法(正规文法)的产生式;2)一个源代码文本文档,包含一组需要识别的字符串。 程序的输出是一个token(令牌)表,该表由5种token组成:关键词,标识符,常量,限定符和运算符。
开发平台:
所使用的开发环境:Windows10、python(PyCharm)环境
项目简介:
词法分析器读入三型文法,将三型文法构建成一个起点和一个终点的NFA,然后将NFA用子集法构造成DFA,创建DFA的索引表,后续读取要扫描的代码,将代码中的每个词依次带入DFA的索引表进行状态转换,如果到达终态说明词符合文法要求,输出token列表(三元组:所在行号,类别,token 内容)如果出错会输出另一种三元组(行号, 对错判定, token内容),并将token列表写入txt文件供任务二LR(1)语法分析器来使用,同时也会将结果输出到result.txt文件来观测,默认注释掉DFA可视化过程,如果想观测状态变化需要把show函数注释取消。
main函数流程图:
相关数据结构
DFA的状态用state类来表示,由state里的notepsilon和epsilon来连接各个状态。
class state:
数据结构名 |
类型 |
介绍 |
_end |
布尔 |
表示是否为终结状态,是则为True,反之False。 |
notepsilon |
字典 |
表示路径非空的状态链接,键为路径,键值为路径所到达的状态。 |
epsilon |
列表 |
表示路径为ε的状态链接,里面保存ε可以到达的状态。 |
statenum |