繁体   English   中英

有没有比这更好的写右递归语法的生产规则的方法了?

[英]Is there a better way to write a right-recursive grammar's production rules than this?

场景:给出一个右递归语法的生产规则,该规则描述由字符R和N构成的所有非空字符串的集合,其中可能包含R的任意多个连续重复,但恰好包含N的两个或三个重复。

回答:

A-> NB | R + A

B-> ND | NC |

C-> ND |

D-> R + D |

不正确:

A -> NNB | NNNB | RA | R
B -> R | RA | ε

编辑:以上说法不正确,我误解了情况。

正确:

S -> RS | A
A -> NA | NB
B -> RB | RC
C -> NC | ND
D -> RD | RE | ε
E -> NE | NF
F -> RF | ε

工作原理:它以S开头,可以生成0或多个R,也可以移动到A,从而生成第一组Ns。 然后,它移动到B,在第一组和第二组Ns之间生成Rs。 然后它将移至C,生成第二组Ns。 然后,它移动到D,可以生成0个或多个Rs,然后结束或移动到E,它生成Ns的第三组。 最后,它移到F,产生0或多个Rs。

这同样有效,也更简单:

S -> RS | A
A -> NA | NB
B -> RB | RC
C -> NC | ND
D -> RD | E
E -> NE | F
F -> RF | ε

直到D为止都是一样的,不是提供ε选项,而是提供添加另一组R或转到E即另一组N的选项,但是如果以前没有R,则不会发生这种情况。已作为C的转换输出,然后提供了另一个选择以递归方式添加R或空字符串。

从输入NRNR生成的示例解析树

S
  \
   A
  / \
 N   B
    / \
   R   C
      / \
     N   D
        / \
       R   D
            \
             E
              \
               F
                \
                 ε

暂无
暂无

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

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