zoukankan      html  css  js  c++  java
  • 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://blog.csdn.net/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    201692日  下午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;

    }

     

    }

     

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/attilax/p/5963307.html
Copyright © 2011-2022 走看看