在实现lex时将多个正则表达式转换为DFA

时间:2011-12-05 14:23:35

标签: compiler-construction lex

我正在学习编写词法分析器生成器(lex的克隆),基于正则表达式到“龙书”中描述的DFA直接翻译算法。

现在我可以成功地将正则表达式转换为DFA,但是当有多个规则时我就卡住了,例如:

abc { printf("abc"); }
a* { printf("a*); }

我可以将abca*转换为两个DFA图表,但是如何将这两个DFA图表合并为一个?

1 个答案:

答案 0 :(得分:2)

几年前我实际上做过这个练习 - 我使用本书作为指南,用c ++构建了一个集成词法分析器和LALR解析器。这本书实际上告诉你如何将正则表达式直接转换为NFA,然后使用算法将NFA转换为DFA,我现在还不记得名字。要支持多个规则,您只需为每个规则创建一个NFA。然后,您创建一个新的开始状态,并从开始状态创建epsilon转换,为每个规则创建的每个NFA的开始状态。至少,这就是我在不查看代码的情况下记得的内容。