`

antlr表达式引擎

阅读更多

初次在项目中使用antlr,刚做了第一版,功能很简单(参不多正则都能做╮(╯▽╰)╭

用antlr做表达式引擎,分析表达式变量和函数

举例:表达式为[a]+[b]>[c]*([d]+[e]) ,可以分析出[]中的变量

                           sum([a]+1000), 可以分析出变量,并得到函数名,进行运算,或是直接输出

 

 

这里有个antlr介绍的小文章:http://blackproof.iteye.com/blog/1807372

 

源码:https://github.com/dirkzhang/

留下一点对源码的笔记:

options {
    output=AST;  
    ASTLabelType=CommonTree;  
    language=Java;  
}

 antlr分析输出为AST树

   

   

tokens
{
    INDEX;
    MEMBERACCESS;
    CALL;
    VARIABLE;
    BRACKETEXP;
}

 定义ast树上的节点,可以再rule中使用

 

methodExpr  
    :   IDENTIFIER LPAREN (argument (COMMA argument)*)? RPAREN -> ^(CALL IDENTIFIER argument*)
    ;

 给出一个函数的rule,表示遇到前边的翻译为CAll为根的树,如下



 

fragment Exponent 
    :   ('e'|'E') INTEGER_LITERAL
    ;

 fragment中的lexer是不能成为树节点的,可以被其他使用,相当于.g的全局变量

 

DATETIME_LITERAL
    :   '\'' STRING_LITERAL '\''
    ;
 
STRING_LITERAL  
    :   '"' (~('"'|'['|']'))* '"'
    ;
 
IDENTIFIER
    :   LETTER (LETTER|Digit)*
    ;

 这些是可以成为ast的node的lexer

 

贴一个antlr的工具antlrwork,很好用,可以网上搜搜

给个csdn的下载地址,要分的,还是搜搜下载吧:

http://download.csdn.net/detail/blackproof/5130394

 

 

 

  • 大小: 12.4 KB
1
0
分享到:
评论

相关推荐

    Fel Javael表达式引擎

    Fel Java表达式引擎是一款轻量级且高效的开源表达式计算引擎。它的全称是FastExpressionLanguage,专门设计用于满足不断变化的功能需求和性能需求。Fel的执行方式主要依赖于函数,运算符如加减乘除等被视为Fel函数,...

    Fel表达式引擎.pdf

    "Fel表达式引擎" Fel表达式引擎是一种高性能的表达式引擎,支持编译执行和解释执行两种模式。它可以处理海量数据,执行速度基本与Java字节码执行速度一样快。 1. FelEngine的使用 FelEngine是Fel表达式引擎的核心...

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

    DCSoft.Expression是一个开源项目,由大约2500行C#源代码构建,提供了一个功能强大的数值计算表达式引擎。这个引擎允许用户执行高级数学运算,而无需依赖外部解析库如ANTLR。通过这种方式,它实现了轻量级但高效的...

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

    本文将深入探讨如何使用C#实现一个自定义表达式计算引擎,包括词法分析、语法分析以及如何支持自定义关键字和语法规则。这对于在项目中实现灵活的逻辑计算至关重要。 首先,词法分析(Lexical Analysis)是解析器的...

    antlr+stringtemplate示例

    2. **生成解析器和词法分析器**: ANTLR会根据你定义的语法规则生成Java类,这些类可以解析输入的"method chaining"表达式。 3. **解析输入**: 在程序中,使用ANTLR生成的解析器读取和解析用户输入的"method ...

    Regex.zip 如何在C#中構建正則表達式引擎

    在C#中构建正则表达式引擎是一项技术性较强的任务,涉及到编译原理、模式匹配算法等知识。这里,我们将探讨如何实现一个简单的正则表达式解析器,并将其与C#语言结合,创建一个基本的正则表达式引擎。本文将分为以下...

    一个简单java表达式解析的程序

    Java表达式解析是编程中的一个重要概念,特别是在设计编译器、解释器或脚本引擎时。这个程序可能是为了理解并执行简单的数学或逻辑表达式,比如`2 + 3 * (4 - 5)`。在Java中实现这样的解析器,我们需要理解表达式...

    The Definitive ANTLR 4 Reference

    例如,在Twitter中,ANTLR用于搜索引擎查询解析;在Mozilla中,ANTLR用于Rust语言开发;在Salesforce中,ANTLR被用于创建自定义的编程语言。这些应用证明了ANTLR的灵活性和实用性。 #### 关于书评和推荐 本书得到了...

    MVC模板引擎的使用

    4. **自定义语法规则**:Antlr3的强大之处在于可以定义自己的语法规则,这意味着你可以为视图模板创建定制的标记和表达式,以适应特定的应用场景。 5. **性能优化**:由于Antlr3的解析效率高,因此在处理大量模板或...

    C++ 2008 表达式计算

    通常,开发者会通过递归下降解析(Recursive Descent Parsing)或使用编译器构造工具如LLVM或ANTLR来实现。而在C++ 2008年,Spirit库提供了一种更加灵活且易于使用的解决方案。 Spirit库包含了三个主要组件:Spirit...

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

    10. **实践应用**:表达式解析器在许多场景中都很有用,比如命令行解析、SQL查询解析、计算器应用、脚本引擎等。 理解并实现一个表达式解析器是提升编程技能的重要步骤,它涉及到语言理论、编译原理以及对编程语言...

    表达式解析

    - 在动态脚本引擎中,如JavaScript引擎,解析表达式以执行相应的计算或控制流程。 5. **.project文件**: 这通常是Eclipse IDE中的项目配置文件,包含项目的基本信息和构建设置,可能与表达式解析无关,但在开发...

    表达式解析器

    5. 游戏引擎:游戏中的AI系统可能需要解析玩家输入的策略表达式。 五、实例分析 在提供的压缩包中,"Calc"可能是一个简单的表达式解析器的实现。通过阅读和分析源代码,我们可以了解具体的实现细节,例如如何处理...

    smt-antlr4-javascript-parser:该项目在构建时将生成 ANTLR4 JavaScript 解析类

    ANTLR4 提供了强大的语言定义能力,允许开发者精确地描述JavaScript的语法,包括关键字、操作符、注释、表达式等各种语言元素。 在“smt-antlr4-javascript-parser”项目中,可能包含以下组件: 1. 语法规则文件...

    cms自定义模版引擎

    你可以选择使用正则表达式进行初步匹配,或者使用词法分析器和解析器生成器,如ANTLR,来更精确地解析模板。 实现动态数据绑定是模板引擎的关键功能。这意味着你需要设计一种机制,将后台的数据模型与模板中的变量...

    基于Java的表达式语法解析库 parboiled.zip

    Java开发者通常使用JavaCC或ANTLR这样的工具来创建解析器,但Parboiled提供了更加简洁和灵活的API,使得解析规则的编写更加直观。 Parboiled的核心是它的规则定义API。通过这个API,你可以创建一系列规则,每个规则...

    基于java的表达式语法解析库 parboiled.zip

    在Java中,解析表达式是许多应用程序的核心功能,例如脚本引擎、计算工具或复杂数据处理系统。Parboiled是一个强大的、基于Java的表达式语法解析库,它提供了一种高效且灵活的方式来构建自己的解析器,用于解析...

    基于PHP的百度和google搜索引擎源代码PHP版源码.zip

    PHP的DOMDocument和DOMXPath类可用于解析HTML,而正则表达式也可以辅助提取特定格式的数据。 4. **文本处理**:这包括分词、去除停用词、词干提取等。PHP可以借助开源库如PHP-Text-Analysis或自行编写算法实现。 5...

    JWFD工作流嵌入式脚本定义语法文件

    语法文件定义了语言的语法规则,比如变量声明、表达式、控制结构等,而词汇文件则负责识别输入文本中的单词或符号。这些文件通常以.g4扩展名表示,ANTLR会根据这些文件生成解析器和词法分析器的源代码。 在JWFD的...

    moniscript脚本引擎1.0版

    MoniScript的实现结合了这两者,它使用了一个特定的parser generator工具,可能类似于ANTLR或JFlex,来生成词法和语法解析器。这样的设计使得MoniScript能够支持自定义的语法,从而适应各种各样的应用场景。 标签中...

Global site tag (gtag.js) - Google Analytics