我正试图制作一个C-to-Forth Bison解析器。
我已经开发了大部分典型的功能,但是我有一些表达方面的麻烦。
我在考虑在解析期间使用AST,但编码比临时缓冲区稍微困难一些。
有人可以推荐一种策略而不是另一种吗?
由于
答案 0 :(得分:2)
如果您使用为每个作品立即生成翻译的策略,则无法重新排序子句。这是一个严重的限制。
有许多常用的黑客可以解决这个问题。一种是提供一种机制,可以将生产的输出保存在临时缓冲区中,以便以后可以实际输出。
但是,更简洁的解决方案是在解析期间创建AST(抽象语法树),然后在解析完成时遍历AST。由于整个解析树在该点可用,因此您可以轻松地以任意顺序遍历生产的子节点。
AST策略更清晰地将解析与代码生成分开,使得更容易实现其他处理步骤(漂亮的打印,linting等等)。它还避免了在检测到错误并且解析过早终止的情况下产生部分输出的问题。