java AST 表达式_Atitti.java exp ast java表达式语法ast构造器
Atitti.java exp ast java表达式语法ast构造器
/atiplat_cms/src/com/attilax/lang/AstParser.java
原理
分割tokens_slice_li
分析splitor,,主要是dot 和end
作者:: ★(attilax)>>>绰号:老哇的爪子(全名::Attilax Akbar Al Rapanui阿提拉克斯阿克巴阿尔拉帕努伊)汉字名:艾龙,EMAIL:1466519819@qq.com
转载请注明来源:http://www.cnblogs.com/attilax/
package com.attilax.lang;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.attilax.fsm.JavaExpFsm;
import com.attilax.json.AtiJson;
import com.attilax.net.UrlEncode_del;
import com.google.common.collect.Lists;
public class AstParser {
public Object obj;
public Object rzt;
public static void main(String[] args) throws UnsupportedEncodingException {
System.out
.println(URLEncoder
.encode("new(com.attilax.util.connReduceDync).set_resfile(userPhone4jobusImp/uc_js.txt).joinNoutV2()",
"utf8"));
String s="new(com.attilax.orm.AtiOrmV2).queryAsRzt(\"select sum(rmb) sumx from recharge where accountId in ( select id as uid from account where promoter=888 ) \")";
s=" new(com.attilax.agent.AgentRechargeService).getSubMemTotalsRecycleByAgentId(\"promoter:$pid$,fld2:v2\")";
s="new(com.attilax.user.AgentService).login(admin,admin)";
System.out.println( new AstParser().getExprsLiAst(s));
//"select sum(rmb) sumx from recharge where accountId in ( select id as uid from account where promoter=888 )"
System.out.println("..");
// System.setProperty("prj","jobus");
// String
// code="new(com.attilax.util.connReduceDync).set_resfile(userPhone4jobusImp/uc_js.txt).joinNoutV2() ".trim();
// Ast astParser = new Ast();
// List ast=astParser.getExprsLiAst(code);
// System.out.println(AtiJson.toJson( astParser.parse(ast)));
//s="login(admin,admin)";
}
// public Object parse;
public Object parse(List ast) {
for (Object object : ast) {
// String exp=(String) object;
parseSingle(object);
}
return this.rzt;
}
private void parseSingle(Object exp) {
Exprs e = (Exprs) (exp);
e.obj = this.obj;
this.rzt = e.calc();
this.obj = e.obj;
}
@SuppressWarnings("all")
public List getExprsLiAst(String code) {
List li = new ArrayList();
List tokens = new JavaExpFsm(code).getTokens();
System.out.println(AtiJson.toJson(tokens));
List tokens_slice_li = Lists.newLinkedList();
for (int i = 0; i < tokens.size(); i++) {
// last
// dot is expres splitor..if cur pos of tokens is dot
if (tokens.get(i).toString().trim().equals(".")
) {
Exprs e = getExprsFrmTokenslice(tokens_slice_li);
li.add(e);
tokens_slice_li = Lists.newLinkedList();
continue;
}
if( i == tokens.size()-1)
{
tokens_slice_li.add((String) tokens.get(i));
Exprs e = getExprsFrmTokenslice(tokens_slice_li);
li.add(e);
break;
}
tokens_slice_li.add((String) tokens.get(i));
}
// Collections.addAll(li, a);
return li;
}
private Exprs getExprsFrmTokenslice(List tokens_slice_li) {
Exprs e = new Exprs();
//if (tokens_slice_li.size() == 5) {
//
//}
//if (tokens_slice_li.size() == 4) {
//e.method = (String) tokens_slice_li.get(0);
//String params = tokens_slice_li.get(2);
e.params = params; //e.parseParams(params.toString());
//e.params = Lists.newLinkedList();
//e.params.add(params);
q716 must as a params..
'new(com.attilax.agent.AgentRechargeService).getSubMemTotalsRecycleByAgentId("promoter:$pid$,fld2:v2")';
//
//}
// last log() mode ,empty param mode
if (tokens_slice_li.size() == 3) {
e.method = (String) tokens_slice_li.get(0);
e.params = Lists.newLinkedList();
}else
{
e.method = (String) tokens_slice_li.get(0);
e.params = parseParams(tokens_slice_li);
}
return e;
}
@Deprecated
public List parseParams(String pa_str) {
String[] a=pa_str.split(",");
List li=new ArrayList();
Collections.addAll(li, a);
return li;
}
/**
attilax 2016年9月2日 下午12:12:01
* @param tokens_slice_li
* @return
*/
public List parseParams(List tokens_slice_li) {
List li=new ArrayList();
for(int i=2;i
{
li.add(tokens_slice_li.get(i));
}
return li;
}
}
java AST 表达式_Atitti.java exp ast java表达式语法ast构造器相关推荐
- Atitti.java exp ast java表达式语法ast构造器
Atitti.java exp ast java表达式语法ast构造器 /atiplat_cms/src/com/attilax/lang/AstParser.java 原理 分割tokens_sli ...
- Java jdt 编辑_使用JDT转java代码为AST
maven依赖 org.eclipse.jdt org.eclipse.jdt.core 3.13.0 代码: import org.apache.commons.io.FileUtils; impo ...
- java fel_Java表达式引擎fel/groovy/expression4j/java脚本引擎的性能对比【原创】
又是性能对比,最近跟性能较上劲了. 产品中需要用到数学表达式,表达式不复杂,但是对性能要求比较高.选用了一些常用的表达式引擎计算方案,包含:java脚本引擎(javax/script).groovy脚 ...
- java juel表达式_activiti 自定义函数解析juel表达式
activiti是支持juel表达式的,这个也很好用,但实际过程中需要支持类方法及变量. 原来项目中解析juel,这边有自定义一个方法的 代码如下: public String getStringBy ...
- 算法笔记_044:表达式计算求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...
- java el表达式 导航规则_javaweb之EL表达式语言
一.基本语法 EL表达式是一种简洁的数据访问语言. 基本形式:${ var} 访问对象的属性及数组的元素 使用"."号访问对象的属性 ${customer.name} 使用&quo ...
- intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用
intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 2017年12月29日 15:04:15 佛空如水 阅读数:795 报错: 解决: 第 ...
- 中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现
文章目录 中缀表达式转后缀表达式思路 逆波兰表达式计算思路 代码实现 中缀表达式转后缀表达式思路 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将 ...
- java list作为参数传递_Java 程序将lambda表达式作为方法参数传递
Java 程序将lambda表达式作为方法参数传递 在此示例中,我们将学习将lambda表达式作为Java中的方法参数传递. 要理解此示例,您应该了解以下Java编程主题: 示例1:将lambda表达 ...
最新文章
- 二分图HK算法[数论+二分图最大独立集]:Lightoj1356
- ABP官方文档翻译 9.2 Entity Framework Core
- VTK:几何对象之Point
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- 5000元性价比高的笔记本_2018性价比笔记本电脑品牌推荐 5000左右笔记本性价比推荐...
- edge linux 下载软件,在Linux上安装edge浏览器
- Cortex-M3异常中断及向量表定义
- python循环遍历把表写入csv_求教python3.5如何把字典循环写入csv?
- java list移除符合条件的元素_从List中移除指定 List 中包含的其所有元素(可选操作)。...
- redis 参数配置总结
- 双向链表示意图_java双向链表示意图
- python爬虫大作业爬多少数据_爬虫大作业
- VLD在VS2019中的使用以及应用程序无法正常启动(0xc0150002)
- 开发者将《午夜凶铃》与 ARKit 结合,把贞子带到你面前
- kettle 提交数据量_kettle大数据量读写mysql性能优化
- 设计算法判断链表是否中心对称
- python使用OpenCV批量裁剪图片
- PS:换背景天空(简单抠图)
- 2021-2027全球与中国可待因止疼药市场现状及未来发展趋势
- vivado配置EMIO(使用vivado配置XDC文件)