2015-07-12 113 views
0

如何刪除以下語法中的左遞歸?刪除左遞歸語法

S -> 「url」 「(「 STRING 「)」 // basic services 
| S 「?」 S // sequential execution 
| S 「|」 S // concurrent execution 
| 「timeout」 「(「 REAL 「,」 S 「)」 // timeout combinator 
| 「repeat」 「(「 S 「)」 // repetition 
| 「stall」 // nontermination 
| 「fail」 // failure 
+0

相關(重複?) - [手動刪除左遞歸算法](http://stackoverflow.com/questions/19720127/removing-left-recursion-algorithm-by-hand)。 – Dukeling

回答

0

訣竅是創建一個正確的遞歸父生產。

T -> S 
T -> S "?" T // sequential execution 
T -> S "|" T // concurrent execution 

S -> 「url」 「(「 STRING 「)」 // basic services 
| 「timeout」 「(「 REAL 「,」 S 「)」 // timeout combinator 
| 「repeat」 「(「 S 「)」 // repetition 
| 「stall」 // nontermination 
| 「fail」 // failure 

這將識別同一組輸入,但要注意T現在是正確的聯想,而不是左聯想。