ROSE 编译器框架/如何创建跨语言翻译器
外观
在本 HOW-TO 中,将介绍生成跨语言翻译器的步骤。我们将使用 Fortran 到 C 的翻译器作为示例。
- 更改输出文件名。后缀名需要使用以下函数更改。
void SgFile::set_unparse_output_filename (std::string unparse_output_filename )
- 更改输出语言类型。
void SgFile::set_outputLanguage(SgFile::outputLanguageOption_enum outputLanguage)
- 将输出设置为仅目标语言。
We use set_C_only for the Fortran to C translation. This process might be optional.
void SgFile::set_C_only(bool C_only)
- 例如,ROSE AST 使用不同的 AST 节点来表示 C 和 Fortran 中的循环。下图显示了不同语言中的相同循环。
- C 使用 SgForStatement 表示 for 循环。
- Fortran 使用 SgFortranDo 表示 do 循环。
- 使用 wholeAST 作为参考来实现翻译函数。
- 从原始 AST 节点复制所需信息,生成新的 AST 节点。
- 删除原始节点,并确保 AST 中的父/子关系设置正确。
- 如果编译器可用以测试输出代码,则运行后端使用后端编译器生成对象。
- 如果目标语言的编译器不可用,则确保可以从测试用例生成输出代码。建议对所有测试输出运行编译测试。