首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么令牌规则(在ANTLR中)“IDENT : LETTER (LETTER | DIGIT)*;”不能识别"x y z"?

为什么令牌规则(在ANTLR中)“IDENT : LETTER (LETTER | DIGIT)*;”不能识别"x y z"?
EN

Stack Overflow用户
提问于 2011-11-15 04:22:23
回答 2查看 1.8K关注 0票数 2

假设我有一段ANTLR语法(词法分析器部分)

代码语言:javascript
复制
fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9';
INTEGER : DIGIT+ ;
Ident : LETTER (LETTER | DIGIT)*;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};

我在想,既然WS吃掉了token之间的所有空格,那么"x,y,z“和"xyz”应该被识别为相同的标识。但显然只有"x y z“会被认为是3个身份。因此,我真的对lexer规则遇到空白时的行为感到困惑。

更具体地说,我有一条规则

代码语言:javascript
复制
VARIABLE: ('A'..'Z')+ DIGIT*  ;

我希望它能够识别变量标识,如X3、Y4、XX55等。但令人惊讶的是,该规则识别“X、Y”,因此这似乎完全无法理解。你的想法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-15 04:46:45

尽管您已经将WS放在HIDDEN通道上,但"x y z"是三个Ident标记,因为WS标记只在解析器规则中被丢弃,而不是在词法分析器规则中。

更具体地说,我有一个规则

变量:('A'..'Z')+ DIGIT*;

我希望它能够识别变量标识,如X3、Y4、XX55等。但令人惊讶的是,该规则识别“X、Y”,因此这似乎完全无法理解。你的想法是什么?

不,规则VARIABLE" X Y"不匹配(包括空格):您一定是做错了什么。

票数 1
EN

Stack Overflow用户

发布于 2011-11-15 04:39:34

Ident : LETTER (LETTER | DIGIT)*;指的是一个字母后面跟着零个或多个字母或数字。没有空格!

这就是为什么"x,y,z“被认为是3个同一性的原因。

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

https://stackoverflow.com/questions/8127576

复制
相关文章

相似问题

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