ANTLR在国内现在比较火了,主要是Hibernate用了ANTLR做HQL到SQL的语法处理转换,园子里Andy Wu已经有了一个比我强一点表达式计算引擎,但奇怪的是,他的公开代码并没有包括*.g文件。上网也找了好多资料,似乎国内ANTLR应用多数都还停留在初级阶段,国外真正好的初学者教材也很少,所以很期待ANTLR的Terence Parr新书The Definitive ANTLR Reference:Building Domain-Specific Languages。
我花了2天时间看了看ANTLR,做些技术储备,这里提供的表达式求值器是C#版本的,同ANTLR自带的calc示例相比较有下列进步:
- 修改了ANT的*.build,使其符合ANT 1.7版本的语法(ANTLR自带的build文件已经不符合ANT最新语法了),另外,build ANTLR还需要ANT dotNET库支持;
- 增加了一元运算符“-”和“+”;
- 支持括号指定优先级;
- 提升整数INT到浮点FLOAT类型;
- 补全四则运算;
- 增加了乘方^,取模%,运算符。
或者更简单的说,可以计算形如“(10/2) - 3 + (2+2)*4 - 2^3 - -5%+2 +0.2/3 ;”这样的表达式。
我以后还可能会增加一些我能力范围内可以实现的功能,但ANTLR入门简单,但越到后来越难,资料也越少,所以还是无法做出什么担保,毕竟ANTLR是和编译原理相关的,我敢狂妄的说我可以一个月内掌握大多数IT相关的知识和技能,但编译原理么——还是要除外的。
最后以一个提问结尾:
我的calc实现是在原子ATOM中支持括号的:
atom : FLOAT | (LPAREN! sumExpr RPAREN!) ;
因为按照Ashley J.S Mills的Nested Expressions教程总是不对,我怀疑这样做同Ashley的做法相比,会有一些效率上的损失,有人知道么?
分享到:
相关推荐
NULL 博文链接:https://appofis.iteye.com/blog/743714
本文首先对信号表达式进行了分析,通过ANTLR 实现了对信号表达式的解析。并 加强了表达式的形式,在表达式中增加了变量,使其可以计算出变量在某个区间内的表达式 的值。
用antlr分析处理布尔表达式的例子,包括:语法定义.g文件;生成的词法分析和语法分析器;带有图形界面的分析器调用代码。 其中带有GUI的分析器ParserFrame,可以用于任何.g文件生成的词法、语法分析器,只要通过改变...
系列博文 使用Antlr+Stringtemplate生成method chaining,一个不太简单的案例 的源代码。
Runtime 3.5. The runtime library for parsers generated by the C# target of ANTLR 3.
此部分使用Antlr实现的C#版的简易计算器。内含有源代码。大家可以进行参考使用。 如果有需要更加完整功能的朋友可以联系我。
antlrcs, ANTLR 3 StringTemplate 3和 StringTemplate 4的C# 端口 ANTLR 3 C# 目标 这里知识库包含 3个主要项目的C# 版本,其中有些项目具有多个生成构件:ANTLR 3Antlr3: ANTLR 3的代码生成器Antlr3.Runtime: ANTLR...
DCSoft.Expression:用2500行C#源代码编写的评估计算器引擎,而没有ANTLR。使用2500行C#代码编写的高级数值运算表达式引擎
ANTLR4 JsonPath 语法 这是一个简单的语法,用于解析表达式。 需要文件夹 ~/.antlr 中的 Java 和 ANTLR4 完整 jar。 运行./testSamples 。
ANTLR4计算器示例ANTLR4计算器示例和解释我该如何设置? 该项目使用Java 11,但是如果需要可以在pom.xml进行更改使用Maven安装软件包(请参阅pom.xml ) 这会通过ANTLR4自动生成所需的类要基于语法手动更新/重新生成...
ANTLR是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。它被广泛应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter搜索使用ANTLR进行语法分析,每天...
NULL 博文链接:https://hellojinjie.iteye.com/blog/1197529
antlr-例子 计算器示例 'q' to quit >a=10 >b=20 >a+10*b - 100 110.0
知识一个包含了源代码的C#实现的简易计算器。只能实现+-*/和()运算的源代码。 供大家交流学习Antlr使用。 如果希望得到完善版本可以和我联系! QQ:157426512 或者是自己在我源代码的基础上进行晚上了哦。
介绍antlr4的例子程序,给出了简单的使用的实例。
antlr-样本 使用 ANTL4 的简单示例
Antlr 4示例/简短教程这是我的《 博客文章的示例代码库。
ANTLR 4的C#目标 入门 步骤1:安装Java(推荐) :warning: 从4.5.0-alpha003版本开始,不再需要用户安装Java运行时才能使用ANTLR 4编译.NET应用程序。但是,安装Java将大大提高代码生成过程的性能。 强烈建议使用...
其中.g为ANTLR源文件,可生成语法分析器和语法树的.java文件,然后进行必要的修改(添加成员变量)。提供的.java文件已经修改好。直接放在项目里,选择主类Frame,编译运行即可。在窗口里输入测试文件的路径,即可绘...
关系代数解释器(使用 Antlr v4) 由 Gaurav Mittal 和 Kaushal Yagnik 创建 ####CSL - 451 实验室 2 ###概括 解释器将关系代数表达式作为用户的输入,自动将其转换为 SQL 查询,在数据库服务器上执行查询,并将...