加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读