次ANTLR v3の文法を考える:間違っAST選択
tokens
{
OPTION;
UNKNOWN;
}
statement : my_statement
| UNKNOWN_KEYWORD -> ^(UNKNOWN)
;
my_statement : FIRST SECOND type = THIRD? -> ^(OPTION $type?);
FIRST : 'my';
SECOND : 'keyword';
THIRD: 'best';
UNKNOWN_KEYWORD : .;
文字列「私のキーワードthis_is_garbageが」解析されたときに、それはpicked-されている必要がありながら、それはmy_statementにより、ピックアップされていることであるのはなぜUNKNOWN_KEYWORD(返されるASTは^(OPTION $ type?)ですが、^(UNKNOWN)のはずですか?
あなたのパーサールールでは 'THIRD'はオプションですので、ルールは 'my keyword'とちょうどよく似ていて、' this_is_garbage'に進むことさえしませんでした。 –
はい、それはmy_keywordと一致しませんが、AST ^(UNKNOWN)は返されません。これは、ASTを返すように文法を修正できますか? – user5793565
あなたが見ている振る舞いはまさに私がこの文法から期待しているものです:)まあ、 'UNKNOWN_KEYWORD'はどこかで定義されていると仮定します(' UNKNOWN'は1文字です)。 'my_statement'がマッチするので、' statement'の2番目のブランチは試行されません。 –