Atitit dsl对于数组的处理以及main函数的参数赋值
Atitit dsl对于数组的处理以及main函数的参数赋值
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函数的参数赋值的更多相关文章
- 指针数组与带参main函数
(一)指针数组 指针数组就是每一个元素存放一个地址,相当于一个指针变量.如:int *p[4]指针数组比较适合用来指向若干字符串,使得处理字符串更加灵活.例如,现在要将若干字符串按字母顺序由小到大输出 ...
- C语言中main函数的参数
转自:http://blog.csdn.net/cnctloveyu/article/details/3905720 我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上, ...
- 关于main函数传参数的问题
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int ...
- C++向main函数传递参数的方法(实例已上传至github)
通常情况下,我们定义的main函数都只有空形参列表: int main(){...} 然而,有时我们确实需要给mian传递实参,一种常见的情况是用户设置一组选项来确定函数所要执行的操作.例如,假定ma ...
- 关于main函数的参数问题
我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这 ...
- C++ main函数的参数
C++的main函数可以没有输入参数,也可以有输入参数,而且只能有两个参数,习惯上coding如下: int main(int argc, char* argv[]) 或者 int main(int ...
- C++ main()函数及其参数
1.首先,想想C/C++在main函数之前和之后会做些什么? 我们看看底层的汇编代码: __start: : init stack; init heap; open stdin; open stdou ...
- main函数的参数argc和argv
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/20413773 该篇 ...
- 探寻main函数的“标准”写法,以及获取main函数的参数、返回值
main函数表示法 很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...
随机推荐
- ros机器人开发概述
1. ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...
- 记录Python学习中的几个小问题
记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...
- javaWeb开发小工具--MyCommonUtils
MyCommonUtils 参考一些资料,写了这个工具类.在这个工具类中,主要实现了2个方法: 1.生成随机的序列号 uuid(): 2.将Map中的数据封装到javaBean对象中toBean(Ma ...
- VS2013 密钥 – 所有版本(Visual Studio Ultimate,Premium,Professional,TFS)
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...
- 第十四章:降维:奇异值分解SVD
- loadrunner监控linux服务器
参考http://www.cnblogs.com/yangxia-test/archive/2012/11/27/2790771.html http://www.cnblogs.com/candle8 ...
- 【九度OJ】题目1202:排序
题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据,将排序后 ...
- git svn clone时间估算
处理器: Intel(R) Xeon(R) CPU E5-2620 @2.00GHz 2.00Ghz 内存:32.0 GB 操作系统: Windows Server 2008 R2 Enterpris ...
- html入门问题_2016-10-29
在mac机器上,用Safari打开html文件 1. 如果html里有中文,则在<head><meta http-equiv="Content-Type" con ...
- 使用.net Reflector手动修改单个dll文件
在项目中修改bug会存才版本混乱的问题,加上dll中的依赖项目比较多,想要修改单个dll文件中的少量代码是很麻烦的. 可以使用Reflector和Reflexil可以手动修改单个dll文件,我使用的是 ...