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<String> 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<String> 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<String> tokens_slice_li) {

List    li=new ArrayList();

for(int i=2;i<tokens_slice_li.size()-1;i++)

{

li.add(tokens_slice_li.get(i));

}

return li;

}

}

Atitti.java exp ast java表达式语法ast构造器的更多相关文章

  1. Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python

    Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 ...

  2. Atitit. 构造ast 语法树的总结attilax oao 1. Ast结构树形12. ast view (自是个160k的jar )22.1. 多条语句ast结构22.2. 变量定义 int b,c; 的ast结构22.3. 方法调用meth1(a=1,b=2,c=3);  的ast结构23. 误解的问题33.1. 语法书子能是个二叉树,实际上多叉树越好..33.2. 非要不个ast放到个s

    Atitit. 构造ast 语法树的总结attilax oao 1. Ast结构树形1 2. ast view (自是个160k的jar )2 2.1. 多条语句ast结构2 2.2. 变量定义 in ...

  3. atitit..sql update语法的词法分析,与语法ast构建

    atitit..sql update语法的词法分析,与语法ast构建 1. 要使用sql udpate语法的dsl ,需要写个解释器.. 1 2. 词法分析的实现 1 2.1. 扫描器的实现 SqlU ...

  4. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  5. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  6. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  7. Java精选笔记_EL表达式

    EL表达式 初始EL EL是一种可以简化JSP页面的表达式,EL表达式的语法非常简单都是以"${"符号开始,以"}"符号结束的 EL表达式是一种简单的数据&qu ...

  8. 【Java基础】Java中的语法糖

    目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

  9. java系统化基础-day01-基础语法知识

    1.学前必看 该课程将系统化的讲解java基础,但是该课程并不适合零基础的学员,因为在整个java学习体系中我们是按照实际生产设计, 主体思路是以完成某个业务为主线,用到什么技术就学什么技术,即带着问 ...

随机推荐

  1. Appium学习路-打包apk和ipa篇

    间隔这么长时间再去写Appium的学习篇是有原因的,因为在想要用appium测试ios时,发现appium只能测试debug版本的ipa包.然后就需要自己去学习打包了啊.然后就对xcode各种不了解, ...

  2. hibernate学习(设计多对多 关系 映射)

    // package org.crazy.app.domain; import java.util.HashSet; import java.util.Set; import javax.persis ...

  3. oracle中rownum和rowid的区别

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  4. P2001xor-sigma 字典树,然而好坑

    https://vijos.org/p/2001 设perXor[i]表示1---i的前缀异或值. 那么要得到某一段的异或值,只需要perXor[j] ^ perXor[i - 1] 那么我们把per ...

  5. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. MCS-51系列特殊功能寄存器(摘抄)

    1. P0 (80H) P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八 ...

  7. LeetCode OJ 150. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  8. Linux下守护进程初探

    守护进程一直后台运行,与终端脱离,一般负责周期性地执行系统任务,服务器应用一般以守护进程进行运行.实现一个守护进程主要分为5部: 1.脱离父进程 2.setsid(可以选择再次fork) 3.umas ...

  9. 链接,光标,DHTML,缩放

    18.1css中链接的使用超链接伪类属性:a:link 表示该链接文字尚未被点选a:visited 表示该链接文字已被点选过a:active 表示该链接文字正被点选,但未被放开a:hover 表示当鼠 ...

  10. Java范型随笔

    最近在帝都好无聊啊, 排遣寂寞就只有让自己不要停下来,不断的思考了 QWQ; 最近做ndk, java有点忘了,突然看到了一些java范型方面的问题, 踌躇了一会, 想着想着,决定还是写个随笔记录下来 ...