想实现 c 语言分析的功能,请教各位

2015-09-15 16:34:13 +08:00
 dimingxuan
想通过简单的方式,获取 c 文件中函数的输入输出变量,想请教一下有没有什么路径,或者现成的工具包
3506 次点击
所在节点    Python
9 条回复
445141126
2015-09-15 16:48:40 +08:00
类似 lint 的功能?
首先要解析 c 文件生成语法树 ast ,根据语法树构造符号表作用域之类的,再分析就好了。
推荐这本《编程语言实现模式》
445141126
2015-09-15 16:49:26 +08:00
python 有 c 代码的解析库 https://github.com/eliben/pycparser
dimingxuan
2015-09-15 17:26:48 +08:00
@445141126 是一个简化的 lint ,谢谢提供的资料
YuJianrong
2015-09-15 22:05:09 +08:00
为什么不直接用 ctags ……
dimingxuan
2015-09-15 22:07:47 +08:00
@YuJianrong 没用过,能区别出输入输出变量吗?
dialox
2015-09-15 22:44:04 +08:00
用 lex 可以实现
YuJianrong
2015-09-15 23:55:54 +08:00
@dimingxuan 好吧那大概不行……
exch4nge
2015-09-16 17:58:38 +08:00
如果你要有完整支持的话,还是比较恶心的,你得做 preprocessor ,用词法语法分析器(可选 flex/bison (lex/yacc ))分析出 AST ,然后找出所哦有函数定义,做到你要的功能……

想通过简单的方式的话,你得忍受很多特殊情况不支持的问题,可以不用 preprocessor 、语法分析器,只用词法分析器+自己实现的只能满足你的要求的语法分析器来做……

更想简单更省事的话,可以像楼上说的那样,用 ctags 或 cscope 获取到所有函数定义所在的位置,然后自己去分析出参数名字
dimingxuan
2015-09-16 22:10:01 +08:00
@exch4nge 谢谢,看来坑很深啊, preprocessor 做起来挺费劲的吧,没有接触过相关的知识

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX