我有以下语法,我想了解为什么输入“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");
}
}