【发布时间】:2012-07-14 19:34:12
【问题描述】:
我正在尝试开发基于 LLVM 基础架构的编译器。我的语言具有类似 C 的语法,因此我想利用现有的 C 编译器。现在我专注于前端(词法分析,解析),但我对哪个前端是最好的方法感到困惑。 Clang、llvm-gcc 还是传统的 flex/bison 工具?
我对最简单的解决方案特别感兴趣,它可以让我为编译器的后期阶段生成 LLVM IR 代码。
【问题讨论】:
-
如果您自己进行解析和语义分析,生成 LLVM IR 会很容易。如果您不得不借用大部分 C 语法,您可以重用现有的前端,例如 Clang。否则不值得,一旦获得有效的 AST,生成 IR 就很简单了。
-
谢谢。我应该使用什么从 AST 生成 IR?
-
只使用简单的替换规则 - 请参阅 LLVM Kaleidoscope 示例。
-
看这个教程:gnuu.org/2009/09/18/writing-your-own-toy-compiler 它展示了如何使用 bison+flex 创建一个 AST,然后将其导出到 LLVM I.R.
-
感谢您的回答。我的语言从 C 中借鉴了很多,所以我认为最好破解现有的编译器前端(clang)。现在我有兴趣简单地将我自己的关键字添加到词法分析器中,但我对 lex 库中代码的大小感到有点害怕。谁能指出我应该修改哪些文件才能实现这一点。我正在阅读文档,但要适应所有课程需要相当长的时间..
标签: parsing compiler-construction llvm clang llvm-gcc