有时候须要分析一个程序语言,能够根据分析结果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] 的数组, 所以须要扩充语法 加入 这种数组。javascript
pycparse 使用的ply库, 须要在初始化CParser 是设置 lex_optimizer parse_optimize 为false 关闭 LR table 缓存生成, 修改的代码才会生效。java