【发布时间】:2015-05-12 10:08:01
【问题描述】:
我正在尝试制作一个 C-to-Forth Bison 解析器。
大部分典型的函数我都开发过了,但是有些表达有点麻烦。
我曾考虑在解析过程中使用 AST,但它比临时缓冲区更难编码。
谁能推荐一种策略而不是另一种策略?
谢谢
【问题讨论】:
标签: c parsing bison yacc forth
我正在尝试制作一个 C-to-Forth Bison 解析器。
大部分典型的函数我都开发过了,但是有些表达有点麻烦。
我曾考虑在解析过程中使用 AST,但它比临时缓冲区更难编码。
谁能推荐一种策略而不是另一种策略?
谢谢
【问题讨论】:
标签: c parsing bison yacc forth
如果你对每个产生式使用立即产生翻译的策略,就不可能重新排序子句。这是一个严重的限制。
有许多常用的技巧来解决这个问题。一种是提供一种机制,可以将生产的输出保存在临时缓冲区中,以便以后实际输出。
但是,更简洁的解决方案是在解析期间创建一个 AST(抽象语法树),然后在解析完成时遍历 AST。由于此时整个解析树都可用,因此您可以轻松地以任意顺序遍历产生式的子节点。
AST 策略更清晰地将解析与代码生成分开,从而更容易实现其他处理步骤(漂亮打印、linting 等)。也避免了在检测到错误而提前终止解析的情况下产生部分输出的问题。
【讨论】: