我们可以通过java访问任何c程序编辑器吗

我们可以通过java访问任何c程序编辑器吗,java,c,linux,unix,parser-generator,Java,C,Linux,Unix,Parser Generator,我需要开发一个c解析器来提取函数名、宏及其定义。我的方法不是从头开始,只是访问任何c程序编辑器,比如geany,它已经解析了函数和宏, 可能这个编辑器的简单api会满足我的所有需求,我已经在谷歌上搜索过了,但大多数解决方案都是使用javacc,所以其他一些解析器 由于这项工作已经由编辑完成,所以很容易,不必费劲地开始构建语法 这种方法很简单,但是找不到任何这样的编辑器,它们有任何API可以通过java访问它。您正在寻找的是现有的 你看, 我已经使用过lex、flex、yacc、bison

我需要开发一个c解析器来提取函数名、宏及其定义。我的方法不是从头开始,只是访问任何c程序编辑器,比如geany,它已经解析了函数和宏, 可能这个编辑器的简单api会满足我的所有需求,我已经在谷歌上搜索过了,但大多数解决方案都是使用javacc,所以其他一些解析器

由于这项工作已经由编辑完成,所以很容易,不必费劲地开始构建语法


这种方法很简单,但是找不到任何这样的编辑器,它们有任何API可以通过java访问它。

您正在寻找的是现有的

你看,


  • 我已经使用过lex、flex、yacc、bison等,但是没有什么能比Perl更好地使用它。此外,Perl正则表达式可以在Java、PHP中使用


    至少使用类似Perl的正则表达式来完成它,而不是用yacc编写,这是很难维护的,用Perl或PHP只需几行就可以轻松完成。

    另一种可能是开发一个GCC插件或扩展,以根据需要定制GCC编译器。(MELT是一种特定于领域的语言,我开发它是为了方便地扩展GCC)

    为您的目的定制GCC的优点是,您将处理GCC的精确内部表示。然而,GCC是复杂的,扩展它需要一些工作(特别是,部分理解复杂的GCC内部表示和过程)

    (对于函数、变量和类是可能的,但对于今天使用GCC4.7的宏可能不行,因为GCC预处理器还没有任何插件挂钩)


    我不确定您是否相信
    geany
    有一个完整的C解析器。我相信它有一些基于regexpr的东西,例如忽略任何预处理器技巧。我认为geany不知道,例如,通过扩展复杂宏(例如某些GTK实现宏)创建的函数或变量。

    有几个IDE或程序员编辑器,带有C解析器,用Java编写。因此,攻击他们不应该太可怕(著名的遗言:-)

    • 其中有几本关于如何编写和使用插件/扩展的书
    仅举两个例子。他们都有活跃的用户社区,可能也能提供帮助

    他们的C编辑器非常精通C语法,因为它们可以折叠函数。Eclipse的C编辑器跟踪定义,我认为NetBeans也跟踪定义


    就我个人而言,如果我需要解析C来获得函数体,并且代码在语法上是正确的,那么使用解析器开发工具并不难。IIRC ANTLR可能已经有了C语法。

    你真的在问Java是否为每个文本编辑器提供了API吗?我想简短的回答是“不”。不,我想他是想问是否至少有一个。我不知道Java,但你可以使用它,我想知道是否至少有一个,正如@twall所说的那样。如果你想要一个可靠的C解析器,这项工作比你想象的要困难得多。我用perl构建了自己的lexer,因为我喜欢正则表达式。但是regex不能解析上下文无关语法。但是@rockyit86的要求可以通过使用Perl来满足。谢谢,但这不是我想要的,我已经在java中使用regualr表达式完成了,但是我想知道任何其他更简单的方法,而不是这个,另一种方法是从我不想得到你的答复的对象文件,是的,我知道这些东西,所以我想通过使用任何其他程序编辑器提供给java的api来获取宏和函数。看起来非常复杂,我会尝试一下,或者用我的黑客方式修复,使用大量代码,这里和那里中断:)确实很复杂,但解析C代码比您想象的要复杂得多。如果不需要成熟的C解析器,您可以接受更简单的方法(比如
    ctags
    正在做的事情)。放宽您的要求取决于您。@rockyit86使用ctags或etags实际上是个好主意,您考虑过吗?