[英]Reducing grammar to LL1
我有以下語法:
A-> AB|CA
B-> Bd | ef
C-> e|f
我按如下所示刪除了左遞歸,語法如下:
A->CAA'
A'-> BA'
A'-> epsilon
B-> efB'
B'->dB'
B'-> epsilon
C->e
C->f
為此,我遇到的問題是為此構造解析表時存在歧義。 有人可以為此指出正確的方向嗎? 或者,我認為我在計算“解析表”的“第一和第二”集時出錯。
編輯
Woops。 原始語法不會派生任何終端字符串,因此嘗試使其為LL(1)是沒有意義的。 第一次生產總是產生其中帶有A
的形式,並且沒有其他衍生自A
您是否跳過了某些內容或帖子中有錯字?
等待修復:
您的左遞歸移除效果很好。 現在,您需要每個產品的預測集:
A->CAA' first(CAA') = { e, f }
A'-> BA' first(BA') = { e }
A'-> epsilon follow(A') = follow(A) = { end of input }
B-> efB' first(efB') = { e }
B'->dB' first(dB') = { d }
B'-> epsilon follow(B') = { end of input }
C->e first(e) = { e }
C->f first(f) = { f }
這里沒有歧義,因為對應於任何給定左側的每個右側的預測集具有空的成對相交。
您看到了什么歧義?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.