Python 将简化正则表达式转换为语法树
我正在研究将正则表达式转换为DFA的算法的实现。第一步涉及将输入正则表达式转换为语法树。例如,ab(a | b)abc将转换为下面的树Python 将简化正则表达式转换为语法树,python,regex,Python,Regex,我正在研究将正则表达式转换为DFA的算法的实现。第一步涉及将输入正则表达式转换为语法树。例如,ab(a | b)abc将转换为下面的树 . / \ . c / \ . b / \ . a / \ / \ / \ . | / \ / \ * *
.
/ \
. c
/ \
. b
/ \
. a
/ \
/ \
/ \
. |
/ \ / \
* * a b
/ \
a b
此外,我正在处理的正则表达式相当简单,唯一的特殊字符是“\”(转义字符)、“|”(或运算符)、“(”)(包围组的括号)和“*”(kleene星形)。现在我遇到的问题是,我对如何(在Python中)从输入生成(作为数据结构)这棵树感到困惑。我知道如何手动操作,但通过一段代码进行操作导致我陷入了困境
为了进一步扩展这个问题,我是从左到右还是从右到左解析表达式更好?递归是必要的吗?假设我正在使用treelib创建树,我该如何着手解决这个问题。与其说我要的是代码,不如说是我应该从哪里开始的解释或伪代码片段。我应该自己做这件事,还是有一个图书馆可以让这件事变得更容易?任何有助于加深我对如何执行此操作的理解的答案都将不胜感激。有几种Python可用的词法分析和解析工具,例如(它基本上是
lex
和yacc
的Python实现)
使用这些工具中的一个,而不是编写自己的工具。有几种Python可用的词法分析和解析工具,例如(这基本上是
lex
和yacc
的Python实现)
使用其中的一个,而不是自己写。查看。它可以用于将算术表达式转换为语法树。只需做一些更改,就可以对正则表达式执行相同的操作。签出。它可以用于将算术表达式转换为语法树。只要稍作修改,它就可以用于正则表达式。如果方括号可以嵌套,那么它就不再简单如果方括号可以嵌套,那么它就不再简单了