【问题标题】:Parsing multiple C source files解析多个 C 源文件
【发布时间】:2011-03-07 07:51:25
【问题描述】:

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

@parser::includes
{#include"a.h"}

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

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

解析器会解析头文件

a.h 

但是如果您有多个源文件,例如如何解析文件b.c, c.c 等等,以及它们各自的头文件。

【问题讨论】:

  • 你大错特错了。您放入@parser::includes 部分的内容只会导致这些语句出现在您生成的解析器的源文件中。您的解析器绝不会解析这些头文件。
  • 顺便说一句,你和stackoverflow.com/users/628127/user628127不是同一个用户吗?
  • @Bart 感谢您的更正。
  • 仍然没有回答我的问题。
  • 我建议您先学习 ANTLR,然后再继续。至少它的基础知识。现在就好像你走进了一台你以前从未操作过的机器的驾驶舱,开始按下按钮和拉动杠杆:它不会带来任何好处。

标签: c parsing antlr


【解决方案1】:

C 是一头需要解析的猪——标记的语义类型取决于它被声明为什么。考虑:

T(*b)[4]

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

有 C 语言的 ANTLR 解析器可以正确处理所有这些内容,但它们使用起来并不简单,而且我对它们没有任何经验,因此无法在那里发表评论。

相反,您可能想看看使用外部工具将您的 C 解析为更容易处理的东西。 gcc-xml 就是其中之一;它使用 gcc 本身来解析源文件,然后生成更易于处理的 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2020-04-09
    • 2014-11-30
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多