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(){/ ...
随机推荐
- Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
- Win7 64位 VS2015环境编译Libpng
第3次编译Libpng依然想不起任何东西,为了不浪费第4次的时间... http://libmng.com/pub/png/libpng.html http://www.zlib.net/ 解压两个压 ...
- Don't Block on Async Code【转】
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html This is a problem that is brough ...
- viewpage 循环滑动播放图片
一般来说,viewpage 只支持图片的顺序滑动播放,在滑到边界时就再也滑不动了,如果要想继续滑动,只能向两边额外增加一张相片,即把第一张相片的位置放在最后一张图片的后面,给用户的感觉我继续滑就滑到了 ...
- eclipse开发环境搭建
1.eclipse插件OpenExplorer快速打开文件目录 下载地址:https://github.com/samsonw/OpenExplorer/downloads 下载jar包,将jar包放 ...
- 【解题报告】BZOJ2550: [Ctsc2004]公式编辑器
题意:给定一个可视化计算器的操作序列,包括插入数字.字母.运算符.分数.矩阵以及移动光标.矩阵插入行.插入列,输出操作序列结束后的屏显(数学输出). 解法:这题既可以用来提升OI/ACM写大代码模拟题 ...
- torch-ios框架XCODE使用备忘
1.首先编译框架 ./generate_ios_framework 2.把框架包含进project 在general-link Frameweork and Libraries 加入这个框架,注 ...
- linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
- android studio打包出现翻译问题
错误信息: Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" ...
- JavaScript 鼠标划过 播放音乐。
'<EMBED style="FILTER: xray()" src="mp3/'+s+'" width=360 height=30 type=audio ...