跳转至内容

ROSE 编译器框架/概览

来自维基教科书,开放的书籍,开放的世界

了解 ROSE 是什么至关重要,这样您就可以决定它是否可以帮助您解决问题。

什么是 ROSE

[编辑 | 编辑源代码]

ROSE 是一个库,为用户提供访问编译器技术的途径,这些技术以前对于非专家来说是不可获得的。

什么是编译器技术?编译器是将源代码转换为机器二进制文件的复杂软件。编译器开发人员已经创建了强大的技术来解析、分析、转换和优化输入源代码。

传统的编译器,如 GCC,使用这些技术,但它们基本上对用户不可用。然而,即使用户在 gcc 中拥有这些功能,评估结果也会非常困难。用户输入源代码,编译器输出机器代码。用户可以访问自己的代码,也许还可以访问汇编级别的代码生成,但比较这两个非常困难,因为涉及的代码生成不是为了清晰度,而是为了编译器开发人员的需要。

但是,如果编译器返回转换后更改的忠实源代码表示呢?将原始源代码转换为转换后的源代码。一个源到源编译器。

ROSE 是一个源到源编译器。

ROSE 为用户提供了编译器技术的库。它还为用户提供了访问源代码分析构建块的途径,允许用户创建自己的编译器、分析器、翻译器、预处理器等。

如果您正在寻找这种工具,请继续深入维基了解更多关于 ROSE 的信息。

如何使用它

[编辑 | 编辑源代码]

ROSE 的一个典型用例是

  • 输入:您有源代码作为输入,例如 myfile.c
  • 您的基于 ROSE 的翻译器/分析器/编译器/工具:myTranslator.cpp
    • 首先,您调用 ROSE 提供的 frontend() 函数来生成输入的中间表示(IR 或抽象语法树/AST 以准确地讲)
    • 然后,您调用并组合 ROSE 提供的其他 AST 分析/转换/优化函数来分析或转换 AST
    • 最后,您调用 ROSE 提供的 backend() 函数来将分析和/或转换后的 AST 反解析为源代码,并可以选择调用后端编译器(例如 GCC)来生成目标代码。
  • 输出:反解析后的源代码,命名为 rose_myfile.c,以及可选地从它生成的obj文件 myfile.o

要成为一名高效的 ROSE 开发人员,您需要

  • 熟悉输入代码的 AST,因为您必须编写代码来遍历树、找到您感兴趣的内容,并最终对 AST 进行分析和转换
  • 熟悉 ROSE 提供的函数。您知道的函数越多,您完成工作的速度就越快,因为您可以尽可能避免重复造轮子。

了解了全局概念后,您可以阅读 ROSE 的文档,了解如何使用它。

华夏公益教科书