使用 Bison 的 C 到 Forth 解析器
C to Forth parser using Bison
我正在尝试制作一个 C 到 Forth 的 Bison 解析器。
我已经开发了大部分典型函数,但是我在某些表达式上遇到了一些麻烦。
我正在考虑在解析期间使用 AST,但它比临时缓冲区更难编码。
有人可以推荐一种策略吗?
谢谢
如果您使用每次翻译立即翻译的策略,就不可能重新排序子句。这是一个严重的限制。
有许多常用的技巧可以解决这个问题。一个是提供一种机制,可以将生产的输出保存在临时缓冲区中,以便以后实际输出。
但是,更简洁的解决方案是在解析期间创建一个 AST(抽象语法树),然后在解析完成时遍历 AST。由于此时整个解析树可用,因此您可以轻松地以任意顺序遍历产生式的子节点。
AST 策略更干净地将解析与代码生成分开,从而更容易实现其他处理步骤(漂亮的打印、linting 等)。它还避免了在检测到错误和解析过早终止的情况下产生部分输出的问题。
我正在尝试制作一个 C 到 Forth 的 Bison 解析器。
我已经开发了大部分典型函数,但是我在某些表达式上遇到了一些麻烦。
我正在考虑在解析期间使用 AST,但它比临时缓冲区更难编码。
有人可以推荐一种策略吗?
谢谢
如果您使用每次翻译立即翻译的策略,就不可能重新排序子句。这是一个严重的限制。
有许多常用的技巧可以解决这个问题。一个是提供一种机制,可以将生产的输出保存在临时缓冲区中,以便以后实际输出。
但是,更简洁的解决方案是在解析期间创建一个 AST(抽象语法树),然后在解析完成时遍历 AST。由于此时整个解析树可用,因此您可以轻松地以任意顺序遍历产生式的子节点。
AST 策略更干净地将解析与代码生成分开,从而更容易实现其他处理步骤(漂亮的打印、linting 等)。它还避免了在检测到错误和解析过早终止的情况下产生部分输出的问题。