scala – 更新不可变AST的最简单方法是什么?
发布时间:2020-12-16 18:15:32 所属栏目:安全 来源:网络整理
导读:在使用宏时,我已经达到了这一点(我一直在努力避免它),我需要在AST中更新那些具有特定条件的节点.例如,假设我想更新每个节点: Literal(Constant(1)) 价值: Literal(Constant(2)) 那些AST节点可以在表达式树中的任何位置,因此我不能使用ad-hoc模式匹配器.显
在使用宏时,我已经达到了这一点(我一直在努力避免它),我需要在AST中更新那些具有特定条件的节点.例如,假设我想更新每个节点:
Literal(Constant(1)) 价值: Literal(Constant(2)) 那些AST节点可以在表达式树中的任何位置,因此我不能使用ad-hoc模式匹配器.显然,我想做的最后一件事是编写一个完整的模式匹配器,它能够覆盖所有的编译器原语.我一直在API搜索,但我的印象是收集和可遍历的家庭等方法不足以满足我的需求,因为他们将树视为线性的东西,我想要整个更新的树作为结果.那么,是否可以以智能方式更新不可变表达式树?为什么在标准API中不存在这样的“更新”操作? 解决方法
以下是在Scala宏中使用AST转换器的示例:
https://github.com/retronym/macrocosm/blob/171be7e/src/main/scala/com/github/retronym/macrocosm/Macrocosm.scala#L129 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |