我该如何处理具体语法树?
我正在使用 pyPEG 来为一个简单的语法创建解析树。这个树是用列表和元组来表示的。下面是一个例子:
[('command',
[('directives',
[('directive',
[('name', 'retrieve')]),
('directive',
[('name', 'commit')])]),
('filename',
[('name', 'f30502')])])]
我现在的问题是,我该怎么处理这个解析树?我知道这很大程度上取决于我想做什么,但我找不到关于如何使用解析树的信息,只有关于如何创建它们的内容。有没有人能给我一些参考资料的建议?
谢谢你的帮助。
1 个回答
6
CST(具体语法树)在处理上比较复杂,原因有很多。为了更方便地进行后续处理,通常会把它们转换成AST(抽象语法树)。具体的细节可以参考同一篇文章。例如,Python编译器(负责将Python源代码转换成Python虚拟机字节码的部分)在工作时就会把CST转换成AST。
不过,这其实很大程度上取决于你的最终目标。你想解析什么?你打算怎么处理它?如果你是在重新创建一个经典的编译流程,那么转换成AST可能是个不错的选择。否则,你可能会发现CST就足够用了——这完全取决于你的需求。