JAVA文法bnf_关于java:BNF命题逻辑ANTLR的语法
我正在尝试在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的语法相关推荐
- java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...
- 4.Java数据库连接_1.JDBC (Java DB Connection)简介
//============================================================================ Mysql安装参考: http://blo ...
- java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf
java开发工具intellij idea使用教程:定义语法和解析器.pdf 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 慧都 科技 -- ...
- pmd java规则_PMD执行Java代码分析的原理
PMD执行Java代码分析的原理 PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产 ...
- 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池 发布时间:2018-12-22 11:20 在 ...
- 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...
- java web ubuntu_Ubuntu部署Java web项目
登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update 更新软件列表 输入: ...
- java反射最佳实践,java反射性能测试分析
java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
最新文章
- go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径
- 利用 Rize 来进行 UI 测试或 E2E 测试
- vector中的圆括号和花括号
- mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念
- [转载]项目风险管理七种武器-霸王枪
- SpringBoot项目部署与服务配置
- 主存储器物理地址,逻辑地址,转换
- C#窗体间的数据传值(转)
- nowcoder80D applese的生日
- java+mysql中文乱码解决
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- 代理软件使用拨号不可用,使用wifi正常使用 解决 win10
- Windows使用cwRsync实现服务器文件同步到Linux服务器
- ROS 自定义地图导航
- uniapp canvas生成海报不显示问题
- 【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet
- css怎么修改图片像素,怎么改变图片宽度_word怎么改变图片像素大小
- 【python】批量压缩文件夹
- 访问网页出现503服务器,503错误,手把手教你网页出现503错误怎么解决
- oracle区块链开源项目,区块链Oracle原理及实现