我已经用flex+bison写了一个简单的汇编器。我想在汇编语言中添加一个预处理器(宏)。这是我第一次尝试使用flex+bison,我不知道该怎么做。
添加单独的flex+bison实例并完全单独执行预处理是否合适?或者它们是否支持为处理的不同阶段表达不同的构造?
如果好奇,可以使用the assembler is here,用于DCPU-16体系结构。
发布于 2012-04-14 04:07:56
您肯定需要一个单独的解析器。这就是gcc的做法--你可以在预处理之后停止编译(我相信是-E
)。从技术上讲,使用单个解析器编写解析器在技术上是可行的,但这会带来很多麻烦,而且我也看不出有什么特别的理由可以解释为什么它是有用的,而单独编写解析器将允许您在仅进行预处理之后停止编译,这样不仅可以更容易地跟踪预处理器/汇编器本身中的错误,而且可以更容易地跟踪使用它编写的任何程序中的错误。
发布于 2012-04-23 03:53:55
你可以看看我的。我和你有同样的想法:p You can find it here,它支持表达式,但我意识到如果你想支持前向引用,你必须有一个ast。也许当诺奇发现不固定大小的操作码更难做汇编程序时,他会改变它:)
关于这个主题的一本不错的书是Flex and Bison,它展示了如何做“状态”,也就是你可以推入词法分析器状态并改变文件缓冲区。它展示了一个初步的解析器/lex来解决这个问题。它对我的学习有很大帮助:)
https://stackoverflow.com/questions/10150806
复制