首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Antlr (lexer):匹配正确的令牌

Antlr (lexer):匹配正确的令牌
EN

Stack Overflow用户
提问于 2010-10-11 21:47:18
回答 1查看 802关注 0票数 2

在我的Antlr3语法中,我有几条“重叠”的词汇规则,如下所示:

代码语言:javascript
运行
复制
NAT: ('0' .. '9')+ ;
INT: ('+' | '-')? ('0' .. '9')+ ;
BITVECTOR: ('0' | '1')* ;

虽然像100110123这样的令牌可以被多个规则匹配,但是它总是由上下文来决定它必须是哪一个。示例:

代码语言:javascript
运行
复制
s: a | b | c ;
a: '<' NAT '>' ;
b: '{' INT '}' ;
c: '[' BITVECTOR ']' ;

然后输入的{17}应该匹配{INT},但是莱克星已经决定17E 215是NAT令牌。我怎样才能防止这种行为?回溯选项已经设置为true,但它似乎只影响解析器规则。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-11 22:07:58

可能有一种复杂的方法可以使lexer上下文敏感,但一般来说,这正是您希望解析器处理的,并且希望您的lexer只提供一个令牌流。我的建议是重构您的词汇,以返回DIGITSSIGN,并让解析器计算出由上下文表示的数字的类型。

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

https://stackoverflow.com/questions/3910197

复制
相关文章

相似问题

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