簡體   English   中英

將給定的有歧義的算術表達式語法轉換為無歧義的 LL(1)

[英]Converting given ambiguous arithmetic expression grammar to unambiguous LL(1)

在這個學期,我有關於編譯器的課程,我們目前正在學習語法 - 不同的語法和類型的解析器。 我遇到了一個我無法完全弄清楚的問題,或者至少我無法確保我做對了。 我已經做了2次嘗試並找到了反例。 我得到了這個算術表達式的歧義語法:E → E+E | EE | E*E | 電/電 | E^E | -E | (E)| 身份證 | num ,其中 ^ 代表權力。

我想出了優先事項應該是什么。 最高優先級是括號,其次是冪,然后是一元減號,然后是乘法和除法,然后是加法和減法。 我被要求將其轉換為等效的 LL(1) 語法 所以我寫了這個:

  • E → E+A | EA | 一種
  • A → A*B | A/B |
  • B → -C | C
  • C → D^C | D
  • D → (E) | 身份證 | 數量

盡管它沒有歧義,但這似乎不是與第一個語法等效的問題。 例如:給定的語法可以識別輸入:--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.

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