对于我尝试解析的标记语言,我决定尝试使用 ANTLR 生成解析器。我是这个领域的新手,我正在搞砸一些事情。
我的语法是
grammar Test;
DIGIT : ('0'..'9');
LETTER : ('A'..'Z');
SLASH : '/';
restriction
: ('E' ap)
| ('L' ap)
| 'N';
ap : LETTER LETTER LETTER;
car : LETTER LETTER;
fnum : DIGIT DIGIT DIGIT DIGIT? LETTER?;
flt : car fnum?;
message : 'A' (SLASH flt)? (SLASH restriction)?;
当我给它一个 input string 时,这正是我想要的A/KK543/EPOS
。但是,当我给它A/KL543/EPOS
时,它失败了(MismatchedTokenException(9!=5)
)。这似乎是某种冲突;它想restriction
在第一个 L 上生成,所以似乎我在语言定义中做错了什么,但我无法正确找出是什么。