gpt4 book ai didi

antlr - "Implicit token definition in parser rule"有什么值得担心的吗?

转载 作者:行者123 更新时间:2023-12-03 09:29:50 26 4
gpt4 key购买 nike

我正在用 ANTLR 和 ANTLRWorks 2 创建我的第一个语法。我基本上已经完成了语法本身(它识别用所描述的语言编写的代码并构建正确的解析树),但除此之外我还没有开始任何事情。

让我担心的是,解析器规则中每次第一次出现标记时,都会用黄色波浪线下划线表示“解析器规则中的隐式标记定义”。

例如,在此规则中,'var'有那个波浪线:

variableDeclaration: 'var' IDENTIFIER ('=' expression)?;

它的确切外观:

enter image description here

奇怪的是,ANTLR 本身似乎并不介意这些规则(在进行测试设备测试时,我在解析器生成器输出中看不到任何这些警告,只是我的机器上安装了不正确的 Java 版本),所以这只是 ANTLRWorks 的提示。

是否需要担心或我应该忽略这些警告?我应该在词法分析器规则中明确声明所有标记吗? 官方圣经中的大多数例子 The Defintive ANTLR Reference似乎完全按照我编写代码的方式完成。

最佳答案

我强烈建议在任何重要的代码中更正此警告的所有实例。

这个警告是(实际上是我)创建的,以提醒您注意以下情况:

shiftExpr : ID (('<<' | '>>') ID)?;

由于 ANTLR 4 鼓励将 Action 代码写在目标语言的单独文件中,而不是将它们直接嵌入到语法中,因此能够区分 << 很重要。和 >> .如果没有为这些运算符明确创建标记,它们将被分配任意类型,并且没有命名常量可用于引用它们。

此警告还有助于避免以下有问题的情况:
  • 解析器规则包含拼写错误的标记引用。如果没有警告,这可能会导致静默创建可能永远不会匹配的附加 token 。
  • 解析器规则包含无意的标记引用,例如:
    number : zero | INTEGER;
    zero : '0'; // <-- this implicit definition causes 0 to get its own token
  • 关于antlr - "Implicit token definition in parser rule"有什么值得担心的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16102540/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com