`

比ANTLR自带calc示例的稍微复杂一点的C#表达式求值器(expression evaluator)

阅读更多

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的做法相比,会有一些效率上的损失,有人知道么?




丁丁 2007-03-29 22:56 发表评论
分享到:
评论

相关推荐

    Java数学表达式计算(Expression Evaluator)

    本主题将深入探讨如何在Java中实现一个数学表达式计算器,这通常被称为"Expression Evaluator"。我们将讨论相关的技术和库,以及如何通过源码分析来理解和创建这样一个工具。 首先,Java标准库提供了`java.lang....

    算术表达式求值演示1

    在IT领域,算术表达式的求值是一项基础且重要的任务,尤其在编程语言如C和C++中。本文将深入探讨算术表达式求值的原理、方法以及相关的编程实践,以"算术表达式求值演示1"为例,解析其中涉及到的知识点。 首先,...

    基于ANTLR的信号表达式解析

    在本文中,ANTLR被用于实现对信号表达式的解析功能,增加了表达式的形式,并允许在表达式中使用变量,进而计算出变量在某个区间内的表达式值。 在计算机处理信号的过程中,通常分为两种途径:一种是直接通过设备...

    利用预测分析技术表达式求值

    在实际应用中,预测分析不仅限于表达式求值,还可以应用于更复杂的编程结构,如控制流、循环、条件语句等。通过理解和掌握预测分析技术,开发者能够更有效地构建编译器和解释器,优化代码性能,并为高级语言特性提供...

    antlr实例-表达式求值

    NULL 博文链接:https://appofis.iteye.com/blog/743714

    Antlr实现的建议计算器C#版源码

    ANTLR,全称ANother Tool for Language Recognition,是一个强大的解析器生成器,广泛用于构建语言、工具和框架。它能够从语法规则定义中生成解析器和词法分析器,支持多种编程语言,包括C#。在本例中,我们关注的是...

    antlr+stringtemplate示例

    ANTLR可以生成Java、C#、Python等多种目标语言的解析器和词法分析器。 StringTemplate则是一个模板引擎,用于生成结构化的文本输出,如HTML、XML、Java源代码等。它的设计目标是将数据和呈现逻辑分离,使得模板只...

    自定义表达式计算 (c#)

    C#中可以使用递归下降解析(Recursive Descent Parsing)或者LALR(1)解析器生成器如ANTLR来实现。递归下降解析是通过定义一组相互嵌套的递归方法来实现的,每个方法对应一种语法构造。对于自定义关键字和语法规则...

    Antlr3.Runtime_C#_

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架。ANTLR可以生成Java、C#、Python、JavaScript等...

    C#计算数学表达式,使用动态链接库

    在C#中,可以使用正则表达式、递归下降解析或者现成的库如Antlr来实现。 2. **运算符优先级和结合性处理**:理解并正确处理乘法、加法、括号等运算符的优先级和结合性是计算表达式的关键。这可能涉及到自定义栈数据...

    用Antlr 分析布尔表达式的例子

    用antlr分析处理布尔表达式的例子,包括:语法定义.g文件;生成的词法分析和语法分析器;带有图形界面的分析器调用代码。 其中带有GUI的分析器ParserFrame,可以用于任何.g文件生成的词法、语法分析器,只要通过改变...

    Java实现计算字符串表达式

    这些代码可能包含一个自定义的解析器和求值器,或者使用了已有的库如`javax.eval.Evaluator`(Java 6及以上版本)或开源项目如JEXL (Java Expression Language)。 `lib`目录可能包含了用于这个任务的外部库,例如,...

    antlr_intro.rar_antlr4_antlr4 c# demo

    ANTLR4 是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架。从编程语言到配置文件,再到领域特定语言(DSL),ANTLR4 可以处理各种语法和语义分析...

    antlr4-jsonpath-grammar:JsonPath 表达式的简单 ANTLR4 语法

    在实际应用中,ANTLR4生成的解析器可以集成到任何Java项目中,或者通过ANTLR4的其他语言目标(如C#、Python等)来支持跨平台开发。使用这个JsonPath解析器,开发者能够方便地解析和操作JSON数据,比如在复杂的自动化...

    ANTLR

    7. **ANTLR的应用示例**:提供简单的语言或表达式解析示例,如计算器程序,展示ANTLR的实际应用。 8. **ANTLR的高级特性**:可能涉及错误恢复、自定义语义动作、树遍历和转换等高级话题,帮助开发者更深入地掌握...

    DCSoft.Expression:用2500行C#源代码编写的评估计算器引擎,而没有ANTLR。使用2500行C#代码编写的高级数值运算表达式引擎-Calculator source code

    在计算机科学中,表达式引擎是一种能够解析和求值数学或逻辑表达式的组件。在DCSoft.Expression中,这个引擎设计用于处理包含加、减、乘、除、括号和其他数学运算符的复杂表达式。它可以处理浮点数、整数以及变量,...

    编译原理课程设计有关antlr的词法分析和语法分析

    通过定义这些规则,ANTLR可以解析复杂的数学表达式,并通过树遍历器(CalcTreeWalker)执行计算操作,如加法和乘法。 在进行关系代数到SQL语句的转化时,ANTLR可以帮助学生理解如何将高级语言的抽象语法转换为...

    Java编程艺术-表达式解析器.rar

    在压缩包中的“Java编程艺术-表达式解析器”文件中,可能包含了详细的源代码示例,展示了如何实现一个完整的表达式解析器,包括解析、求值以及错误处理机制。通过学习这些代码,开发者可以更好地理解解析器的工作...

Global site tag (gtag.js) - Google Analytics