给定一个正则表达式,我正在寻找一个包,它将动态生成实现RE的有限状态机的代码。
C / C ++和Python首选,但其他语言也很受欢迎。
答案 0 :(得分:3)
re2c生成C代码。我不确定'动态'是什么意思 - 如果你想在生成代码的同一次运行期间调用生成的代码,你必须编译并动态加载输出。
答案 1 :(得分:3)
答案 2 :(得分:1)
它可能不是您正在寻找的,但Xerox有限状态传感器支持正则表达式,构建机器,甚至可以使用GraphViz创建图形表示。
对于像形态学这样的东西来说真的很漂亮,但除此之外,我建议它主要是因为你正在寻找一些东西来探索有限状态机的理论方面。
两个警告:它使用自己的语法,因此它不一定会轻易转换为您选择的语言,而且我很确定您必须获得它的许可。它附有Karttunnen和Beesley的书“有限状态形态学”,这本身就是一本非常有趣的读物。
答案 3 :(得分:1)
Finite State Automata Utilities支持从正则表达式生成FSM。它还支持FSM的C,C ++和Java代码生成。 它支持动态生成,但它是用Prolog编写的,用另一种语言调用可能很麻烦。
答案 4 :(得分:0)
你所要求的是一个词法分析器...它们有很多用于过多的编程语言。首先,您可以查看here。
答案 5 :(得分:0)
从正则表达式到有限状态机的转换器的良好Python实现是https://github.com/ferno/greenery。它可以通过'pip install greenery'在pypi上获得。
另一个python包使用greenery来实现迭代解析器:Communications Protocol Python Parser和Originator https://github.com/pjkundert/cpppo。它也可以通过'pip install cpppo'获得。不幸的是,Cpppo相当复杂,这在很大程度上是由于尝试在同一来源支持Python 2和3,包括完全兼容UTF-8。
无论如何,cpppo应该让您了解如何将优秀的绿色Regex应用于FSM转换器。