微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将正则表达式转换为CFG?

如何解决如何将正则表达式转换为CFG?

如何将正则表达式(ab*)*b转换为上下文无关的语法?

当我查找示例时,我在表达式中总是看到加号,但是我没有。那只是一种不同的书写方式吗?

解决方法

您可以递归应用以下规则,每个规则都将单个正则表达式运算符更改为非终结符。 (为每个运算符使用不同的非终结符名称。)以下,RS是正则表达式运算符的操作数的转换。 N是该运算符转换成的非终结符。终端只是通过不变地传递。

  1. 串联:

    R S ⇒   N → R
  2. 替代:

    R | S ⇒ N → R
            N → S
  3. Kleene星:

    R* ⇒    N → ε
            N → N R
  4. Kleene plus:

    R+ ⇒    N → R
            N → N R
  5. 可选:

    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 举报,一经查实,本站将立刻删除。