解析多个C源文件

时间:2011-03-07 07:51:25

标签: c parsing antlr

我有多个C源文件和各自的头文件。我试图使用编译器解析这些文件,例如ANTLR。 在ANTLR解析器语法中,您可以使用

定义头文件
@parser::includes
{#include"a.h"}

您可以开始解析第一个文件,例如

CommonTree tree = Parser.start("a.c"); 

并且解析器将解析头文件

a.h 

但如果你有多个源文件,如何解析文件,例如b.c,c.c等及其各自的头文件。

1 个答案:

答案 0 :(得分:3)

C是要解析的猪 - 令牌的语义类型取决于它被声明为什么。考虑:

T(*b)[4]

如果T是类型名称,那么这是一个变量声明。如果它是一个标识符,那就是一个函数调用。为了解决这个问题,任何期望实际工作的C解析器都必须保持一个完整的类型环境,这意味着它需要是一个令人不愉快的大块C编译器。

有针对C的ANTLR解析器可以正确地使用所有这些东西,但它们并不容易使用,而且我没有任何经验,因此无法在那里发表评论。

相反,你可能想看看使用外部工具将你的C解析为更容易处理的东西。 gcc-xml就是这样的一个;它使用gcc本身来解析源文件,然后吐出更容易处理的XML。