私は、命令リストコードを使用するインタープリタを作成しています。私は、ラベル付きの文法を書くときにいくつか問題があります。ANTLR文法 - ラベルと命令の構文解析
私はこのコードブロックパーサしたいと思います:あなたはこれらのラベルは指示せずに、単一の行にありますが、パーサの言語I'haveがで「ラベル+命令」を可能に見ることができるように
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
をライン。だから、命令とラベルの組み合わせの3貴様の種類があります。
- 命令
- レーベル:
- レーベル:命令
は、私は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に慣れていませんが、 "instruction:(ID ':')?ID_INST operand;"を行う方がきれいだったと思います。 –
@ 500-InternalServerError、残念ながらANTLRでは動作しません:)。 LLパーサでは、左端にオプションのルールを持たないことをお勧めします。 –
おっと!なぜ?しかたがない。 –