我正在尝试使用 ANTLR 学习 EBNF 语法。所以我想我会将 Wikipedia EBNF 语法转换为 ANTLR 4 并使用它。然而,我在这方面度过了一段糟糕的时光。我能够将语法减少到产生问题的一步。
似乎如果我只有一个令牌引用另一个令牌,那么 ANTLR 4 就无法解析输入。
这是我的语法:
grammar Hello;
program : statement+ ;
statement : IDENTIFIER STATEMENTEND /*| LETTERS STATEMENTEND */ ;
LETTERS : [a-z]+ ;
IDENTIFIER : LETTERS ;
SEMICOLON : [;] ;
STATEMENTEND : SEMICOLON NEWLINE* | NEWLINE+ ;
fragment NEWLINE : '\r' '\n' | '\n' | '\r';
通知IDENTIFIER
仅指LETTERS
。
如果我提供此输入:
a;
然后我得到这个错误:
line 1:0 mismatched input 'a' expecting IDENTIFIER
(program a ;\n)
但是,如果我取消注释代码并提供相同的输入,我会得到合法的输出:
(program (statement a ;\n))
我不明白为什么一个有效而另一个无效。