2012-04-14 48 views
1

我写了一个简单的使用flex + bison的汇编程序。我想将一个预处理器(宏)添加到汇编语言中。这是我第一次尝试使用flex + bison,我不知道如何去做这件事。我应该如何将预处理程序添加到flex + bison汇编程序?

添加一个单独的flex + bison实例并完全单独进行预处理是否合适?或者他们是否支持为不同的处理阶段表达不同的结构?

如果好奇,the assembler is here,为DCPU-16架构。

回答

3

你绝对需要一个单独的解析器。这就是gcc的做法 - 您可以在预处理后停止编译(我相信-E)。从技术角度来看,编写单个解析器是可能的,但它会遇到更多的麻烦,而且我没有看到它有用的特殊原因,而将它们分开将允许您在预处理后停止编译,不仅可以在预处理器/汇编器本身中跟踪错误,而且可以轻松跟踪任何使用它编写的程序。

+0

你描述了一个理想的*效果*。我问的是method:在flex + bison的一个“实例”中表达(并处理解析器回调中的阶段),或者有一个完整的单独的flex + bison实例。 – blueshift 2012-04-14 06:01:12

+2

编写两个单独的词法分析器和分析器。使用prefix指令,它们不会发生冲突。 – Kevin 2012-04-14 14:07:38

+0

谢谢。听起来很合理。 – blueshift 2012-04-14 23:25:35

2

你可以看看我的。我有同样的想法,你有:P You can find it here它支持表达式,但我意识到,如果你想支持向前引用你必须有一个ast。也许当Notch指出,未固定大小的op代码难以制作汇编器,因为他会改变它:)

一本关于这个主题的好书是Flex and Bison它显示了你可以如何做“状态”,你可以推动词法分析器状态并更改文件缓冲区。它显示了一个基本的解析器/ lex。它帮助了我的学习:)

+0

谢谢,我来看看。如果你想支持涉及符号的短文字,你也需要一个AST。他们让生活变得艰难但肯定可以被视为0x10c世界挑战的一部分? :) – blueshift 2012-04-23 04:15:06

相关问题