[英]Converting given ambiguous arithmetic expression grammar to unambiguous LL(1)
在這個學期,我有關於編譯器的課程,我們目前正在學習語法 - 不同的語法和類型的解析器。 我遇到了一個我無法完全弄清楚的問題,或者至少我無法確保我做對了。 我已經做了2次嘗試並找到了反例。 我得到了這個算術表達式的歧義語法:E → E+E | EE | E*E | 電/電 | E^E | -E | (E)| 身份證 | num ,其中 ^ 代表權力。
我想出了優先事項應該是什么。 最高優先級是括號,其次是冪,然后是一元減號,然后是乘法和除法,然后是加法和減法。 我被要求將其轉換為等效的 LL(1) 語法。 所以我寫了這個:
盡管它沒有歧義,但這似乎不是與第一個語法等效的問題。 例如:給定的語法可以識別輸入:--5而我的語法不行。 我怎樣才能確保我涵蓋了所有情況? 我應該如何修改我的語法以與給定的語法等效? 提前致謝。
編輯:另外,我當然會消除左遞歸和左因子分解來制作這個 LL(1),但首先我需要弄清楚我上面問的這個主要部分。
這是一個應該適用於您的情況
E = E+A | E-A | A
A = A*C | A/C | C
C = C^B | B
B = -B | D
D = (E) | id | num
作為旁注:還要注意您的任務的要求,因為某些應用程序可能會為一元減運算符分配更高的優先級,而不是冪二元運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.