如何解决如何将正则表达式转换为CFG?
如何将正则表达式(ab*)*b
转换为上下文无关的语法?
当我查找示例时,我在表达式中总是看到加号,但是我没有。那只是一种不同的书写方式吗?
解决方法
您可以递归应用以下规则,每个规则都将单个正则表达式运算符更改为非终结符。 (为每个运算符使用不同的非终结符名称。)以下,R
和S
是正则表达式运算符的操作数的转换。 N
是该运算符转换成的非终结符。终端只是通过不变地传递。
-
串联:
R S ⇒ N → R
-
替代:
R | S ⇒ N → R N → S
-
Kleene星:
R* ⇒ N → ε N → N R
-
Kleene plus:
R+ ⇒ N → R N → N R
-
可选:
R? ⇒ N → ε N → R
例如,
Regex Transform Productions
(a b* )*b 3. b* ⇒ N1 N1 → ε
N1 → N1 b
( aN1 )*b 1. aN1 ⇒ N2 N2 → a N1N2* b 3. N2* ⇒ N3 N3 → ε
N3 → N3 N2N3b 1. N3b ⇒ N4 N4 → N3 b
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。