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. configure: error: *** libpopt not found 解决方法

    ubuntu (deb) $ apt-cache search popt|headlibpopt-dev - lib for parsing cmdline parameters - developm ...

  2. Fire

    Fire 分析: 首先,明确题意:b1,b2,--,bn 交换为b2,--,bn,b1,但这并不是意味着只能从b1开始交换,(这点从样例中可以看出),并且也不意味着交换的必须是连续的一串,可以是几个单 ...

  3. 【CronExpression表达式详解和案例】

    1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许 ...

  4. Linux图片批处理

    通过imagemagick的convert命令来处理. 将多个图片横向拼接(宽图): convert +append 1.jpg 2.jpg all.jpg #人为指定顺序 convert +appe ...

  5. 二叉搜索树、B树

    二叉搜索树又叫二叉排序树. B树又可写为B-树,“B-树”种的“-”无区分意义. 此外,还有B+树,B*树.

  6. Mac 识别NTFS移动硬盘

    下载工具 TUXERA NTFS 2014

  7. Maltab命令(随用随更新)

    1.eval() ------ 将括号内的字符串视为语句并运行 比如eval('y1=sin(2)')和语句y1=sin(2)等价 多在循环中使用,可以对多个名字有规则的变量或文件进行操作,比如 fo ...

  8. 强类型DataSet的使用简明教程

    关于弱类型 DataSet的缺点: 无论何时从 DataSet检索值都是以Object类型返回,需要对它进行类型转换: 给其它开发者使用 时无法知道哪些列可用: 运行时才能知道所 有列名,数据绑定麻烦 ...

  9. 使用的组件:Layui

    Layui 经典模块化前端框架 由职业前端倾情打造,面向所有层次的前后端程序猿,中国最容易使用的前端UI解决方案 Layui 出蛋于2016年金秋,是一款带着浓烈情怀的国产前端UI框架,她追求极简,又 ...

  10. 《利用Python进行数据分析》第7章学习笔记

    数据规整化:清理.转换.合并.重塑 合并数据集 pandas.merge pandas.concat combine_first 数据库风格的DataFrame合并 索引上的合并 join()实例方法 ...