【发布时间】:2010-10-02 01:24:09
【问题描述】:
给定一个正则表达式,我正在寻找一个包,它将为实现 RE 的有限状态机动态生成代码。
首选 C/C++ 和 Python,但也对其他语言感兴趣。
【问题讨论】:
-
我也想要这样的设备。特别是对于 Python。
给定一个正则表达式,我正在寻找一个包,它将为实现 RE 的有限状态机动态生成代码。
首选 C/C++ 和 Python,但也对其他语言感兴趣。
【问题讨论】:
re2c 生成 C 代码。我不确定你所说的“动态”是什么意思——如果你想在生成它的同一运行期间调用生成的代码,你必须编译和动态加载输出。
【讨论】:
【讨论】:
它可能不是您正在寻找的东西,但 Xerox 有限状态传感器支持正则表达式、构建机器,甚至可以使用 GraphViz 创建图形表示。
它对于形态学之类的东西真的很漂亮,但除此之外,我建议主要是如果你正在寻找一些东西来探索有限状态机的理论方面。
两个注意事项:它使用自己的语法,因此不一定能轻松翻译成您选择的语言,而且我很确定您必须获得它的许可证。它附带 Karttunnen 和 Beesley 的《有限状态形态学》一书,这本书本身就非常有趣。
【讨论】:
Finite State Automata Utilities 支持从正则表达式生成 FSM。它还支持 FSM 的 C、C++ 和 Java 代码生成。 它支持动态生成,但它是用 Prolog 编写的,从另一种语言调用可能会很麻烦。
【讨论】:
您需要的是词法分析器...对于过多的编程语言,它们中的很多。首先你可以看看here。
【讨论】:
从正则表达式到有限状态机的转换器的良好 Python 实现是 https://github.com/ferno/greenery。它可以通过 'pip install greenery' 在 pypi 上获得。
另一个 python 包使用 greenery 来实现迭代解析器:通信协议 Python Parser 和 Originator https://github.com/pjkundert/cpppo。它也可以通过“pip install cpppo”获得。不幸的是,Cpppo 相当复杂,这在很大程度上是因为试图在同一源代码中同时支持 Python 2 和 3,包括完全兼容 UTF-8。
无论如何,cpppo 应该让您了解如何将出色的 greenery Regex 应用于 FSM 转换器。
【讨论】: