2

我正在编写一个非常简单和小型的编译器(我自己,我没有做任何课程或任何事情)。我需要帮助来做一些决定。第一步(我相信),我需要了解汇编到代码生成(对吗?)。我正在为它寻找更好的汇编语言。在易于编码/理解良好的后端支持等方面更好。我已经阅读了HOWTO assembly by LPD有几个程序集的地方;但我真的对 AT&T 代码生成很感兴趣。事实上,我对生成 AT&T 代码的 GNU/Linux、GCC 和类似 GCC 的编译器很熟悉。

你还有其他建议吗?如果可能,请解释 AT&T 语法和后端(如果有)的优势。

对于一个以前从未编写过编译器的人来说,如果没有 BISON 或类似的东西就太复杂了?我想通过使用来做到这一点recursive descent parser(例如,DMR 和 gcc 4.6>,而 TCC 确实如此)。另外,因为它是我的第一个编译器(对于非基本类和汇编),我认为在 BISON 的帮助下这样做是错误的。

非常感谢。

4

3 回答 3

2

您是否考虑过将其写入 JVM?它存在于您的平台上,并且(我想?)将比原始机器 ASM 更容易使用。

于 2012-08-26T04:16:33.263 回答
2

首先,AT&T 与英特尔只是语法问题。底层平台功能由硬件架构决定,而不是由语法决定。如果您希望编译器具有可移植性,则需要支持多种架构,但您使用的语法可以保持不变。如果您使用 AT&T 语法,您仍然需要为 x86 和 ARM 生成不同的代码。每种架构只有一种汇编语言。例如,这里先在 Intel 中添加两个数字,然后在 AT&T 中添加:

mov eax, 1
mov ebx, 2
add eax, ebx

和:

movl $1, %eax
movl $2, %ebx
addl %ebx, %eax
于 2012-08-26T04:32:46.183 回答
1

antlr是另一个值得研究的软件包,我发现它比 flex 和 bison 更容易使用。它还带有一个编辑器,使该过程更加容易。您可以使用它为多种语言生成解析器,flex 和 bison 是基于 c/c++ 的。使用 antlr 时,您还可以在一个文件中定义语法和解析规则,使用 flex 和 bison,您必须创建 .l 和 .y/.ypp 文件,当涉及到每个文件中的内容时,这会变得非常混乱。

我对汇编知之甚少,但是Coursera上有一个关于编译器的免费课程,教授有关解析代码并将其编译为汇编的知识。一探究竟

于 2012-08-26T04:27:49.573 回答