簡體   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