簡體   English   中英

如何使該語法LL(1)?

[英]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

由於FF'EE'相同,所以我們可以刪除此乘積,因此我們就剩下了。

E -> wT'+E' | z
E' -> Ex | x
T -> wT'
T' -> *T'' | ε
T'' -> EyT' | yT'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM