ANTLR3 的意外行为
Unexpected behavior with ANTLR3
我遇到了 ANTLR3 的意外行为。这是我的语法:
grammar Onto;
****parser rules****
predicate
: VERB
;
****lexer rules****
VERB
: 'VB' WS
;
PREPOSITION
: 'TO' WS
;
WS
: (' ' | '\t' | '\r'| '\n')
;
当我解析字符串 "VB TO" 时,ANTLR3 退出而不标记错误。这是意外的,因为给定的字符串与语法中的任何规则都不匹配。
然而,当我从语法中删除 PREPOSITION 规则后重试时,ANTLR3 标记了以下错误,这是预期的结果:
line 1:3 no viable alternative at character 'T'
line 1:4 no viable alternative at character 'O'
你犯了经典错误。您的主要规则末尾没有 EOF,因此您的解析器目前也仅匹配您输入的一部分并将其视为有效。在您的情况下,它与 VERB 匹配,然后仅此而已。 PREPOSITION 与您的 "TO" 输入匹配是行为的一部分,因为此 returns 是解析器的 PREPOSIITON 标记。但是由于解析器已经对 VERB 输入感到满意,它认为解析已成功完成。
然而,如果没有 PREPOSITION 词法分析器规则,词法分析器 returns 一个错误标记,因为它无法匹配该输入。上面的错误是关于什么的。
我遇到了 ANTLR3 的意外行为。这是我的语法:
grammar Onto;
****parser rules****
predicate
: VERB
;
****lexer rules****
VERB
: 'VB' WS
;
PREPOSITION
: 'TO' WS
;
WS
: (' ' | '\t' | '\r'| '\n')
;
当我解析字符串 "VB TO" 时,ANTLR3 退出而不标记错误。这是意外的,因为给定的字符串与语法中的任何规则都不匹配。
然而,当我从语法中删除 PREPOSITION 规则后重试时,ANTLR3 标记了以下错误,这是预期的结果:
line 1:3 no viable alternative at character 'T'
line 1:4 no viable alternative at character 'O'
你犯了经典错误。您的主要规则末尾没有 EOF,因此您的解析器目前也仅匹配您输入的一部分并将其视为有效。在您的情况下,它与 VERB 匹配,然后仅此而已。 PREPOSITION 与您的 "TO" 输入匹配是行为的一部分,因为此 returns 是解析器的 PREPOSIITON 标记。但是由于解析器已经对 VERB 输入感到满意,它认为解析已成功完成。
然而,如果没有 PREPOSITION 词法分析器规则,词法分析器 returns 一个错误标记,因为它无法匹配该输入。上面的错误是关于什么的。