我正在尝试在Antlr中为命题逻辑创建BNF语法,但我不断收到错误消息:

java.lang.NoSuchFieldError:offendingToken

由于没有显示行号,所以我不知道错误在哪里。 构建成功,但是当我输入示例输入时,树停在句子中,这是BNF中定义的第一项。

这是我的BNF:

grammar Grammar;

options {

language = Java;

output = AST;

ASTLabelType=CommonTree;

}

@header {

package antlr;

}

@members {

}

@lexer::header { //lexer

package antlr;

}

@lexer::members {

}

sentence: atomicsentence | complexsentence;

atomicsentence: 'T' | 'F' | symbol;

complexsentence: unop sentence | sentence binop sentence | (sentence);

unop: 'NOT';

binop: 'AND' | 'OR' | 'IMPLIES' | 'EQUIVALENT';

symbol: (LEXRULE)+;

LEXRULE: ('a'..'z')|('A'..'Z');

如果您在句子中注释掉复杂句,则原子句部分会起作用,直到由于没有EOF而终止为止。 我不确定应该在哪里,因为将其添加到句子中不起作用。

好吧,请举例说明您的输入。

另外向我们显示您的语法的完整来源,包括标题

我添加了完整的语法。 我也尝试了各种输入,最简单的输入是NOT p,这不起作用。

看看我编辑的答案

您的语法是递归的,ANTLR在尝试生成解析器时会提到:

[17:31:32] error(210): The following sets of rules are mutually left-recursive [complexsentence, sentence]

[17:31:32] Aborting because the following rules are mutually left-recursive:

[[T.complexsentence,index=4,line=15], [T.sentence,index=2,line=11]]

规则sentence与complexsentence匹配,而complexsentence规则又与sentence匹配。 ANTLR(v3)无法应付此类左递归规则。

语法的另一个问题是,您没有用于whiate空间的词法分析器规则,但是示例输入"NOT p"包含空格。

有关使用ANTLR的简单表达式解析器,请参阅:

ANTLR:有一个简单的例子吗?

使用ANTLR 3.3吗?

(编辑)

我已经重构了您的语法,因此它应该可以按您的预期工作。

grammar Grammar;

options {

language = Java;

output = AST;

ASTLabelType=CommonTree;

}

tokens {

CODE;

}

@header {

package antlr;

}

@members {

}

@lexer::header { //lexer

package antlr;

}

@lexer::members {

}

code    :   sentence -> ^(CODE code);

sentence: UNOP? complexsentence (BINOP sentence)?;

atomicsentence: 'T' | 'F' | SYMBOL;

complexsentence: atomicsentence | '(' sentence ')';

UNOP: 'NOT';

BINOP: 'AND' | 'OR' | 'IMPLIES' | 'EQUIVALENT';

SYMBOL: LEXRULE+;

fragment

LEXRULE: ('a'..'z')|('A'..'Z');

对不起,我是antlr的新手,但是是的,我的意思是(句子)允许用户在输入中使用方括号。 但是,使用此修复程序,仍会产生相同的错误。

JAVA文法bnf_关于java:BNF命题逻辑ANTLR的语法相关推荐

  1. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc

    西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...

  2. 4.Java数据库连接_1.JDBC (Java DB Connection)简介

    //============================================================================ Mysql安装参考: http://blo ...

  3. java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf

    java开发工具intellij idea使用教程:定义语法和解析器.pdf 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 慧都 科技 -- ...

  4. pmd java规则_PMD执行Java代码分析的原理

    PMD执行Java代码分析的原理 PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产 ...

  5. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...

    广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池   发布时间:2018-12-22 11:20 在 ...

  6. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

    在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...

  7. java web ubuntu_Ubuntu部署Java web项目

    登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update                     更新软件列表 输入: ...

  8. java反射最佳实践,java反射性能测试分析

    java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...

  9. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

最新文章

  1. go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径
  2. 利用 Rize 来进行 UI 测试或 E2E 测试
  3. vector中的圆括号和花括号
  4. mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念
  5. [转载]项目风险管理七种武器-霸王枪
  6. SpringBoot项目部署与服务配置
  7. 主存储器物理地址,逻辑地址,转换
  8. C#窗体间的数据传值(转)
  9. nowcoder80D applese的生日
  10. java+mysql中文乱码解决
  11. PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
  12. 代理软件使用拨号不可用,使用wifi正常使用 解决 win10
  13. Windows使用cwRsync实现服务器文件同步到Linux服务器
  14. ROS 自定义地图导航
  15. uniapp canvas生成海报不显示问题
  16. 【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
  17. css怎么修改图片像素,怎么改变图片宽度_word怎么改变图片像素大小
  18. 【python】批量压缩文件夹
  19. 访问网页出现503服务器,503错误,手把手教你网页出现503错误怎么解决
  20. oracle区块链开源项目,区块链Oracle原理及实现

热门文章

  1. 10t桥式起重机总体设计(有cad图+开题、中期报告+文献翻译)
  2. 在FastReport2.8中打开frf文件,选择另存为fr3文件,这时FastReport4是不能打开该文件的。按下述步骤调整:
  3. 服务器性能自动化测试脚本
  4. 向量的点乘 a·b 和叉乘 a×b
  5. 手把手教你用SNAP做全极化SAR图像分类
  6. 石榴算法—低质量页面终结者
  7. post数据过大的问题
  8. jupyter notebook调试流程
  9. js获取字符串转拼音首字母
  10. webstorm 格式化代码Ctrl+alt+l 失效