首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTRL4语法分析规则

ANTRL4语法分析规则
EN

Stack Overflow用户
提问于 2022-06-14 12:04:11
回答 1查看 40关注 0票数 0

最近,我学习了ANTRL4,但我不明白为什么“.”是否匹配ID词法规则?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 13:28:35

因为当您在语法中添加文字标记(如'...' )时,此'...'令牌将转换为真正的lexer规则。

例如,如果语法如下所示:

代码语言:javascript
复制
grammar T;

parse : '...';
ID    : '.'+;

ANTLR将将其视为下列语法:

代码语言:javascript
复制
grammar T;

parse : T__1;
T__1  : '...';
ID    : '.'+;

正因为如此,像"..."这样的输入总是被标记为T__1令牌,而不是ID令牌。

ANTLR的lexer遵循两个简单的规则:

如果2(或更多)规则匹配相同的字符,则

  1. 试图匹配消耗最多字符
  2. 的规则,让规则首先定义为"win"

这就是为什么"..."成为T__1令牌(规则2适用),输入(如"...." )成为ID令牌(规则1适用)的原因。

我完全同意迈克的评论:

附加说明:由于这一问题和类似的问题,强烈建议只使用显式的词法规则,而不是解析器语法中的'...'那样的隐式规则。

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

https://stackoverflow.com/questions/72616663

复制
相关文章

相似问题

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