[英]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.