我正在尝试修改/重构input C源代码。我尝试在输入代码的每一行后面添加一条printf语句。
例如,如果我的输入是-
void foo(){
// Sample input code
int a = 0, b = 0;
a++;
if(a<5)
b++;
b--;
}我想添加语句printf('Hi');,导致-
void foo(){
int a = 0, b = 0;
printf('Hi');
a++;
printf('Hi');
if(a<5){
b++;
printf('Hi');
}
printf('Hi');
b--;
printf('Hi');
}作为初始步骤,我只是简单地尝试声明一个变量test,并尝试将其插入到由随机源代码生成的AST的开头。下面是我参与的python代码,在将AST提取到对象ast之后-
for i in range(0,len(ast.ext)):
## Look for a function named 'foo'
if(type(ast.ext[i]) == c_ast.FuncDef and ast.ext[i].decl.name == 'foo'):
## Store the list of AST node objects in functionBody
functionBody = ast.ext[i].body
## Create a Decl object for the variable test
id_obj = c_ast.ID('test')
identifier_obj = c_ast.IdentifierType(['int'])
typedecl_obj = c_ast.TypeDecl(id_obj.name,[],identifier_obj)
decl_obj = c_ast.Decl(id_obj.name,[],[],[],typedecl_obj,[],[])
## Append the object to a list.
## Concatenate to a copy of existing list of AST objects
lst1 = []
lst1.append(decl_obj)
lst2 = []
lst2 = copy.deepcopy(functionBody.block_items)
lst3 = []
lst3 = lst1+lst2
## Create a modified AST and print content
functionBody1 = c_ast.Compound(lst3)
functionBody1.show()每当我尝试使用它的show( )方法时,我都会发现结果结构functionBody1中没有任何变化,并且也得到了以下错误。
'list' object has no attribute 'show'你知道我要偏离正轨了吗?
谢谢
发布于 2012-06-10 08:38:03
我发现有三个地方你正在传递一个列表,而你本应该一个都没有传递。
## Create a Decl object for the variable test
id_obj = c_ast.ID('test')
identifier_obj = c_ast.IdentifierType(['int'])
typedecl_obj = c_ast.TypeDecl(id_obj.name,None,identifier_obj)
decl_obj = c_ast.Decl(id_obj.name,[],[],[],typedecl_obj,None,None)我对此并不是很熟悉,因为我还在学习pycparser,但这一更改会为我修复您的回溯。
https://stackoverflow.com/questions/10936782
复制相似问题