次の文法がありますが、入力「a」が一致しない理由を理解したいと思います。parser_a を削除すると、入力が受け入れられます。また、レクサー ルール A の 'b' を削除しても機能します
。動作を説明していただければ幸いです。
grammar SmallTest;
options {
language = Java;
}
@header {
package test;
}
@lexer::header {
package test;
}
start
: A EOF;
parser_a
: 'a' ;
A
: 'a' | 'b' ;
これが私のJavaコードです。また、文法をテストするために使用したコードを投稿すると役に立ちますか??
package test;
public class SmallTest {
public static void main(String[] args) throws RecognitionException {
CharStream stream = new ANTLRStringStream("a");
SmallTestLexer lexer = new SmallTestLexer(stream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
SmallTestParser parser = new SmallTestParser(tokenStream);
parser.start();
System.out.println("done");
}
}