我需要开发一个c解析器来提取函数名,宏及其定义。我的方法不是从头开始,只是访问已经解析函数和宏的任何c程序编辑器,如geany, 可能是一个简单的api,这个编辑器将获得我的所有要求,我已经google了它,但大多数解决方案是使用javacc,所以其他一些解析器......
由于这项工作已经由编辑完成,所以这很容易,而不是从构建语法开始就痛苦。
这种方法很简单,但无法找到任何这样的编辑器,它们可以通过java访问它。
答案 0 :(得分:1)
答案 1 :(得分:0)
我已经使用过lex,flex,yacc,bison等等。但没有什么可以击败Perl做到这一点。而且Perl正则表达式可以在Java,PHP中使用。
至少使用像正则表达式这样的Perl来完成它而不是用yacc编写是非常难以维护的,并且可以在Perl或PHP中的几行中轻松完成。
答案 2 :(得分:0)
另一种可能性是开发GCC插件或MELT扩展,以根据您的需要自定义GCC编译器。 (MELT是我开发的一种特定于领域的语言,可以轻松扩展GCC)。
为您的目的定制GCC的优势在于您将处理GCC的确切内部表示。但是,GCC很复杂,扩展它需要一些工作(特别是,部分理解复杂的GCC内部表示和传递)。
(对于函数,变量和类,可能不适用于GCC 4.7的宏,因为GCC预处理器还没有任何插件挂钩)
我不确定你是否认为geany
有一个完整的C解析器。我相信它有一些基于regexpr的东西,例如忽略任何预处理器技巧。我不认为geany
知道例如通过扩展复杂宏(例如某些GTK实现宏)创建的函数或变量。
答案 3 :(得分:0)
有几个带有C语言分析器的IDE或程序员编辑器,用Java编写。因此,对他们来说不应该太可怕(着名的遗言: - )
仅提两个。他们都有活跃的用户社区,他们也可以提供帮助。
他们的C编辑对C语法有很好的把握,因为它们可以折叠函数。 Eclipse的C编辑器跟踪定义,我认为NetBeans也是如此。
就个人而言,如果我需要解析C来获取函数体,并且代码在语法上是正确的,那么使用解析器开发工具就不会太难了。 IIRC ANTLR可能已经有了C语法。