2
我正在寫一個使用指令列表代碼的解釋器。當我嘗試使用標籤編寫指令的語法時,我遇到了一些問題。ANTLR語法 - 解析標籤和指令
我想這個解析器代碼塊:
LD 4
ST A
LD A
EQ 4
ST _AUX_1
(* IF *)
LDN _AUX_1
JMPC _label_2
(* THEN *)
LD B
EQ 3
ST _AUX_2
_label_2: (* ELSE *)
_label_1: (* END IF*)
LD TRUE
正如你可以看到這些標籤是在沒有指令的單行線,但語言I'have到解析器允許「標籤+指令」中一條線。因此,有三種型動物種指令和標籤的組合:
- 指令:
- 標籤:指令
我可以分析1和2,但我不能夠解析所有不同的組合。
這是我的ANTLR語法的摘錄:
program_il : instruction* ;
instruction
: ID':' // label
| ID_INST operand
;
operando
: ID
| CTE_INT
| CTE_BOOL
;
我試圖語法更改爲:
instruction : (ID':')? instruction? ;
但我有一個錯誤:
As a result, alternative(s) 2 were disabled for that input
[14:43:49] error(201): Analizador.g:131:29: The following alternatives can never be matched: 2
有人可以幫我解決這個問題嗎? 預先感謝您。
+1,但,儘管我對ANTLR不熟悉,但我認爲執行「指令:(ID':')?ID_INST操作數;」會更清晰。 – 2012-02-13 19:45:38
@ 500-InternalServerError,唉,這不適用於ANTLR :)。對於LL解析器來說,在最左側不*有*可選規則是一個好主意。 – 2012-02-13 19:50:31
哎唷! - 人們想知道爲什麼不。好吧。 – 2012-02-13 19:51:40