私はちょうど何か頭痛に遭遇しました..
サンプルステートメントがあるように、ステートメントをさまざまな関数に分割しようとしています
start
n turnTo 's'.
n terminate.
end
両方のステートメントは「n」で始まります、現在私は書いています
statement
:
(turnTo_statment|terminate_statment)*
;
turnTo_statment
:
variable 'turnTo' '\'' value '\'' '.'
;
terminate_statment
:
variable 'terminate' '.'
;
ただし、レクサーが実行されている場合、両方のサブステートメントが同じもの'n'で始まるため、どちらがどちらであるかを判別できません。コンパイラーは、ルールを使用する別の選択肢があります。次の文字列がコンパイラが使用する最初のルールと一致しない場合、一致しないエラーが自動的にスローされます。
'x turnTo y'に出会った場合、ANTLRを識別して伝えるにはどうすればよいですか?'x turnTo y'に出会った場合、ルールturnTo_statmentを使用します。次に、ルールterminate_statmentを使用します。
つまり、antlrにこれを行う関数はありますか。
statement
:
((if statement contain_keywords 'turnTO') -> turnTo_statment
|
(if statement contain_keywords 'terminate') ->terminate_statment)*
;
ありがとう..