1
445141126 2015-09-15 16:48:40 +08:00 1
类似 lint 的功能?
首先要解析 c 文件生成语法树 ast ,根据语法树构造符号表作用域之类的,再分析就好了。 推荐这本《编程语言实现模式》 |
2
445141126 2015-09-15 16:49:26 +08:00 1
python 有 c 代码的解析库 https://github.com/eliben/pycparser
|
3
dimingxuan OP @445141126 是一个简化的 lint ,谢谢提供的资料
|
4
YuJianrong 2015-09-15 22:05:09 +08:00 1
为什么不直接用 ctags ……
|
5
dimingxuan OP @YuJianrong 没用过,能区别出输入输出变量吗?
|
6
dialox 2015-09-15 22:44:04 +08:00 1
用 lex 可以实现
|
7
YuJianrong 2015-09-15 23:55:54 +08:00 1
@dimingxuan 好吧那大概不行……
|
8
exch4nge 2015-09-16 17:58:38 +08:00 1
如果你要有完整支持的话,还是比较恶心的,你得做 preprocessor ,用词法语法分析器(可选 flex/bison (lex/yacc ))分析出 AST ,然后找出所哦有函数定义,做到你要的功能……
想通过简单的方式的话,你得忍受很多特殊情况不支持的问题,可以不用 preprocessor 、语法分析器,只用词法分析器+自己实现的只能满足你的要求的语法分析器来做…… 更想简单更省事的话,可以像楼上说的那样,用 ctags 或 cscope 获取到所有函数定义所在的位置,然后自己去分析出参数名字 |
9
dimingxuan OP @exch4nge 谢谢,看来坑很深啊, preprocessor 做起来挺费劲的吧,没有接触过相关的知识
|