初次在项目中使用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
相关推荐
Fel Java表达式引擎是一款轻量级且高效的开源表达式计算引擎。它的全称是FastExpressionLanguage,专门设计用于满足不断变化的功能需求和性能需求。Fel的执行方式主要依赖于函数,运算符如加减乘除等被视为Fel函数,...
"Fel表达式引擎" Fel表达式引擎是一种高性能的表达式引擎,支持编译执行和解释执行两种模式。它可以处理海量数据,执行速度基本与Java字节码执行速度一样快。 1. FelEngine的使用 FelEngine是Fel表达式引擎的核心...
DCSoft.Expression是一个开源项目,由大约2500行C#源代码构建,提供了一个功能强大的数值计算表达式引擎。这个引擎允许用户执行高级数学运算,而无需依赖外部解析库如ANTLR。通过这种方式,它实现了轻量级但高效的...
本文将深入探讨如何使用C#实现一个自定义表达式计算引擎,包括词法分析、语法分析以及如何支持自定义关键字和语法规则。这对于在项目中实现灵活的逻辑计算至关重要。 首先,词法分析(Lexical Analysis)是解析器的...
2. **生成解析器和词法分析器**: ANTLR会根据你定义的语法规则生成Java类,这些类可以解析输入的"method chaining"表达式。 3. **解析输入**: 在程序中,使用ANTLR生成的解析器读取和解析用户输入的"method ...
在C#中构建正则表达式引擎是一项技术性较强的任务,涉及到编译原理、模式匹配算法等知识。这里,我们将探讨如何实现一个简单的正则表达式解析器,并将其与C#语言结合,创建一个基本的正则表达式引擎。本文将分为以下...
Java表达式解析是编程中的一个重要概念,特别是在设计编译器、解释器或脚本引擎时。这个程序可能是为了理解并执行简单的数学或逻辑表达式,比如`2 + 3 * (4 - 5)`。在Java中实现这样的解析器,我们需要理解表达式...
例如,在Twitter中,ANTLR用于搜索引擎查询解析;在Mozilla中,ANTLR用于Rust语言开发;在Salesforce中,ANTLR被用于创建自定义的编程语言。这些应用证明了ANTLR的灵活性和实用性。 #### 关于书评和推荐 本书得到了...
4. **自定义语法规则**:Antlr3的强大之处在于可以定义自己的语法规则,这意味着你可以为视图模板创建定制的标记和表达式,以适应特定的应用场景。 5. **性能优化**:由于Antlr3的解析效率高,因此在处理大量模板或...
通常,开发者会通过递归下降解析(Recursive Descent Parsing)或使用编译器构造工具如LLVM或ANTLR来实现。而在C++ 2008年,Spirit库提供了一种更加灵活且易于使用的解决方案。 Spirit库包含了三个主要组件:Spirit...
10. **实践应用**:表达式解析器在许多场景中都很有用,比如命令行解析、SQL查询解析、计算器应用、脚本引擎等。 理解并实现一个表达式解析器是提升编程技能的重要步骤,它涉及到语言理论、编译原理以及对编程语言...
- 在动态脚本引擎中,如JavaScript引擎,解析表达式以执行相应的计算或控制流程。 5. **.project文件**: 这通常是Eclipse IDE中的项目配置文件,包含项目的基本信息和构建设置,可能与表达式解析无关,但在开发...
5. 游戏引擎:游戏中的AI系统可能需要解析玩家输入的策略表达式。 五、实例分析 在提供的压缩包中,"Calc"可能是一个简单的表达式解析器的实现。通过阅读和分析源代码,我们可以了解具体的实现细节,例如如何处理...
ANTLR4 提供了强大的语言定义能力,允许开发者精确地描述JavaScript的语法,包括关键字、操作符、注释、表达式等各种语言元素。 在“smt-antlr4-javascript-parser”项目中,可能包含以下组件: 1. 语法规则文件...
你可以选择使用正则表达式进行初步匹配,或者使用词法分析器和解析器生成器,如ANTLR,来更精确地解析模板。 实现动态数据绑定是模板引擎的关键功能。这意味着你需要设计一种机制,将后台的数据模型与模板中的变量...
Java开发者通常使用JavaCC或ANTLR这样的工具来创建解析器,但Parboiled提供了更加简洁和灵活的API,使得解析规则的编写更加直观。 Parboiled的核心是它的规则定义API。通过这个API,你可以创建一系列规则,每个规则...
在Java中,解析表达式是许多应用程序的核心功能,例如脚本引擎、计算工具或复杂数据处理系统。Parboiled是一个强大的、基于Java的表达式语法解析库,它提供了一种高效且灵活的方式来构建自己的解析器,用于解析...
PHP的DOMDocument和DOMXPath类可用于解析HTML,而正则表达式也可以辅助提取特定格式的数据。 4. **文本处理**:这包括分词、去除停用词、词干提取等。PHP可以借助开源库如PHP-Text-Analysis或自行编写算法实现。 5...
语法文件定义了语言的语法规则,比如变量声明、表达式、控制结构等,而词汇文件则负责识别输入文本中的单词或符号。这些文件通常以.g4扩展名表示,ANTLR会根据这些文件生成解析器和词法分析器的源代码。 在JWFD的...
MoniScript的实现结合了这两者,它使用了一个特定的parser generator工具,可能类似于ANTLR或JFlex,来生成词法和语法解析器。这样的设计使得MoniScript能够支持自定义的语法,从而适应各种各样的应用场景。 标签中...