首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用arpeggio实现一个节点转换器

用arpeggio实现一个节点转换器
EN

Stack Overflow用户
提问于 2017-06-19 17:00:32
回答 1查看 208关注 0票数 1

我正在尝试在Arpeggio PEG解析器中实现一个Node Transformer类。但是,不支持复制节点进行修改(例如,深度复制在节点上不起作用)。其主要目标是在小型编程语言中实现预处理和语法糖。

欢迎任何关于如何做到这一点的提示。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-07-04 17:25:25

在Arpeggio中实现树转换的惯用方法是使用visitors

Arpeggio中的

是一种访问者模式,用于语义分析。您编写了一个python类,该类继承了PTNodeVisitor并具有visit_(self,node,children)形式的方法,其中规则名称是来自语法的规则名称。

在语义分析期间,将以深度优先的方式遍历解析树,并为每个节点调用适当的访问者方法,以将其转换为其他形式。然后将结果提供给父节点访问者方法。重复此过程,直到处理完最终的顶级解析树节点(调用其访问者)。顶级节点的结果是语义分析的最终输出。

编辑:不编辑PT节点。而是创建您的对象。这将要求您首先设计您的语言AST模型(元模型),然后在树节点访问期间实例化此模型的元素。

对于复杂的解析树转换,您可以研究textX source code

如果你正在开发一种小型语言,我强烈建议你仔细研究一下textX。与传统的解析技术相比,它的使用要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44626246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档