在ANTLR3中,我遇到了一种意想不到的行为。这是我的语法:
grammar Onto;
****parser rules****
predicate
: VERB
;
****lexer rules****
VERB
: 'VB' WS
;
PREPOSITION
: 'TO' WS
;
WS
: (' ' | '\t' | '\r'| '\n')
;当我解析字符串"VB TO“时,ANTLR3就会退出,而不会出现错误。这是意外的,因为给定的字符串不匹配语法中的任何规则。
但是,在从语法中删除介词规则后,当我重试相同的规则时,ANTLR3标记以下错误,这是预期的结果:
line 1:3 no viable alternative at character 'T'
line 1:4 no viable alternative at character 'O'发布于 2016-08-28 08:58:10
你犯了一个典型的错误。您的主要规则在末尾没有EOF,因此您的解析器目前也只匹配输入的一部分,并认为这是有效的。在您的例子中,它与动词匹配,然后就不再期望任何东西了。该介词与您的" to“输入匹配是行为的一部分,因为它将PREPOSIITON令牌返回给解析器。但是,由于解析器已经满意于动词输入,所以它认为解析已经成功完成。
但是,如果没有介词lexer规则,则lexer将返回一个错误标记,因为它无法匹配该输入。这就是上面的错误所在。
https://stackoverflow.com/questions/39185468
复制相似问题