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

Computer science 如何将正则表达式转换为CFG?,computer-science,context-free-grammar,computation-theory,Computer Science,Context Free Grammar,Computation Theory,如何将正则表达式(ab*)*b转换为上下文无关语法 当我寻找例子时,我一直在表达式中看到加号,但我没有任何加号。这仅仅是一种不同的编写方式吗?您可以递归地应用以下规则,其中每个规则都将单个正则表达式运算符更改为非终结符。(为每个运算符使用不同的非终端名称。)在下面的示例中,R和S是正则表达式运算符的操作数的转换N是将此运算符转换为的非终端。终端只是简单地通过,没有改变 串联: R S ⇒ N → R 替代: R | S ⇒ N → R

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


当我寻找例子时,我一直在表达式中看到加号,但我没有任何加号。这仅仅是一种不同的编写方式吗?

您可以递归地应用以下规则,其中每个规则都将单个正则表达式运算符更改为非终结符。(为每个运算符使用不同的非终端名称。)在下面的示例中,
R
S
是正则表达式运算符的操作数的转换
N
是将此运算符转换为的非终端。终端只是简单地通过,没有改变

  • 串联:

    R S ⇒   N → R
  • 替代:

    R | S ⇒ N → R
            N → S
  • 克莱恩之星:

    R* ⇒    N → ε
            N → N R
  • 比如说,

    
    Regex               Transform          Productions
    (a b* )*b           3. b* ⇒ N1          N1 → ε
                                           N1 → N1 b
    ( aN1 )*b           1. aN1 ⇒ N2         N2 → a N1
    N2* b               3. N2* ⇒ N3         N3 → ε
                                           N3 → N3 N2
    N3b                 1. N3b ⇒ N4         N4 → N3 b
    
    
    正则变换产生式
    (a b*)*b 3。b*⇒ N1 N1→ ε
    N1→ n1b
    (aN1)*B1。aN1⇒ 氮气→ a N1
    N2*b3。N2*⇒ N3 N3→ ε
    N3→ N3 N2
    N3b 1。N3b⇒ N4 N4→ N3 b
    
    您可以递归地应用以下规则,每个规则都会将单个正则表达式运算符更改为非终结符。(为每个运算符使用不同的非终端名称。)在下面的示例中,
    R
    S
    是正则表达式运算符的操作数的转换
    N
    是将此运算符转换为的非终端。终端只是简单地通过,没有改变

  • 串联:

    R S ⇒   N → R
  • 替代:

    R | S ⇒ N → R
            N → S
  • 克莱恩之星:

    R* ⇒    N → ε
            N → N R
  • 比如说,

    
    Regex               Transform          Productions
    (a b* )*b           3. b* ⇒ N1          N1 → ε
                                           N1 → N1 b
    ( aN1 )*b           1. aN1 ⇒ N2         N2 → a N1
    N2* b               3. N2* ⇒ N3         N3 → ε
                                           N3 → N3 N2
    N3b                 1. N3b ⇒ N4         N4 → N3 b
    
    
    正则变换产生式
    (a b*)*b 3。b*⇒ N1 N1→ ε
    N1→ n1b
    (aN1)*B1。aN1⇒ 氮气→ a N1
    N2*b3。N2*⇒ N3 N3→ ε
    N3→ N3 N2
    N3b 1。N3b⇒ N4 N4→ N3 b
    
    堆栈溢出用于编程问题。我建议你去问一下这个问题,重点放在CS理论上。堆栈溢出是用来解决编程问题的。我建议你去问这个问题,而不是把重点放在CS理论上。