GLex,自制Lex,RE,NFA,DFA,生成状态机代码
glex
刚学完编译原理的lexer章节,手写词法分析器之前写过了,这次学了下flex、bison的使用。
但都觉得无法利用到书上的算法。所以决定自己写一个lex,名字就叫glex了。取了我名字里一个字的首字母。
完成度
已实现 RE->NFA->DFA->CODEGEN
按匹配权重,给定一系列正则表达式,转化为NFA,NFA的各个接受状态会保留权重信息。之后NFA->DFA,权重信息会保留。生成一个巨大的switch case代码来表现状态机。结合其它现有代码,实现yylex()的功能。
待完成工作
-
DFA最小化。目前对于pl0生成的状态机有10k行switch case代码,有待改进
-
RE目前使用硬编码(#include到glex中),每次更改规则都要重新编译,有待改进。主要是从文件解析RE规则需要手动处理\n\t\r这些转义字符。
暂时工作就这样了,未来有时间会实现一下DFA最小化算法。
代码
https://github.com/Lin-Guanguo/lgg-lex
使用pl/0测试可行
版权声明:本文为lgg1111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。