Python 将简化正则表达式转换为语法树

Python 将简化正则表达式转换为语法树,python,regex,Python,Regex,我正在研究将正则表达式转换为DFA的算法的实现。第一步涉及将输入正则表达式转换为语法树。例如,ab(a | b)abc将转换为下面的树 . / \ . c / \ . b / \ . a / \ / \ / \ . | / \ / \ * *

我正在研究将正则表达式转换为DFA的算法的实现。第一步涉及将输入正则表达式转换为语法树。例如,ab(a | b)abc将转换为下面的树

              .
             / \
            .   c
           / \
          .   b
         / \
        .   a
       / \
      /   \
     /     \
    .       |
   / \     / \
  *   *   a   b
 /     \
a       b
此外,我正在处理的正则表达式相当简单,唯一的特殊字符是“\”(转义字符)、“|”(或运算符)、“(”)(包围组的括号)和“*”(kleene星形)。现在我遇到的问题是,我对如何(在Python中)从输入生成(作为数据结构)这棵树感到困惑。我知道如何手动操作,但通过一段代码进行操作导致我陷入了困境


为了进一步扩展这个问题,我是从左到右还是从右到左解析表达式更好?递归是必要的吗?假设我正在使用treelib创建树,我该如何着手解决这个问题。与其说我要的是代码,不如说是我应该从哪里开始的解释或伪代码片段。我应该自己做这件事,还是有一个图书馆可以让这件事变得更容易?任何有助于加深我对如何执行此操作的理解的答案都将不胜感激。

有几种Python可用的词法分析和解析工具,例如(它基本上是
lex
yacc
的Python实现)


使用这些工具中的一个,而不是编写自己的工具。

有几种Python可用的词法分析和解析工具,例如(这基本上是
lex
yacc
的Python实现)


使用其中的一个,而不是自己写。

查看。它可以用于将算术表达式转换为语法树。只需做一些更改,就可以对正则表达式执行相同的操作。

签出。它可以用于将算术表达式转换为语法树。只要稍作修改,它就可以用于正则表达式。

如果方括号可以嵌套,那么它就不再简单如果方括号可以嵌套,那么它就不再简单了