【发布时间】:2013-07-02 05:02:11
【问题描述】:
我正在尝试进行基本的基于 ANTLR 的扫描。我有一个词法分析器不匹配所需标记的问题。
lexer grammar DefaultLexer;
ALPHANUM : (LETTER | DIGIT)+;
ACRONYM : LETTER '.' (LETTER '.')+;
HOST : ALPHANUM (('.' | '-') ALPHANUM)+;
fragment
LETTER : UNICODE_CLASS_LL | UNICODE_CLASS_LM | UNICODE_CLASS_LO | UNICODE_CLASS_LT | UNICODE_CLASS_LU;
fragment
DIGIT : UNICODE_CLASS_ND | UNICODE_CLASS_NL;
对于上述语法,作为输入给出的hello. world 字符串只会产生world。而我希望得到hello 和world。我错过了什么?谢谢。
添加:
好的,我了解到输入 hello. world 使用规则 HOST 匹配的字符多于 ALPHANUM,因此词法分析器将选择使用它。然后,当它无法将输入匹配到 HOST 规则时,它不会“回溯”到 ,因为词法分析器就是这样工作的。
我该如何解决?
【问题讨论】: