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. 【12-JDBC编程】

    JDBC编程 JDBC概述 •通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是使Java语言的巨大 魅力所在.而且由于Java语言的跨平台特性,所以使用JDBC API所编 ...

  2. 搜索引擎 ElasticSearch 之 步步为营2 【基础概念】

    在正式学习 ElasticSearch 之前,首先看一下 ElasticSearch 中的基本概念. 这些概念将在以后的章节中出现多次,所以花15分钟理解一下是非常值得的. 英文好的同学,请直接移步官 ...

  3. 「2014-2-23」Note on Preliminary Introduction to Distributed System

    今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...

  4. hdu acm 1425 sort(哈希表思想)

    sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. P1906联合权值

    描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...

  6. ios申请真机调试( xcode 5)详细解析

    已经有开发证书的直接跳过第一步 第一步:申请"开发证书" 进入苹果开发者99美元账号: 选择:Certificates, Identifiers & Profiles 关于 ...

  7. HDU 1051 Wooden Sticks

    题意: 有 n 根木棒,长度和质量都已经知道,需要一个机器一根一根地处理这些木棒. 该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模板的. 机器需要的准备时间如下: 1.第一根需要1 ...

  8. C++混合编程之idlcpp教程Lua篇(8)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程LuaTutorial6中,同样加入了四个文件:LuaTutori ...

  9. MVC与DWZ整合中部分问题的解决

    1.错误提示距离太远 2.正确与错误时返回JSON(即:如何不出现打开新页显示JSON字串) 3.打开新页后“数据加载中,请稍候”关不掉 4.如何正常的分页,同时如果有查询结果时分页也要有效 5.关闭 ...

  10. 如何把.cs文件编译成DLL文件

    开始--程序--Microsoft Visual Studio.NET 2013--Visual Studio.NET工具,点击其中的"VS2013 开发人员命令提示",就会进入M ...