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(){/ ...
随机推荐
- 上传App Store成功后,无法构建版本解决方法
最近iOS10出来了,Xcode也跟着升级到了8,想着App做个更新,于是修改好了代码打算上传新包,无奈总是发现构建不了新版本.这种情况是因为苹果更重视用户的隐私,知道原因就能想到对策了,就是在pli ...
- ROS BY EXAMPLE 1 -- 环境设置与安装
rbx1 package 的环境设置: sudo apt-get install ros-indigo-turtlebot-bringup \ ros-indigo-turtlebot-create- ...
- Document-对象属性和常用的对象方法
Document-对象属性和常用的对象方法 对象属性 document.title //设置文档标题等价于HTML的title标签 document ...
- PostMan插件安装
一直没装上postman,今天运气好,竟装上了 给大家show一下吧,也希望大家跟我一样走弯路甚至于走不过去!:) 1.下载Postman_v4.1.3.rar,这个是我测试验证并打包的: 加QQ群: ...
- 第十四章:降维:奇异值分解SVD
- 个人博客作业week2——代码复审
1.代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读 ...
- IQueryable<T> 与 ObjectQuery<T> 差异
命名空间:System.Data.Objects程序集: System.Data.Entity(在 System.Data.Entity.dll 中)public class ObjectQuery ...
- oracle入门必备
//................创建表空间 \ 赋予角色 \ 创建数据表 \ 插入数据 \ 创建序列 \ 添加注释 ........................... --创 ...
- 嵌入式linux开发环境构建
2.1硬件环境构建 2.1.1主机与目标板结合的交叉开发模式 在主机上编辑.编译软件,然后再目标办上运行.验证程序. 对于S3C2440.S3C2410开发板,进行嵌入式Linux开发时一般可以分为以 ...
- VIM使用(二) 浏览内核源代码
为了实现类似SourceInsight功能,通过VIM+Ctags+Cscope+Taglist+Source Explore +NERD Tree实现. 一, 安装插件 1)安装Ctags 和Csc ...