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