我正在尝试在Arpeggio PEG解析器中实现Node Transformer类。但是,不支持复制节点进行修改(例如,深层复制不适用于节点)。主要目标是用小编程语言实现预处理和语法糖。
欢迎任何关于如何做到这一点的提示
谢谢!
答案 0 :(得分:0)
在Arpeggio中实现树转换的惯用方法是使用visitors。
在琶音中,访客模式用于语义分析。你编写了一个继承PTNodeVisitor的python类,并且有一个形式为visit_(self,node,children)的方法,其中规则名称是语法中的规则名称。
在语义分析期间,以深度优先的方式行走解析树,并且对于每个节点,调用适当的访问者方法以将其转换为其他形式。然后将结果馈送到父节点访问者方法。重复此过程,直到处理完最终的顶级解析树节点(调用其访问者)。顶级节点的结果是语义分析的最终输出。
编辑:不要编辑PT节点。改为创建对象。这将要求您首先设计语言AST模型(元模型),然后在树节点访问期间实例化此模型的元素。
对于解析树的复杂转换,您可以调查textX source code。
如果您正在开发一种小语言,我强烈建议您仔细查看textX。与传统的解析技术相比,它更容易使用。