我有多个C源文件和各自的头文件。我试图使用编译器解析这些文件,例如ANTLR。 在ANTLR解析器语法中,您可以使用
定义头文件@parser::includes
{#include"a.h"}
您可以开始解析第一个文件,例如
CommonTree tree = Parser.start("a.c");
并且解析器将解析头文件
a.h
但如果你有多个源文件,如何解析文件,例如b.c,c.c等及其各自的头文件。
答案 0 :(得分:3)
C是要解析的猪 - 令牌的语义类型取决于它被声明为什么。考虑:
T(*b)[4]
如果T是类型名称,那么这是一个变量声明。如果它是一个标识符,那就是一个函数调用。为了解决这个问题,任何期望实际工作的C解析器都必须保持一个完整的类型环境,这意味着它需要是一个令人不愉快的大块C编译器。
有针对C的ANTLR解析器可以正确地使用所有这些东西,但它们并不容易使用,而且我没有任何经验,因此无法在那里发表评论。
相反,你可能想看看使用外部工具将你的C解析为更容易处理的东西。 gcc-xml就是这样的一个;它使用gcc本身来解析源文件,然后吐出更容易处理的XML。