[英]How do I make this grammar LL(1)?
可以說我有這種語法
E -> T+Ex | F
T -> T*Fy | w
F -> E | z | ε
現在我需要使其為LL(1)。 我一直在遵循這些步驟,但是我想出的解決方案似乎不太正確。 拳頭可以消除ε產生
E -> T+Ex | F | T+x
T -> T*Fy | w | T*y
F -> E | z
現在我們消除周期
E -> T+Ex | T+x | z
T -> T*Fy | w | T*y
F -> T+Ex | T+x | z
不,我們將消除立即的左遞歸
E -> T+Ex | T+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> T+Ex | T+x | z
最后,我們將替換發生T
某些RHS產品
E -> wT'+Ex | wT'+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> wT'+Ex | wT'+x | z
現在對我來說這似乎不是LL(1),因為由此生成的解析表將為多個終端包含多個條目。 我似乎缺少什么?
我想出了辦法,所以在最后一步,我們有了這個配置
E -> wT'+Ex | wT'+x | z
T -> wT'
T' -> *FyT' | *yT' | ε
F -> wT'+Ex | wT'+x | z
現在,我們需要執行左因式分解,以刪除表單的產生形式
S -> aB | aC
並將它們制成適當的形式
S -> aA
A -> B | C
使用這個我們可以將語法轉換成
E -> wT'+E' | z
E' -> Ex | x
T -> wT'
T' -> *T'' | ε
T'' -> FyT' | yT'
F -> wT'+F' | z
F' -> Ex | x
由於F
和F'
與E
和E'
相同,所以我們可以刪除此乘積,因此我們就剩下了。
E -> wT'+E' | z
E' -> Ex | x
T -> wT'
T' -> *T'' | ε
T'' -> EyT' | yT'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.