为什么在将令牌分配给通道时出现错误?

2023-12-07

我的 .g4 文件中有以下代码。

@lexer::members{
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}


WS :  (' '|'\t'|'\f')+ -> channel(WHITESPACE)
   ;

COMMENT 
    :   '//' ~('\n'|'\r')* -> channel(COMMENTS)
    ;

LINE_COMMENT 
    :   '/*' .*? '*/' NEWLINE? -> channel(WHITESPACE)
    ;

我收到以下错误:

警告(155):Shiro.g4:239:34:规则“WS”包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

警告(155):Shiro.g4:243:38:规则“COMMENT”包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

警告(155):Shiro.g4:247:42:规则“LINE_COMMENT”包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

这是 Terrence 在 ANTLR4 书中描述的将令牌放在单独通道上的技术。为什么我会收到这些警告?我应该担心吗?


您没有收到错误;这是一个警告。特别是,它是UNKNOWN_LEXER_CONSTANT警告,这是 ANTLR 4.2 的新增内容。

编译器警告 155。

rule 'rule' 包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

词法分析器规则包含标准词法分析器命令,但该命令的常量值参数是无法识别的字符串。因此,词法分析器命令将被转换为自定义词法分析器操作,从而防止该命令在某些解释模式下执行。词法分析器解释器的输出可能与生成的词法分析器的输出不匹配。

以下规则会产生此警告。

@members {
public static final int CUSTOM = HIDDEN + 1;
}

X : 'foo' -> channel(HIDDEN);           // ok
Y : 'bar' -> channel(CUSTOM);           // warning 155
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在将令牌分配给通道时出现错误? 的相关文章

  • 如何获得有关 antlr4-maven-plugin 的帮助

    antlr4 maven plugin 似乎不是 Antlr4 网站上的文档 这可能不会给你带来任何好处 就像对我一样 尝试这个 mvn org antlr antlr4 maven plugin help Ddetail true 生产
  • Antlr4 无法正确识别 unicode 字符

    我有非常简单的语法 尝试将 与标记 E CODE 相匹配 我已经使用 TestRig 工具 带有 tokens 选项 对其进行了测试 但解析器无法正确匹配它 我的输入文件采用无 BOM 的 UTF 8 编码 并且我使用了 ANTLR 版本
  • ANTLR - 输入错误不匹配

    我有一个语法 如下所示 由特定语言的注释和控制语句组成 Grammar grammar DD ddlist ddstmt jclcomment ddstmt dd1 dd2 dd3 dd4 dd1 JCLBEGIN ddname DDWOR
  • 如何在访问期间知道ANTLR解析器当前处于哪个替代规则

    如果我们查看 bash 源代码 特别是 yacc 语法 我们可以看到所有重定向都是这样定义的 redirection GREATER WORD LESS WORD NUMBER GREATER WORD NUMBER LESS WORD R
  • context.getText() 排除 ANTLR4 中的空格

    getText 返回完整的语句 不包括单词之间的空格 考虑空格的一种方法是将它们包含在语法中 但是 有没有其他方法可以获取考虑空格的完整字符串 是的 有 假设您在这里使用ParserRuleContext getText 这个想法是向输入字
  • 强制 ANTLR 在特定文件夹中生成输出文件

    我不喜欢将 ANTLR 生成的文件放在与我的文件相同的位置 g4语法和其他版本控制文档 我想将所有生成的文件放在一个单独的嵌套文件夹中 可以通过排除 gitignore 到目前为止我尝试过的是创建一个文件夹
  • ANTLR 4 和 AST 访客

    我正在尝试将 AST 与 ANTLR4 一起使用 并使用以下文件 生成器 java import org antlr v4 runtime ANTLRInputStream import org antlr v4 runtime CharS
  • antlr4:ATN 版本 2 预计 3

    当尝试使用生成的语法和词法分析器时 我得到 org antlr v4 runtime atn ATN 无法使用版本 2 预期为 3 反序列化 ATN 怎么了 您的解析器是使用 ANTLR 4 0 生成的 但您尝试使用 ANTLR 4 1 执
  • 否定内部词法分析器和解析器规则

    否定元字符如何 在 ANTLR 的词法分析器和解析器规则中使用吗 否定可以发生在内部词法分析器和解析器规则 https stackoverflow com questions 4297770 practical difference bet
  • ANTLR4 RegEx 词法分析器模式

    我正在为 XSD 内的 RegEx 开发一个 Regex 解析器 我之前的问题描述如下 ANTLR4 解析正则表达式 https stackoverflow com questions 34177478 antlr4 parsing reg
  • 获取相对于文件开头的标记起始字符位置

    antlr4 API 有没有可靠的方法来获取相对于文件开头而不是行开头的令牌起始字符位置 经过一些研究后 我发现唯一的方法是使用 IntStream 的一些自定义实现 它不会将 n 视为行终止符 但也许我缺少一些更简单的方法 如果重要的话我
  • 是否需要担心“解析器规则中的隐式标记定义”?

    我正在使用 ANTLR 和 ANTLRWorks 2 创建我的第一个语法 我已经完成了语法本身 它识别用所描述的语言编写的代码并构建正确的解析树 但除此之外我还没有开始任何事情 让我担心的是 解析器规则中第一次出现的标记都会用黄色曲线下划线
  • ANTLR4 语法中第一个解析器规则的返回声明出现问题

    我在用returns对于我的解析器规则 它适用于除第一个之外的所有解析器规则 如果我的语法中的第一个解析器规则使用returns声明 ANTLR4 抱怨如下 匹配规则时期待 ARG ACTION 如果我在上面添加另一个不使用 返回 的解析器
  • 编写对空格敏感的解析器规则,同时从词法分析器中跳过 WS

    我在处理空白时遇到一些麻烦 在以下语法摘录中 我设置了词法分析器 以便解析器跳过空格 ENTITY VAR user resource INT DIGIT DIGIT ID LETTER LETTER DIGIT SPECIAL ENTIT
  • 如何捕获 ANTLR4 中的无关输入?

    我想捕获antlr4中的无关错误 它只打印到 stderr 类似的东西 line 1 16 extraneous input three expecting
  • 语义词法分析器谓词性能

    我有一个词法分析器为传递给词法分析器的宏字符串的动态列表创建 MACRO 标记 我在最顶层的词法分析器规则中使用了语义谓词来实现此功能 MACRO macros null tryMacro Where tryMacro 只是检查是否有任何宏
  • ANTLR4 Lexer 错误报告(违规字符的长度)

    我正在使用 ANTLR4 为某些语言开发一个小型 IDE 并且需要在词法分析器无法匹配错误字符时给它们下划线 内置的org antlr v4 runtime ANTLRErrorListener http www antlr org api
  • ANTLR语法的迁移工具

    假设我有以下简单语法 查询 DSL grammar TestGrammar term textTerm textTerm Text T VALUE STRING T VALUE value STRING WS t r n gt skip 然
  • 使用 Antlr4 解析任意分隔符

    我尝试在 Antlr4 中创建一个接受正则表达式的语法由任意字符分隔 与 Perl 中的类似 我怎样才能实现这个目标 需要明确的是 我的问题不是正则表达式本身 实际上我不在 Antlr 中处理 而是在访问者中处理 而是分隔符 我可以轻松地为
  • 在 ANTLR4 中如何检查行的第一个字符是否为“*”?

    我正在尝试为一种相对简单但特殊的语言编写一个解析器 简单地说 规则之一是注释行用星号表示only如果该星号是该行的第一个字符 我如何在 ANTLR4 中正式化这样的规则 我考虑过使用 START LINE COMMENT n n gt sk

随机推荐

  • 从资源中排除属性文件

    如何从 src main resources 中排除文件 例如 我在那里有一个名为 map 的文件夹 我想保留它 并且我想删除 war 中的所有内容 或者不首先将其打包到里面 或者替代但结果相同 从 src main resources 中
  • asp.net web 配置错误

    我的 ASP NET 项目仍然有问题 在 Visual Studio 中 当我开始调试时 一切正常并且页面正常工作 但是 当我在 iis7 上尝试时 会显示此错误 显示错误 配置错误描述 处理服务此请求所需的配置文件期间发生错误 请查看下面
  • C#:HttpListener 提供内容时出错

    我已经实现了类似的东西this唯一真正的区别是 string filename context Request RawUrl Replace Remove 0 1 string path Uri UnescapeDataString Pat
  • 从 javascript 调用 Objective-C 方法

    我制作任何 webView 并且我想从 javascript 调用任何返回任何参数的目标 c 方法 我尝试了很多方法但不允许 Objective C 方法在这里 BOOL webView UIWebView webView shouldSt
  • java 的 PriorityQueue 的内置迭代器不会以任何特定顺序遍历数据结构。为什么?

    这是直接来自Java文档 此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选方法 iterator 方法中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素 如果需要有序遍历 请考虑使用 Arrays sor
  • Base 64 图像到 ocr.space API Ionic 2

    我正在尝试将 Base 64 Jpeg 发送到 API 进行 OCR 分析 API 文档可以在这里找到https ocr space ocrapi 保存图像的代码在这里 takePicture Camera getPicture desti
  • (更新)基于两列向data.frame添加索引列

    示例数据框 df read table text colA colB 2 7 2 7 2 7 2 7 1 7 1 7 1 7 89 5 89 5 89 5 88 5 88 5 70 5 70 5 70 5
  • String.Replace 似乎没有用空字符串替换括号

    下面的 C 代码似乎没有执行任何操作 String str 3 str Replace String Empty str Replace String Empty Console WriteLine str 最终输出 3 我不知道这是为什么
  • 在 C# 中从 FormFlow 调用 LUIS

    我正在使用 Microsoft 机器人框架创建一个机器人来询问用户然后理解答案 使用机器人框架中的 FormFlow API 询问用户并检索答案 这是表单流的代码 public enum Genders none Male Female O
  • 链接 /usr/local/lib 时 Qt Creator 运行程序失败

    给出以下简单项目 QT core QT gui TARGET ConsoleTest08 CONFIG console CONFIG app bundle TEMPLATE app SOURCES main cpp LIBS L usr l
  • Excel - 在 FilterXML 中添加 Excel 公式

    我有一个 Excel 电子表格 其中一列包含字符串列表 字符串列表由多个不同长度的数字组成 用 和 分隔 字符串的第一个条目是代码 ID 长度始终为 3 示例中为红色 后跟 然后是金额 长度不同 示例中为绿色 后跟 如果字符串继续 在一名成
  • 在空手道中使用路径时出现错误 http request failed: null

    我开始使用空手道进行测试 但是当我使用 path 关键字时 我收到 http request failed null 错误 当使用以下场景时 它有效 Feature items Scenario Testing items response
  • cout不是std的成员,以及有关c++的其他问题

    请允许我先说一下我确实已经包含了 也适用于 string endl 而且实际上一切都不起作用 我的 IDE 没有显示语法错误 我不明白为什么会发生这个问题 它在我编写的其他 C 代码示例之一中运行良好 所以我正在尝试制作一个小游戏 公牛和奶
  • 错误 ITMS-90725:请更新 Xcode 并重建您的应用程序

    我当前的项目在 Swift 3 2 和 Xcode 8 3 中 即使我在 3 天前已成功上传到 iTunes 今天也会出现此错误 错误 ITMS 90725 SDK 版本问题 此应用程序是使用 iOS 构建的 10 3 SDK 所有提交到
  • 将图像保存到独立存储中[重复]

    这个问题在这里已经有答案了 可能的重复 将图像存储到 Windows Phone 7 中的独立存储中 我正在使用 Visual Studio Expression Blend 为 Windows Phone 7 创建应用程序 用户应该能够选
  • 让 Visual Studio 在按下 Ctrl 和光标键时理解 CamelCase

    有没有办法可以配置 Visual Studio 2008 以理解 CamelCase 具体来说 我希望能够得到Ctrl right or left光标将我带到变量或类型名称的一小部分 即 如果我的光标位于该行的开头 LongNamedExa
  • 为什么我必须在 javascript 正则表达式上添加双反斜杠?

    当我使用像 regexpal com 这样的工具时 它让我按照习惯使用正则表达式 例如 我想检查文本中是否存在至少 3 个字母长且以空格结尾的单词的匹配项 因此它将匹配 now noww 等等 在 regexpal com 上 这个正则表达
  • Android 中的 Helvetica 替代方案 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找适用于 Android 的 Helvetica 字体替代品 貌似Android中没有这个字体 iOS中有 什么是一个好的替代方案 EDIT 除了下面的答案之外 一位同事发现
  • 删除括号外的文字

    i e text remove this text keep this text and 123 echo preg replace text 它应该输出 keep this text and 123 这将做到这一点 并且适用于嵌套 以及
  • 为什么在将令牌分配给通道时出现错误?

    我的 g4 文件中有以下代码 lexer members public static final int WHITESPACE 1 public static final int COMMENTS 2 WS t f gt channel W