【发布时间】:2012-12-03 08:38:15
【问题描述】:
以下极其简单的示例语法并没有达到我的预期(完全)。
Declaration : 'VAR';
Letter: ('A'..'Z');
message : Declaration Letter+;
我所期望的结果是,任何字母序列都将作为单个字母进行词法分析,而“VAR”序列将作为单个标记进行词法分析。
当我查看 ANTLRWorks interperter 时,我看到以下结果:
-
VARA解析为message -> "VAR", "A"(预期) -
VARVA不解析 (MismatchedTokenException(-1 != 5)。词法分析器命中第二个VA并尝试标记Declaration。预期:message -> "VAR", "V", "A" -
VARVPP解析为message -> "VAR", "V", "P", "P"(预期) -
VARVALL解析为message -> "VAR", "VALL"。
我需要一些帮助来理解这种行为,以及如何解决这个问题的建议。
具体来说:
- 为什么词法分析器会尝试将所有以
VA开头的字符串标记为声明,如果它后跟一个字母? - 为什么词法分析器不尝试对所有以
V开头的字符串执行此操作? - 如果那里有额外的字符,为什么词法分析器不尝试这样做?
- 我应该如何更改此语法以按预期方式解析?
【问题讨论】: