首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ANTLR3的意外行为

使用ANTLR3的意外行为
EN

Stack Overflow用户
提问于 2016-08-27 20:28:43
回答 1查看 33关注 0票数 0

在ANTLR3中,我遇到了一种意想不到的行为。这是我的语法:

代码语言:javascript
复制
grammar Onto;

****parser rules****

predicate   
    : VERB
    ;

****lexer rules****

VERB    
    : 'VB'  WS
    ;

PREPOSITION
    : 'TO' WS
    ;

WS
    : (' ' | '\t' | '\r'| '\n')
    ;

当我解析字符串"VB TO“时,ANTLR3就会退出,而不会出现错误。这是意外的,因为给定的字符串不匹配语法中的任何规则。

但是,在从语法中删除介词规则后,当我重试相同的规则时,ANTLR3标记以下错误,这是预期的结果:

代码语言:javascript
复制
line 1:3 no viable alternative at character 'T'
line 1:4 no viable alternative at character 'O'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-28 08:58:10

你犯了一个典型的错误。您的主要规则在末尾没有EOF,因此您的解析器目前也只匹配输入的一部分,并认为这是有效的。在您的例子中,它与动词匹配,然后就不再期望任何东西了。该介词与您的" to“输入匹配是行为的一部分,因为它将PREPOSIITON令牌返回给解析器。但是,由于解析器已经满意于动词输入,所以它认为解析已经成功完成。

但是,如果没有介词lexer规则,则lexer将返回一个错误标记,因为它无法匹配该输入。这就是上面的错误所在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39185468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档