Atitit dsl对于数组的处理以及main函数的参数赋值

1.1. 词法解析..添加了[] 方括号的解析支持1

1.2. Ast建立.添加了数组参数的支持..使用了递归下降法..getparam use recurs desc meth...  Get arrayParam ya use recdesc meth..2

1.3. Ast解析 的支持4

1.1. 词法解析..添加了[] 方括号的解析支持

public List getTokensV3() {

code_char_arr = code.toCharArray();

for (char c : code_char_arr) {

// get next char,,then change stat

// jude cur char and cur stat...then if or not chage stat

if (c == '[' && !this.curStat.equals("strStart"))

{

this.curStat="sqBrkStart";

Token tk2=new Token("[").setType("spltr");

tokens.add(tk2);

this.curTokenTxt = "";

continue;

}

if (c == ']' && !this.curStat.equals("strStart"))

{

this.curStat="sqBrkEnd";

Token tk2=new Token("]").setType("spltr");

tokens.add(tk2);

this.curTokenTxt = "";

continue;

}

1.2. Ast建立.添加了数组参数的支持..使用了递归下降法..getparam use recurs desc meth...  Get arrayParam ya use recdesc meth..

if (isConstrutsced == false) { // static //first

// new method invoke exp

String className = refx.getClassName(text);

className = javaUtil.clr(className);

mi.Exp = new SimpleName(className); // cls name

mi.Name = refx.getMethodName(text);

isConstrutsced = true;

// param push

List<Expression> params=buildAstV2_params(tokens);

mi.arguments=params;

return mi;

}   //end static

private List<Expression> buildAstV2_params(List<Token> tokens2) {

//List<Expression> li=Lists.newArrayList();

m_index++;

Token cur = tokens.get(m_index);

//build array param

if (cur.getText().equals("[") && cur.getType().equals("spltr"))

{

//params.add(e);

ArrayCreation ac=getArrayCreation();

params.add(ac);

return buildAstV2_params(tokens2);

}

//close param

if (cur.getText().equals(")") && cur.Type.equals("op")) {

//PARAMS close

return  listUtil.clone(params);

}

//add param

if(cur.getText().equals(",") )

return buildAstV2_params(tokens2);

params.add(cur);

return buildAstV2_params(tokens2);

}

private ArrayCreation getArrayCreation() {

//m_index++;

ArrayCreation ac =new ArrayCreation();

ArrayInitializer ai=new ArrayInitializer();

List<Object> params=Lists.newArrayList();

// param push

while (true) {

m_index++;

Tokencur = tokens.get(m_index);

if (cur.getText().equals("]"))

{

//System.out.println("dbg");

}

if (cur.getText().equals("]") && cur.Type.equals("spltr")) {

ai.expressions=params;

ac.optionalInitializer=ai;

return ac;

}

if(cur.getText().equals(","))

continue;

params.add(cur.Text);

if(cur.getType().equals("str"))

ac.arrayType="string";

}

//return null;

}

1.3. Ast解析 的支持

private Object SimpleName_staticProcess(Expression ast) {

MethodInvocation mi = (MethodInvocation) ast;

Expression exp = mi.Exp;

Class<?> threadClazz = null;

if (exp instanceof SimpleName) {

SimpleName sn = (SimpleName) exp;

try {

threadClazz = Class.forName(sn.IDENTIFIER);

} catch (ClassNotFoundException e) {

ExUtil.throwExV2(e);

}

}

mi.arguments=arrParamProcess(mi.arguments);

private List arrParamProcess(List arguments) {

List li=Lists.newArrayList();

for (Object object : arguments) {

if(object instanceof ArrayCreation)

{

Object arr=getArr(( ArrayCreation)object );

li.add(arr);

}

}

return li;

}

private Object getArr(ArrayCreation ac) {

if(ac.arrayType.equals("string"))

{

List<String> li=Lists.newArrayList();

List li_tmp=ac.optionalInitializer.expressions;

for (Object object : li_tmp) {

li.add((String) object);

}

return li.toArray(new String[ li.size()]);

}

return null;

}

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

Atitit dsl对于数组的处理以及main函数的参数赋值的更多相关文章

  1. 指针数组与带参main函数

    (一)指针数组 指针数组就是每一个元素存放一个地址,相当于一个指针变量.如:int *p[4]指针数组比较适合用来指向若干字符串,使得处理字符串更加灵活.例如,现在要将若干字符串按字母顺序由小到大输出 ...

  2. C语言中main函数的参数

    转自:http://blog.csdn.net/cnctloveyu/article/details/3905720 我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上, ...

  3. 关于main函数传参数的问题

    argc是命令行总的参数个数      argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数      命令行后面跟的用户输入的参数,比如:      int   main(int   ...

  4. C++向main函数传递参数的方法(实例已上传至github)

    通常情况下,我们定义的main函数都只有空形参列表: int main(){...} 然而,有时我们确实需要给mian传递实参,一种常见的情况是用户设置一组选项来确定函数所要执行的操作.例如,假定ma ...

  5. 关于main函数的参数问题

    我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这 ...

  6. C++ main函数的参数

    C++的main函数可以没有输入参数,也可以有输入参数,而且只能有两个参数,习惯上coding如下: int main(int argc, char* argv[]) 或者 int main(int ...

  7. C++ main()函数及其参数

    1.首先,想想C/C++在main函数之前和之后会做些什么? 我们看看底层的汇编代码: __start: : init stack; init heap; open stdin; open stdou ...

  8. main函数的参数argc和argv

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/20413773 该篇 ...

  9. 探寻main函数的“标准”写法,以及获取main函数的参数、返回值

    main函数表示法        很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...

随机推荐

  1. Python小练习三

    # 检查用户名和PIN码 database = [ ['], ['], ['], ['] ] username = input('User name:') pin = input('PIN code: ...

  2. kettle(6.0)如何连接远程集群(CDH5.1)?

    最近因为公司业务需要,刚刚接触了kettle.这不看不知道,一看才发现kettle的功能是在是太强大了,让我有种相见恨晚的感觉.由于主要是应用kettle与hadoop集群和hive连接进行数据处理. ...

  3. JavaScript之周道长浅谈变量使用中的坑

    天空一声巨响,道长闪亮登场,飞花落叶,尘土飞扬,此处不应恐慌,用阅读变量的概念来提升气场. 1)变量的声明,使用一个变量之前应该先声明.变量是使用关键字var来声明的,如下: var number; ...

  4. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  5. Asp.Net异步编程-使用了异步,性能就提升了吗?

    Asp.Net异步编程 写在前面的话,很久没有写Blog了,不对,其实一致就没有怎么写过.今天有空,我也来写一篇Blog 随着.Net4.5的推出,一种新的编程方式简化了异步编程,在网上时不时的也看到 ...

  6. linq lamada

    static void Main(string[] args) { List<Customer> cust = new List<Customer>() { ",Ci ...

  7. JQuery按回车提交数据

    引入JQuery文件 <script src="JS/jquery-1.9.1.js" type="text/javascript"></sc ...

  8. torch-ios框架XCODE使用备忘

    1.首先编译框架   ./generate_ios_framework 2.把框架包含进project  在general-link Frameweork and Libraries 加入这个框架,注 ...

  9. 第54讲:Scala中复合类型实战详解

    今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...

  10. javascript、jQuery函数定义和调用方法

    一.javascript 1.var aaa=function(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. 2.function aaa(){...} f ...