pycparse python的c语法分析器

有时候需要分析一个程序语言,可以根据分析结果AST 树转化成其它语言,或者重构代码的某些部分, 例如最简单的有一个函数addlabel(xxx, type, size);用于在场景中加入一个文字,其中第二个参数是字体,比如之前各个地方使用不同的字体, 现在希望将所有字体统一, 这时候需要分析代码找到所有使用这个函数的位置, 将第二个参数变成另一个字符串。可以整个分析所有代码,但是由于实际使用的语言更类似于javascript 和 c不同,整体分析不现实,首先取出代码中所有包含addlabel的行, 接着对该行进行分析, 替换参数之后,将行重写写回去既可。那么现在就局限在这一行代码上,首先c语言需要将代码写在函数里面, 所以构造一个函数:void main(){ xxx.addlabel(xxx, ???, pppp).adfsf(fd).bfdsd(fds);} 这样一行代码分析的结果是 c语言中的 结构引用和函数调用,  找到结构引用中域名叫做addlabel的函数调用, 修改第二个参数即可。当然语言中也有扩充,比如addlabel 参数 中可能是 [xxx, xxx, xxx] 的数组, 因此需要扩充语法 加入 这种数组。

 

pycparse 使用的ply库, 需要在初始化CParser 是设置 lex_optimizer parse_optimize 为false 关闭 LR table 缓存生成,  修改的代码才会生效。

posted @ 2012-09-19 21:37  liyonghelpme  阅读(762)  评论(0编辑  收藏  举报