繁体   English   中英

从给定的正则表达式创建语法树(对于RE到DFA)

[英]Create Syntax tree from given Regular Expressions (For RE to DFA)

我正在学习自动机理论并面临将RE直接转换为DFA的一些困难。 此方法需要从RE创建语法树。 但我无法生成。
给我一个正则表达式, 例如 a*b*(a|b)abc

现在我想从中生成一个语法树。 我不想要它的程序,但我想手动完成它。 谁能帮我?

您需要弄清楚此表达式表示的操作是什么,它们应用的顺序以及它们的操作数。

比如a*表示:“应用*运营商a ”。 在表达式树中,您将获得星型运算符a节点,以及操作符所依据的符号的节点。

同样, | 表示交替,因此它将是树中的节点,并且子节点将是交替的子表达。

顶级操作只是一个连接,它将是您的根节点。

以下是从这些规则派生的完整AST:

a*b*(a|b)abc

--+ CONCAT
  |
  +-+ STAR
  | |
  | +-- a
  |
  +-+ STAR
  | |
  | +-- b
  |
  +-+ OR
  | |
  | +-- a
  | |
  | +-- b
  |
  +-- a
  |
  +-- b
  |
  +-- c

编辑:你要求一个二叉树,转换应该是直截了当的。 我会留下两棵树让你弄清楚:

              .
             / \
            .   c
           / \
          .   b
         / \
        .   a
       / \
      /   \
     /     \
    .       |
   / \     / \
  *   *   a   b
 /     \
a       b

请注意,上面的树使用左关联连接运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM