ANTLR BNF 语法符号中 epsilon 的等价物是什么?

2023-11-23

在利用 ANTLR 3.3 期间,我正在更改当前语法以支持不带括号的输入。这是我的语法的第一个版本:

grammar PropLogic;

        NOT : '!' ;
        OR  : '+' ;
        AND : '.' ;
        IMPLIES : '->' ;
        SYMBOLS : ('a'..'z') | '~' ;
        OP : '(' ;
        CP : ')' ;

    prog    : formula EOF ;


    formula : NOT formula
        | OP formula( AND formula CP | OR formula CP | IMPLIES formula CP)
        | SYMBOLS ;


    WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+    { $channel = HIDDEN; } ;

然后我以这种方式更改它以支持适当的功能:

grammar PropLogic;

    NOT : '!' ;
    OR  : '+' ;
    AND : '.' ;
    IMPLIES : '->' ;
    SYMBOL : ('a'..'z') | '~' ;
    OP : '(' ;
    CP : ')' ;
    EM : '' ;

prog    : formula EOF ;


formula : OP formula( AND formula CP | OR formula CP | IMPLIES formula CP)
    | ( NOT formula | SYMBOL )( AND formula | OR formula | IMPLIES formula | EM ) ;


WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+    { $channel = HIDDEN; } ;

但我遇到了以下错误:

error<100>:  syntax error: invalid char literal: ''
error<100>:  syntax error: invalid char literal: ''

有谁知道我该如何克服这个错误?


Your EM token:

EM : '' ;

无效:您无法在词法分析器规则中匹配空字符串。

要匹配 epsilon (无),您应该执行以下操作:

rule 
  :  A 
  |  B 
  |  /* epsilon */ 
  ;

当然,评论/* epsilon */可以安全地移除。

请注意,当您按照当前语法执行此操作时,ANTLR 会抱怨可以使用多个替代项来匹配规则。这是因为你的语法不明确。

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

ANTLR BNF 语法符号中 epsilon 的等价物是什么? 的相关文章

  • 如何自定义BlockingQueue的阻塞行为

    我想创建一个阻塞队列 它根据自定义规则而不是队列中的项目数量来阻止生产者 例如 生产者生成一些文件并放入队列中 消费者经过一番分析后将它们转移到特定位置 对于上述场景 如果队列中的总文件大小达到某个阈值 我希望生产者等待生成新文件 如果总大
  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 如何在具有动态列的表中插入值 Jdbc/Mysql

    我想在具有动态列的表中添加值 我设法创建一个包含动态列的表 但我不知道如何插入数据 Create Table sql CREATE TABLE MyDB myTable level INTEGER 255 int columnNumber
  • 我们可以在三元运算符(Java)中使用命令吗?

    这是一个工作代码 String a first String b second String object System out println object null a b 但它不是 String a first String b se
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • java JFileChooser 文件大小过滤器

    我知道我可以按文件类型进行过滤 但是可以按文件大小进行过滤吗 例如 JFileChooser 仅显示 3 MB 以内的图片 简短的回答应该是 你尝试过什么 长答案是肯定的 JFileChooser fc new JFileChooser f
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • 通用 JSF 实体转换器[重复]

    这个问题在这里已经有答案了 我正在编写我的第一个 Java EE 6 Web 应用程序作为学习练习 我没有使用框架 只是使用 JPA 2 0 EJB 3 1 和 JSF 2 0 我有一个自定义转换器 用于将存储在 SelectOne 组件中
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • 如何计算文件中单词的长度?爪哇

    我正在尝试编写一个代码来计算文件中特定长度的单词数 例如 How are you 会打印 Proportion of 3 letter words 100 3 words 我想计算长度为 1 2 3 4 5 6 7 8 9 10 11 12
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s

随机推荐

  • 为什么需要 useRef 而不是可变变量?

    我读过了useEffect 完整指南 逆流而上反应过度 该示例表明 如果我们想获取最新的count 我们可以用useRef保存可变变量 并在异步函数中获取它 function Example const count setCount use
  • Android 在回收站视图中水平自动滚动

    我在列表中有两个值 并使用回收器视图在水平列表视图中显示它们 这里我需要无限地自动滚动水平列表 我尝试使用下面的代码但没有结果 Horizo ntalScrollView 添加新视图时自动滚动到结束 请在此处查看解决方案 https git
  • 您可以在 List 中的位置 0 处插入吗?

    我需要在集合的开头插入一个对象 我的收藏是列表类型 我怎样才能做到这一点 当然可以 例如一个通用的字符串列表 List
  • 如何让 Visual Studios 构建系统了解托管 dll 的非托管依赖关系?

    构建托管代码时 Visual Studio 正确 并递归地 将引用的托管项目的 dll 复制到正在构建的项目的输出文件夹中 但是 如果这些引用之一是依赖于非托管 DLL 的托管 DLL 则这些非托管 DLL 不会复制到输出文件夹 即使它们的
  • :after 伪元素的 CSS3 转换

    看看这个小提琴 http jsfiddle net sajYc 过渡为 after伪元素在 Firefox 中工作 但在基于 webkit 的浏览器中失败 知道这是否会在未来的版本中出现吗 有什么非 jquery 过度杀伤的解决方法吗 基本
  • 为什么 :before 在 safari 中看不到?

    我有一个在 Chrome 中运行良好的代码 menu ul list style position inside list style type none display block margin 0 auto padding 0 menu
  • 在单独的 .swift 文件中使用扩展名

    寻找在单独的文件中使用 Swift 扩展的方法或替代解决方案 仅当扩展被写入正在使用的同一文件中时 创建扩展才有效 这是一个有效的 ViewController swift 示例 import UIKit var TestHelper St
  • C++ 将向量转换为向量

    什么是一个好的干净的方法来转换std vector
  • 扁平化 TypeScript 类型或界面?

    作为一名 TypeScript 开发人员 我已经习惯了在使用时出现 重复标识符 问题 d ts files 最近 发生这种情况是因为我需要两种打字 d ts文件 Angular 2 和 Parse Angular 2 不分发它们的 d ts
  • WordPress:如何将 url GET 参数添加到我的主菜单项

    我正在尝试将 URL GET 参数添加到 Wordpress 中的主菜单项之一 但我不知道如何操作 因此 我的方法是检测菜单项上的单击事件 然后通过 AJAX 将参数传递到我的 php 页面 该页面将处理根据需要传递的值 我的主要问题是 看
  • 完整克隆是子模块添加分支的唯一方法吗?

    我想添加一个引用特定 非主 分支的子模块 以下只会抓取 master 分支 因为 depth 1 所以命令必然会失败 git submodule add b myBranch depth 1 email protected some lar
  • 如何使用 AngularJS 并调用 MVC API 下载文件?

    我正在使用 AngularJS 并且有一个 MVC 4 API 它返回带有附件的 HttpResponseMessage var result new MemoryStream pdfStream 0 pdfStream Length Po
  • Numpy 温度计编码

    我正在尝试使用 numpy 优化的内置函数来生成温度计编码 温度计编码基本上是生成n如果 1 在给定长度内 则为数量 例如 在 8 长度中 3 将被编码为 1 1 1 0 0 0 0 0 使用 numpy 根据整数输入生成该向量基本上是切片
  • 向已包含 n 个元素的二叉堆插入 n 个元素的渐近时间复杂度

    假设我们有一个包含 n 个元素的二叉堆 并且希望再插入 n 个元素 不一定是一个接一个 总共需要多少时间 我认为它是 theta n logn 因为一次插入需要 logn 给定 n 个元素的堆以及要插入的 n 个元素 所以最终会有2 n个元
  • 如何配置 selenium webdriver 以使用自定义 Firefox 设置进行测试?

    我正在使用 Ubuntu 11 04 和 selenium 2 9 0 以下是它在我的 root pom 中的配置方式
  • 如何仅使用css自定义html5输入范围滑块垂直?

    我想自定义 html5 input range 垂直时的外观 想要避免 CSS 3 指令 例如 Transform rotate 它会使 UI 布局变得复杂 Webkit css 属性在我的上下文中被识别 其他供应商在我的情况下毫无用处 自
  • 某些工作簿上的 gspread“SpreadsheetNotFound”

    我有一个包含数百个工作簿的谷歌驱动器文件夹 我想循环浏览列表并更新数据 由于某种原因 gspread 只能打开某些工作簿 而不能打开其他工作簿 我最近才遇到这个问题 这不是访问问题 因为所有内容都在同一个文件夹中 I get raise S
  • 如何动态更改MasterPage上aspnetForm的Action属性

    我们正在尝试动态修改母版页中主 ASP NET 表单的 Action 属性 该页面有一个单选按钮 用户选择其中一个选项并单击提交 在回发时 应根据选择设置表单的操作属性 并且应自动再次提交表单 我们尝试使用 JavaScript 来实现同样
  • 将文件上传到 EC2 实例上的 S3 - 权限被拒绝

    因此 在我的应用程序中 用户将能够将他们的照片上传到 S3 存储 然后我将返回的 Url 保存到数据库中 我遇到的问题是 当我将应用程序部署到 Elastic Beanstalk 环境时 由于我在 catalina out 日志中发现的此错
  • ANTLR BNF 语法符号中 epsilon 的等价物是什么?

    在利用 ANTLR 3 3 期间 我正在更改当前语法以支持不带括号的输入 这是我的语法的第一个版本 grammar PropLogic NOT OR AND IMPLIES gt SYMBOLS a z OP CP prog formula