Antlr4:输入不匹配

2023-12-09

这是一个简单的语法测试,我认为很容易解析,但我立即得到“不匹配的输入”,并且我无法弄清楚 Antlr 正在寻找什么。

输入:

  # include "something" program TEST1 { BLAH BLAH }

我的语法:

  grammar ProgHeader;

  program: header* prog EOF ;
  header: '#' ( include | define ) ;
  include: 'include' string ;
  define: 'define' string string? ;
  string: '"' QTEXT '"' ;
  prog: 'program' QTEXT '{' BLOCK '}' ;
  QTEXT: ~[\r\n\"]+ ;
  BLOCK: ~[}]+ ; // don't care, example block
  WS: [ \t\r\n] -> skip ;

输出错误信息:

line 1:0 mismatched input '# include "something" program TEST1 { BLAH BLAH '
expecting {'program', '#'}

这真的让我很困惑,因为它说它正在寻找“#”,而输入的开头就有一个“#”。我也转储了解析树。它似乎卡在顶部的“程序”规则处:

(program # include "something" program TEST1 { BLAH BLAH  } )

Halp?

如果重要的话,这是驱动此测试用例的完整程序(我认为这不重要,上面的信息已经足够了,但这里是):

  package antlrtests;

  import antlrtests.grammars.*;
  import org.antlr.v4.runtime.*;
  import org.antlr.v4.runtime.tree.*;

  /**
   *
   * @author Brenden Towey
   */
  public class ProgHeaderTest {
     private String[] testVectors = {
        "# include \"something\" program TEST1 { BLAH BLAH } ",
     };
     public void runTests() {
        for( String test : testVectors )
           simpleTest( test );
     }
     private void simpleTest( String test ) {
        ANTLRInputStream ains = new ANTLRInputStream( test );
        ProgHeaderLexer wpl = new ProgHeaderLexer( ains );
        CommonTokenStream tokens = new CommonTokenStream( wpl );
        ProgHeaderParser wikiParser = new ProgHeaderParser( tokens );
        ParseTree parseTree = wikiParser.program();
        System.out.println( "'" + test + "': " + parseTree.toStringTree(
                wikiParser ) );
     }
  }

以及完整的输出:

run:
line 1:0 mismatched input '# include "something" program TEST1 { BLAH BLAH ' expecting {'program', '#'}
'# include "something" program TEST1 { BLAH BLAH } ': (program # include "something" program TEST1 { BLAH BLAH  } )
BUILD SUCCESSFUL (total time: 0 seconds)

最开始匹配的最长标记是 QTEXT,它匹配文本# include(直到但不包括第一个文本"字符),但据报道,此时有效的标记是“program”和“#”。因此,最好避免与几乎任何内容匹配的标记定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Antlr4:输入不匹配 的相关文章

随机推荐

  • 是否有一种更简单(更轻便)的方法可以使用 JavaFX 8 将文本置于“区域”中心?

    所以 首先 我已经实现了我想要的 那就是在 区域 的中心显示一定量的文本 截图 右上角 现在 我遇到的问题是如何实现这一点 这是整个选项卡的 FXML 摘录
  • Android SQLite 表未创建

    我正在尝试创建一个统计表 但由于某种原因 直到我调用它才创建StatisticsAdapter insertEntry 首次 之后 我可以删除该代码 重新加载新版本 然后一切正常 由于这在现实生活中行不通 我想知道如何创建一个空表 目前有一
  • 添加 API 应用程序时出现 Azure 逻辑应用程序错误

    我正在使用逻辑应用程序 API 应用程序进行 POC 以从本地 SQL 获取记录 我在 API 应用程序中创建了 SQL 连接器 还创建了逻辑应用程序 但是当尝试在逻辑应用程序设计器中添加 SQL Connector API 应用程序时 它
  • 更新SqlAlchemy多对多关联表中的值

    根据下表 如何更新用户所在的组 我觉得我必须遗漏一些明显的东西 但到目前为止我还没有找到任何东西来说明如何做到这一点 group permission table Table group permission metadata Column
  • 在 WPF 中呈现日志视图的快速方法是什么?

    我正在编写一个需要类似日志的视图 类似于 IM 客户端在对话中显示消息的方式 的应用程序 并且每秒可能有许多更新 速度在这里是一个问题 由于大量传入事件而导致应用程序锁定是一个可能的问题 我需要选择和基本文本格式 因此手动渲染可能会变得相当
  • JQuery 对象承诺的目的是什么?

    几年来 我一直在处理一个兼职问题 其中一些 DOM 元素用 jquery 加载html函数调用后无法立即访问该函数 该行为有点像在不等待文档就绪事件的情况下执行函数 虽然 html 假设是同步的 这所以答案 还有这个one 建议使用承诺ht
  • 如何在wpf中设置TAborder

    我有一个问题 我制作了一个运行良好的 wpf 应用程序 但是我想设置每个表单的制表符顺序 但我在 Vs2008 Express 版本中没有得到任何制表符顺序 我该如何解决这个问题 有谁可以帮助我吗 提前致谢 沙申克 要使 TabIndex
  • scanf 正在使用未初始化的变量; C [重复]

    这个问题在这里已经有答案了 我确信这里有一个愚蠢的错误 但是我无法弄清楚 这是我的代码的一部分 char moving scanf s moving 当我用 gcc 编译它时 它显示以下内容 newmatrix c 38 7 warning
  • 保留并删除 Newtonsoft.Json 中的尾随零

    我的 C 应用程序中的 Newtonsoft JsonConverter 存在问题 我有带尾随零的小数 转换为 json 后 缺少零 Example input decimal 1 99000 output json 1 99 我有自己的转
  • 创建会话时如何获取IP地址?

    In my grails应用程序 我已经实现了接口HttpSessionListener监听会话创建 如下所示 class MyHttpSessionListener implements HttpSessionListener publi
  • 通过Ajax回调在产品页面显示woocommerce通知

    我正在尝试在产品页面中显示 woocommerce 通知 该通知应通过 ajax 回调函数显示 并由按钮触发 回调工作正常 但没有显示任何通知 这是我的代码 jQuery AJAX document ready function retur
  • mkfifo 导致终端挂起?

    Does mkfifo根本无法与 Cygwin 一起使用 一组简单的命令 例如 mkfifo my pipe echo 1234 gt my pipe 只会导致终端永远停留在光标闪烁的状态 我 做错事 了吗 不 你没有做错任何事either
  • 如何隐藏 PrimeFaces 资源的“ln”和“v”实现/版本相关参数

    我在我的应用程序中使用 primefaces 和 primefaces extensions 对于 css 和 js 文件等每个资源 该资源的 GET 请求中还有一个 ln 和 v 查询参数 如下所示 primefaces extensio
  • 使用 xp_cmdshell 通过 DTEXEC 传递变量 (SQL Server 2008)

    我创建了一个 SSIS 包 将 Excel 文件导入到我的数据库中 我创建了一个变量 我想将其用作 Excel 连接管理器的 Excel 文件路径 我的 SSIS 包中的变量名称是 ExcelSource 它应该代表完整路径 我想最终动态设
  • Flutter:如何在Swiper中完成特定逻辑后显示下一个索引,其中GridView也在Swiper中设置?

    我正在尝试制作一个文字游戏 首先 索引将是白色的 如果用户单击正确的答案 则索引将变为绿色并进入下一个屏幕 并且下一个屏幕中的索引将为白色 再次 如果用户单击不正确的答案 则索引将变为红色 并且不要放开下一页直到用户输入正确答案 我在 Sw
  • 使用 SpongyCastle 的 PKCS#10 客户端证书创建 Https 连接

    The goal 我正在努力实现与客户端证书的通信 步骤 1 创建 PKCS 10 请求 CSR 并将其交给我的服务器进行签名 服务器联系人将 CSR 传递给 CA CA 对其进行签名 并返回 PKCS 7 带有签名的 PKCS 10 和
  • 如何在 Netbeans 中添加 Scala 平台?

    我已经为netbeans安装了一套Scala插件 具体来说 Scala 控制台 项目 运行时库 平台 平台标准 编辑器 调试器项目集成 重构 调试器 核心 和 Rats Packrat 解析器 我还通过 ubuntu aptitude 包管
  • 防止多列布局中的元素碎片

    鉴于此代码 wrapper border 2px solid red padding 10px width 310px height 310px webkit column width 150px webkit column gap 10p
  • PHP 写入文件

    下面是我用来将地图数组 翻译 为 SQL 代码的一些代码 以便在更新游戏地图时可以轻松更新数据库 正如您所看到的 它将 SQL 代码打印到屏幕上 以便我可以复制并粘贴它 随着我的地图变得更大 这将变得效率低下 因为它会因大量输出而使浏览器崩
  • Antlr4:输入不匹配

    这是一个简单的语法测试 我认为很容易解析 但我立即得到 不匹配的输入 并且我无法弄清楚 Antlr 正在寻找什么 输入 include something program TEST1 BLAH BLAH 我的语法 grammar ProgH