這是不完全作業,但它關係到我的學業:轉換語法爲LL(1)語法:一些問題
A爲例語法是這樣的:
ë - > E + E | E * E | -E |(E)| ID
去除歧義成爲後
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
(從最低優先級運營商開始)
和卸下左遞歸和左保(不需要在這種情況下)最終LL1語法後:
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
這給出了一個錯誤免費解析器表工作正常。 現在關於我面臨的問題,假設它的語法是這樣的:
ë - > E + E | E * E | ID = E |(E)| ID現在
我我無法生成沒有衝突的解析表,這意味着我的最終語法不是LL1。以下是具體步驟:
去除歧義後:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
和卸下左遞歸和左保理後,語法變爲:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
但在解析器表中衝突我無法刪除,這意味着我已經錯過了一些步驟,或者在我無法找到的步驟中存在一些錯誤。請告訴我我做錯了什麼,以及如何解決這個問題。我一直在研究這個問題很長一段時間了。
Unary Minus運算符優先級不是最低,它始終在其他二進制運算符上最高 – ammar26 2012-04-04 19:27:38