给定一个正则表达式,我正在寻找一个包,它将为实现 RE 的有限状态机动态生成代码。
首选 C/C++ 和 Python,但其他语言也很有趣。
re2c生成 C 代码。我不确定你所说的“动态”是什么意思——如果你想在生成它的同一运行期间调用生成的代码,你必须编译和动态加载输出。
它可能不是您正在寻找的东西,但 Xerox 有限状态传感器支持正则表达式、构建机器,甚至可以使用 GraphViz 创建图形表示。
对于形态学之类的东西真的很漂亮,但除此之外,我建议主要是如果你正在寻找一些东西来探索有限状态机的理论方面。
两个警告:它使用自己的语法,因此不一定能轻松翻译成您选择的语言,而且我很确定您必须获得它的许可证。它附带了 Karttunnen 和 Beesley 的书“有限状态形态学”,这本书本身就非常有趣。
有限状态自动机实用程序支持从正则表达式生成 FSM。它还支持 FSM 的 C、C++ 和 Java 代码生成。它支持动态生成,但它是用 Prolog 编写的,从另一种语言调用可能会很麻烦。
你要的是一个词法分析器......有很多它们可以用于过多的编程语言。首先,您可以在这里查看。
从正则表达式到有限状态机的转换器的一个好的 Python 实现是 https://github.com/ferno/greenery。它可以通过 'pip install greenery' 在 pypi 上获得。
Another python package uses greenery to implement iterative parsers: Communications Protocol Python Parser and Originator https://github.com/pjkundert/cpppo. It is also available via 'pip install cpppo'. Cpppo is unfortunately quite complex, in no small part due to an attempt to support both Python 2 and 3 in the same source, including full UTF-8 compatibility.
Anyway, cpppo should give you an idea of how to apply the excellent greenery Regex to FSM converter.