使用Bison的C-to-Forth解析器

使用Bison的C-to-Forth解析器,c,parsing,bison,yacc,forth,C,Parsing,Bison,Yacc,Forth,我正在尝试制作一个C-to-Forth Bison解析器 我已经开发了大多数典型函数,但在某些表达式上有一些问题 我曾考虑在解析过程中使用AST,但它比临时缓冲区更难编码 有人能推荐一种策略而不是另一种吗 谢谢如果您使用为每一个产品立即生成翻译的策略,那么就不可能对子句进行重新排序。这是一个严重的限制 有许多常用的黑客可以绕过这个问题。一种是提供一种机制,使生产的输出可以保存在临时缓冲区中,以便以后可以实际输出 但是,更干净的解决方案是在解析过程中创建一个AST(抽象语法树),然后在解析完成后遍

我正在尝试制作一个C-to-Forth Bison解析器

我已经开发了大多数典型函数,但在某些表达式上有一些问题

我曾考虑在解析过程中使用AST,但它比临时缓冲区更难编码

有人能推荐一种策略而不是另一种吗


谢谢

如果您使用为每一个产品立即生成翻译的策略,那么就不可能对子句进行重新排序。这是一个严重的限制

有许多常用的黑客可以绕过这个问题。一种是提供一种机制,使生产的输出可以保存在临时缓冲区中,以便以后可以实际输出

但是,更干净的解决方案是在解析过程中创建一个AST(抽象语法树),然后在解析完成后遍历AST。由于此时可以使用整个解析树,因此可以轻松地按任意顺序遍历产品的子节点


AST策略更清晰地将解析与代码生成分开,从而更容易实现其他处理步骤(漂亮打印、linting等)。它还避免了在检测到错误并提前终止解析时生成部分输出的问题。

I最终由临时缓冲区决定。谢谢