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<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构造器的更多相关文章
- 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 ...
- 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 ...
- atitit..sql update语法的词法分析,与语法ast构建
atitit..sql update语法的词法分析,与语法ast构建 1. 要使用sql udpate语法的dsl ,需要写个解释器.. 1 2. 词法分析的实现 1 2.1. 扫描器的实现 SqlU ...
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- Lambda 表达式,Java中应用Lambda 表达式
一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...
- Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】
原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...
- Java精选笔记_EL表达式
EL表达式 初始EL EL是一种可以简化JSP页面的表达式,EL表达式的语法非常简单都是以"${"符号开始,以"}"符号结束的 EL表达式是一种简单的数据&qu ...
- 【Java基础】Java中的语法糖
目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...
- java系统化基础-day01-基础语法知识
1.学前必看 该课程将系统化的讲解java基础,但是该课程并不适合零基础的学员,因为在整个java学习体系中我们是按照实际生产设计, 主体思路是以完成某个业务为主线,用到什么技术就学什么技术,即带着问 ...
随机推荐
- mybatis(三)懒加载
懒加载的好处: 所谓懒加载(lazy)就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为 ...
- nodejs--偏函数
偏函数的例子,解释--假设有一个参数或变量已经预置的函数A,我们通过调用A来产生一个新的函数B,函数B就是我们说的偏函数 偏函数解决这样的问题:如果我们有函数是多个参数的,我们希望能固定其中某几个参数 ...
- 使用Intellij idea开发
使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 使用IntelliJ IDEA开发SpringMVC网站 ...
- H5-表格、表单
一.表格 1.表格标签 a.table 表格 b.thead 表格头 c.tbody 表格主体 d.tr 表格行 e.th 元素定义表头 f.td 元素定义表格单元 2.表格样式重置 a.table{ ...
- 对CLR基本原理概念&垃圾回收机制的简单理解
前言,之前有说过C语言的函数&变量的一些基本概念,说得可能不是很好,先也把C#的.里相关的也说下,已成一统. 而说函数变量,其实主要就是GC,而GC又是CLR的主要内容,故就有了此文. CLR ...
- 数据库(表)的逻辑备份与恢复<四>
数据库(表)的逻辑备份与恢复 介绍 逻辑备份是指使用工具 export 将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被误操作而损坏后使用 工具 import 利用备份的文件把数 ...
- Visual studio 非常好的插件
1. Productive power tools2015 2. Visual studio spell checker
- POI 读取word (word 2003 和 word 2007) (转)
最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...
- sublime text 也能矩形选择
原来用editplus,但发现sublime text后便果断选择这个,她真的是很完美,但有一点就是不能像editplus一样矩形选择(Ctrl+鼠标左键这我知道,但感觉很麻烦)而感到小小的不爽... ...
- 冒泡排序优化JAVA
本文对传统的冒泡排序进行了一些优化,减少了循环次数. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , ...