Bison 如何将预处理器添加到flex+;野牛装配工?

Bison 如何将预处理器添加到flex+;野牛装配工?,bison,yacc,flex-lexer,dcpu-16,Bison,Yacc,Flex Lexer,Dcpu 16,我用flex+bison编写了一个简单的汇编程序。我想在汇编语言中添加一个预处理器(宏)。这是我第一次尝试使用flex+bison,我不知道该怎么做 添加一个单独的flex+bison实例并完全单独进行预处理是否合适?或者它们是否支持为不同的处理阶段表达不同的结构 如果好奇的话,请访问DCPU-16体系结构。您肯定需要一个单独的解析器。gcc就是这样做的——您可以在预处理之后停止编译(-E,我相信)。从技术上讲,可以作为单个解析器编写,但这会带来更多的麻烦,而且我看不出它有用的具体原因,而将其分

我用flex+bison编写了一个简单的汇编程序。我想在汇编语言中添加一个预处理器(宏)。这是我第一次尝试使用flex+bison,我不知道该怎么做

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


如果好奇的话,请访问DCPU-16体系结构。

您肯定需要一个单独的解析器。gcc就是这样做的——您可以在预处理之后停止编译(
-E
,我相信)。从技术上讲,可以作为单个解析器编写,但这会带来更多的麻烦,而且我看不出它有用的具体原因,而将其分开将允许您在预处理之后停止编译,从而更容易跟踪错误,而不仅仅是预处理器/汇编程序本身,但是任何用它编写的程序。

您肯定需要一个单独的解析器。gcc就是这样做的——您可以在预处理之后停止编译(
-E
,我相信)。从技术上讲,可以作为单个解析器编写,但这会带来更多的麻烦,而且我看不出它有用的具体原因,而将其分开将允许您在预处理之后停止编译,从而更容易跟踪错误,而不仅仅是预处理器/汇编程序本身,但是任何用它编写的程序。

你可以看看我的。我和你的想法一样:P 它支持表达式,但我意识到,如果要支持正向引用,必须使用ast。也许当Notch发现不固定大小的操作码更难成为汇编程序时,他会改变它:)


关于这个主题的一本不错的书是,它展示了如何实现“状态”,也就是说,您可以推送lexer状态并更改文件缓冲区。它显示了一个基本的解析器/lex。这对我的学习很有帮助:)

你可以看看我的。我和你的想法一样:P 它支持表达式,但我意识到,如果要支持正向引用,必须使用ast。也许当Notch发现不固定大小的操作码更难成为汇编程序时,他会改变它:)


关于这个主题的一本不错的书是,它展示了如何实现“状态”,也就是说,您可以推送lexer状态并更改文件缓冲区。它显示了一个基本的解析器/lex。这对我的学习很有帮助:)

你描述了一个理想的效果。我要问的是方法:在flex+bison的一个“实例”中同时表示(并处理解析器回调中的阶段),或者有一个完全独立的flex+bison实例。使用prefix指令,它们不会冲突。我不同意这个答案。它只是在推动一种宗教,一种坏的宗教。文本预处理是软件开发的祸害。gcc就是这样做的,因为gcc必须与一个大脑受损的设计兼容。然而,问题的提出方式确实导致了这个答案;它需要一个“预处理器”。@Kaz可以随意分享另一个建设性的建议,而不仅仅是抨击提供的建议。你描述了一个理想的效果。我要问的是方法:在flex+bison的一个“实例”中同时表示(并处理解析器回调中的阶段),或者有一个完全独立的flex+bison实例。使用prefix指令,它们不会冲突。我不同意这个答案。它只是在推动一种宗教,一种坏的宗教。文本预处理是软件开发的祸害。gcc就是这样做的,因为gcc必须与一个大脑受损的设计兼容。然而,问题的提出方式确实导致了这个答案;它需要一个“预处理器”。@Kaz可以随意分享另一个建设性的建议,而不仅仅是抨击提供的建议。谢谢,我会看一看。是的,如果你想支持包含符号的短文字,你需要一个AST。它们让生活变得更艰难,但这肯定可以被视为0x10c世界挑战的一部分:)谢谢,我去看看。是的,如果你想支持包含符号的短文字,你需要一个AST。它们让生活变得更艰难,但这肯定可以被视为0x10c世界挑战的一部分:)