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构造器相关推荐

  1. Atitti.java exp ast java表达式语法ast构造器

    Atitti.java exp ast java表达式语法ast构造器 /atiplat_cms/src/com/attilax/lang/AstParser.java 原理 分割tokens_sli ...

  2. Java jdt 编辑_使用JDT转java代码为AST

    maven依赖 org.eclipse.jdt org.eclipse.jdt.core 3.13.0 代码: import org.apache.commons.io.FileUtils; impo ...

  3. java fel_Java表达式引擎fel/groovy/expression4j/java脚本引擎的性能对比【原创】

    又是性能对比,最近跟性能较上劲了. 产品中需要用到数学表达式,表达式不复杂,但是对性能要求比较高.选用了一些常用的表达式引擎计算方案,包含:java脚本引擎(javax/script).groovy脚 ...

  4. java juel表达式_activiti 自定义函数解析juel表达式

    activiti是支持juel表达式的,这个也很好用,但实际过程中需要支持类方法及变量. 原来项目中解析juel,这边有自定义一个方法的 代码如下: public String getStringBy ...

  5. 算法笔记_044:表达式计算求值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...

  6. java el表达式 导航规则_javaweb之EL表达式语言

    一.基本语法 EL表达式是一种简洁的数据访问语言. 基本形式:${ var} 访问对象的属性及数组的元素 使用"."号访问对象的属性 ${customer.name} 使用&quo ...

  7. intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用

    intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 2017年12月29日 15:04:15 佛空如水 阅读数:795 报错: 解决: 第 ...

  8. 中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现

    文章目录 中缀表达式转后缀表达式思路 逆波兰表达式计算思路 代码实现 中缀表达式转后缀表达式思路 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将 ...

  9. java list作为参数传递_Java 程序将lambda表达式作为方法参数传递

    Java 程序将lambda表达式作为方法参数传递 在此示例中,我们将学习将lambda表达式作为Java中的方法参数传递. 要理解此示例,您应该了解以下Java编程主题: 示例1:将lambda表达 ...

最新文章

  1. 二分图HK算法[数论+二分图最大独立集]:Lightoj1356
  2. ABP官方文档翻译 9.2 Entity Framework Core
  3. VTK:几何对象之Point
  4. 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  5. 5000元性价比高的笔记本_2018性价比笔记本电脑品牌推荐 5000左右笔记本性价比推荐...
  6. edge linux 下载软件,在Linux上安装edge浏览器
  7. Cortex-M3异常中断及向量表定义
  8. python循环遍历把表写入csv_求教python3.5如何把字典循环写入csv?
  9. java list移除符合条件的元素_从List中移除指定 List 中包含的其所有元素(可选操作)。...
  10. redis 参数配置总结
  11. 双向链表示意图_java双向链表示意图
  12. python爬虫大作业爬多少数据_爬虫大作业
  13. VLD在VS2019中的使用以及应用程序无法正常启动(0xc0150002)
  14. 开发者将《午夜凶铃》与 ARKit 结合,把贞子带到你面前
  15. kettle 提交数据量_kettle大数据量读写mysql性能优化
  16. 设计算法判断链表是否中心对称
  17. python使用OpenCV批量裁剪图片
  18. PS:换背景天空(简单抠图)
  19. 2021-2027全球与中国可待因止疼药市场现状及未来发展趋势
  20. vivado配置EMIO(使用vivado配置XDC文件)

热门文章

  1. dubbo源码解析-spi(二)
  2. input 限制输入
  3. 剑指offer系列48---左旋转字符串
  4. jquery href属性和click事件冲突
  5. HttpUtility.UrlEncode 方法
  6. Axios和Ajax处理后台返回文件流实现文件下载(图片和Excel)
  7. 帆软条件判断是否包含指定字符串
  8. CentOS7中编译安装redis5.0
  9. 使用putty连接本地VirtualBox上的centos7 linux主机
  10. 【转】VS2013动态库文件的创建及其使用详解