我需要你的意见,以便选择生成解析器树(ST)或生成抽象语法树(AST)之间的最佳选择。背景是:
我想解析像C这样的语言(只是C的一个子集,带有一些更改,使其更加面向伪代码),但不是为了在其他输出语言/文件中翻译它,而是为了动画执行它的句子它的执行过程(我使用Qt绘制)。此C子集的一个功能是它启用嵌套范围。我对ST和AST之间选举的疑问来自于符号表。一般的想法是(使用Boost.spirit):
两个推理:
具有控制范围的静态符号表比动态符号表更难设计和使用。静态符号表必须具有每个范围的标识符(例如),并将树的每个节点与每个标识符相关联。动态符号表更容易工作,因为如果我在范围i中,只需要两个“向量”(可能是一个双队列和一个堆栈):
例如,对于范围i:
如果我离开范围i,只需要擦除最后一个整数以及从位置8到结尾的符号。树保持不变。
由于我必须在执行时执行每个句子,因此ST便于执行。
两个问题:
答案 0 :(得分:1)
我认为您正在寻找的是一个抽象语义图(ASG),它代表程序的语义(而不是语法)。你能做的是:
另外,我会说你可以确实构建一个没有太抽象的AST;例如,我目前正在构建自己的脚本语言解释器,AST将包含变量名称(这对调试解析器/解释器以及解析的程序本身也很有用)。