Java中的C源代码AST解析器

Java中的C源代码AST解析器,java,c,parsing,abstract-syntax-tree,Java,C,Parsing,Abstract Syntax Tree,我正在寻找一个C源代码解析器,它可以从中创建一个全面的AST 最好是一个Java库,我不想在这里使用Python->使用ANTLR并让它基于现有ANTLR语法生成AST可能是最简单的,例如 ANTLR在这里有一个Java API:使用ANTLR并使其基于现有ANTLR语法生成AST可能是最简单的,例如 ANTLR在这里有一个Java API:我们的语言不是Java,肯定不是Python:-}但是为许多真正的C代码方言提供了健壮的解析器。它不仅仅是建造AST;它提供了一个预处理器、符号表、局部和全

我正在寻找一个C源代码解析器,它可以从中创建一个全面的AST


最好是一个Java库,我不想在这里使用Python->

使用ANTLR并让它基于现有ANTLR语法生成AST可能是最简单的,例如


ANTLR在这里有一个Java API:

使用ANTLR并使其基于现有ANTLR语法生成AST可能是最简单的,例如

ANTLR在这里有一个Java API:

我们的语言不是Java,肯定不是Python:-}但是为许多真正的C代码方言提供了健壮的解析器。它不仅仅是建造AST;它提供了一个预处理器、符号表、局部和全局流分析,如果您想对C做任何事情,而不仅仅是使用AST,则需要这些分析

它构建在我们的基础之上,它提供了解析和流分析的基础设施,可以使用模式将转换应用到AST,并且可以重新生成有效的源代码

编辑2015年7月,回应评论:DMS本身是用并行编程语言PARLANSE实现的,PARLANSE在功能上类似于C,但包括细粒度并行结构以及异常处理。DMS提供了一组用于定义语言处理的DSL:一个完全支持Unicode的lexer、用于语法的BNF、用于计算树状分析的属性语法,以及用于模式识别和重写源代码的源代码到源代码转换。

我们的不是Java语言,肯定不是在Python:-}中,而是为许多真正的C代码方言提供了健壮的解析器。它不仅仅是建造AST;它提供了一个预处理器、符号表、局部和全局流分析,如果您想对C做任何事情,而不仅仅是使用AST,则需要这些分析

它构建在我们的基础之上,它提供了解析和流分析的基础设施,可以使用模式将转换应用到AST,并且可以重新生成有效的源代码


编辑2015年7月,回应评论:DMS本身是用并行编程语言PARLANSE实现的,PARLANSE在功能上类似于C,但包括细粒度并行结构以及异常处理。DMS提供了一组用于定义语言处理的DSL:完全支持Unicode的lexer、用于语法的BNF、用于计算树形分析的属性语法,以及用于模式识别和重写源代码的源代码到源代码转换。

该项目有一个用Java编写的C解析器,请参阅my以解决类似问题。

该项目有一个用Java编写的C解析器,请参阅my以解决类似问题。

您可能能够构建一个C解析器;当然,ANTLR在狭义上构建了良好的解析器。但是OP想要的似乎是读真正的C程序的东西。实现这一点的详细工作比您想象的要大得多:预处理器、方言C89、C99、C11、…、供应商变量GCC、MSVC、GreenHills、字符集。你最好得到一个已经完成了所有这些的解析器,而不是自己重新发明它;当然,ANTLR在狭义上构建了良好的解析器。但是OP想要的似乎是读真正的C程序的东西。实现这一点的详细工作比您想象的要大得多:预处理器、方言C89、C99、C11、…、供应商变量GCC、MSVC、GreenHills、字符集。你最好买一个已经做了所有这些的,而不是自己重新发明。这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。@TonyHopkinson:寻找C源代码解析器的哪一部分没有直接回答?回答中的批评在哪里?从顶部看向我,伙计。盖伊还要求使用java,但你们并没有说它内置了什么。内置于我们的。。也让我觉得有点不确定。如果是我的话,我会这样做的,你可能想看看评论。PS我没有投反对票…做得好,甚至有3个这样的问题没有提供答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。@TonyHopkinson:寻找C源代码解析器的哪一部分没有直接回答?回答中的批评在哪里?从顶部看向我,伙计。盖伊还要求使用java,但你们并没有说它内置了什么。内置于我们的。。也让我觉得有点不确定。如果是我的话,我会这样做的,你可能想看看评论。PS我没有投反对票…做得好,甚至还有3票