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. http statusCode(状态码) 200、300、400、500序列

    201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.        200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.        201(已创建) ...

  2. log4j向oracle中插入一条系统当前时间的sql语句

    配置log4j,要向oracle插入一条系统当前时间的sql语句,按网上查找的总是出现各种各样的报错,最后总结出的写法是: ### shezhi### log4j.rootLogger = debug ...

  3. mvc局部视图

    新建一个控制器啊! public ActionResult Index() { ViewBag.title = "this is title!!!"; return View(); ...

  4. (转)Linux的启动过程

    原文链接:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 半年前,我写了<计算机是如何启动的?>,探讨BIOS ...

  5. iOS进阶_地图定位

    一.定位步骤 1.Xcode自带地图,直接先引入头文件 #import <CoreLocation/CoreLocation.h> 2.CLLocation框架中的CLLocationMa ...

  6. Android ------ handler 异步处理消息

    Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发 ...

  7. 解决Win7下VC6.0插入ActiveX控件对话框为空的问题

    在Win7环境下,编写MFC应用程序,Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中Gallery文件为空,也就无法 ...

  8. php图片处理类库 Image

    image 下载地址 https://github.com/Intervention/image.git 下载之后解压 执行composer update 生成 autoload.php文件   该类 ...

  9. 【整理】--linux指令

    1.压缩 解压 .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.g ...

  10. Linux内核--网络栈实现分析(十一)--驱动程序层(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7555870 更多请查看专栏,地 ...