簡體   English   中英

將語法簡化為LL1

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

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