首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ANTLR语法中,语法分析器和词法规则的调用顺序是什么?

在ANTLR语法中,语法分析器和词法规则的调用顺序是什么?
EN

Stack Overflow用户
提问于 2021-09-13 15:58:46
回答 1查看 239关注 0票数 0

在ANTLR语法中,对解析器和词法规则的调用顺序是什么?例如,在下面的语法中,

223

总是被识别为APLHANUMERIC而不是数字。

代码语言:javascript
复制
digit  : F_DIGIT+;
alpha  : APLHANUMERIC;
APLHANUMERIC   : (LOWERCASE | UPPERCASE | F_DIGIT | '_')+ ;
fragment LOWERCASE  : [a-z] ;
fragment UPPERCASE  : [A-Z] ;
fragment F_DIGIT   : [0-9] ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 19:07:55

以下是对以下评论的一点阐述:

Tokenizer (AKA )将始终处理输入流,生成一个令牌流,以便解析器规则在识别源结构时使用。

唯一的“调用顺序”是托卡器在解析器之前运行(显然是必要的,因为解析器对解析器产生的令牌起作用)。

对于lexer规则,所有规则都在逻辑上应用于输入流。如果您有多个能够与输入中的下一个字符匹配的Lexer规则,则将使用两个规则。

1-如果一个Lexer规则匹配一组较长的字符,那么它将用于生成令牌。

2-如果多条规则匹配输入流中相同数量的字符,那么第一个出现在语法中的规则将“获胜”。

fragments不是词汇规则。它们只是一种方便,您可以利用它们来编写词法规则,以避免重复和帮助可读性。

在解析器中,选择起始规则,然后解析器处理该规则的内容(递归地调用构成该规则的规则及其子规则,等等)。唯一涉及的“顺序”是ANTLR将按顺序对规则中的顶级备选方案进行评估,这可以用于处理诸如算术表达式中适当的运算符优先级等问题。

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

https://stackoverflow.com/questions/69165802

复制
相关文章

相似问题

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