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的做法相比,会有一些效率上的损失,有人知道么?
分享到:
相关推荐
本主题将深入探讨如何在Java中实现一个数学表达式计算器,这通常被称为"Expression Evaluator"。我们将讨论相关的技术和库,以及如何通过源码分析来理解和创建这样一个工具。 首先,Java标准库提供了`java.lang....
在IT领域,算术表达式的求值是一项基础且重要的任务,尤其在编程语言如C和C++中。本文将深入探讨算术表达式求值的原理、方法以及相关的编程实践,以"算术表达式求值演示1"为例,解析其中涉及到的知识点。 首先,...
在本文中,ANTLR被用于实现对信号表达式的解析功能,增加了表达式的形式,并允许在表达式中使用变量,进而计算出变量在某个区间内的表达式值。 在计算机处理信号的过程中,通常分为两种途径:一种是直接通过设备...
在实际应用中,预测分析不仅限于表达式求值,还可以应用于更复杂的编程结构,如控制流、循环、条件语句等。通过理解和掌握预测分析技术,开发者能够更有效地构建编译器和解释器,优化代码性能,并为高级语言特性提供...
NULL 博文链接:https://appofis.iteye.com/blog/743714
ANTLR,全称ANother Tool for Language Recognition,是一个强大的解析器生成器,广泛用于构建语言、工具和框架。它能够从语法规则定义中生成解析器和词法分析器,支持多种编程语言,包括C#。在本例中,我们关注的是...
ANTLR可以生成Java、C#、Python等多种目标语言的解析器和词法分析器。 StringTemplate则是一个模板引擎,用于生成结构化的文本输出,如HTML、XML、Java源代码等。它的设计目标是将数据和呈现逻辑分离,使得模板只...
C#中可以使用递归下降解析(Recursive Descent Parsing)或者LALR(1)解析器生成器如ANTLR来实现。递归下降解析是通过定义一组相互嵌套的递归方法来实现的,每个方法对应一种语法构造。对于自定义关键字和语法规则...
ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架。ANTLR可以生成Java、C#、Python、JavaScript等...
在C#中,可以使用正则表达式、递归下降解析或者现成的库如Antlr来实现。 2. **运算符优先级和结合性处理**:理解并正确处理乘法、加法、括号等运算符的优先级和结合性是计算表达式的关键。这可能涉及到自定义栈数据...
用antlr分析处理布尔表达式的例子,包括:语法定义.g文件;生成的词法分析和语法分析器;带有图形界面的分析器调用代码。 其中带有GUI的分析器ParserFrame,可以用于任何.g文件生成的词法、语法分析器,只要通过改变...
这些代码可能包含一个自定义的解析器和求值器,或者使用了已有的库如`javax.eval.Evaluator`(Java 6及以上版本)或开源项目如JEXL (Java Expression Language)。 `lib`目录可能包含了用于这个任务的外部库,例如,...
ANTLR4 是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架。从编程语言到配置文件,再到领域特定语言(DSL),ANTLR4 可以处理各种语法和语义分析...
在实际应用中,ANTLR4生成的解析器可以集成到任何Java项目中,或者通过ANTLR4的其他语言目标(如C#、Python等)来支持跨平台开发。使用这个JsonPath解析器,开发者能够方便地解析和操作JSON数据,比如在复杂的自动化...
7. **ANTLR的应用示例**:提供简单的语言或表达式解析示例,如计算器程序,展示ANTLR的实际应用。 8. **ANTLR的高级特性**:可能涉及错误恢复、自定义语义动作、树遍历和转换等高级话题,帮助开发者更深入地掌握...
在计算机科学中,表达式引擎是一种能够解析和求值数学或逻辑表达式的组件。在DCSoft.Expression中,这个引擎设计用于处理包含加、减、乘、除、括号和其他数学运算符的复杂表达式。它可以处理浮点数、整数以及变量,...
通过定义这些规则,ANTLR可以解析复杂的数学表达式,并通过树遍历器(CalcTreeWalker)执行计算操作,如加法和乘法。 在进行关系代数到SQL语句的转化时,ANTLR可以帮助学生理解如何将高级语言的抽象语法转换为...
在压缩包中的“Java编程艺术-表达式解析器”文件中,可能包含了详细的源代码示例,展示了如何实现一个完整的表达式解析器,包括解析、求值以及错误处理机制。通过学习这些代码,开发者可以更好地理解解析器的工作...