我是ANTLR的新手,并试图在ANTLRWorks1.4.3中使用语法。ANTLR试图在较长的标记内匹配令牌
command
: 'go' SPACE+ 'to' SPACE+ destination
;
destination
: (UPPER | LOWER) (UPPER | LOWER | DIGIT)*
;
SPACE
: ' '
;
UPPER
: 'A'..'Z'
;
LOWER
: 'a'..'z'
;
DIGIT
: '0'..'9'
;
这似乎工作正常,除非'目标'包含前两个关键字'去'和'到'的字符。 举例来说,如果我给下面的命令:
go to Glasgo
如下节点树显示:
我期待它来搭配填字作为目的地。
我甚至尝试过更改关键字,例如'travel'而不是'go'。在这种情况下,如果目的地有'tr',ANTLR就会抱怨。
任何想法为什么发生这种情况?以及如何解决这个问题?
在此先感谢。
非常感谢。现在更清楚了。 **如果一条规则仅由词法(由词法分析器产生)组成,那么将其作为词法分析规则。**这是否正确? – 2012-08-10 17:32:18
@Atul,不,不一定(如果情况如此,那么就不会有任何解析规则)。例如,你的'command'也只是由标记组成,但是它应该保持一个解析器规则。把词法规则看作是你的语言的原子。 “目的地”只是一个单一的名称,因此应该是一个词法分析规则。但是,“命令”由多个其他(词法分析器)规则组成,并且应该是解析器规则。 – 2012-08-10 17:36:01
好吧,明白了!再次感谢。 – 2012-08-10 17:41:25