gpt4 book ai didi

program-transformation - 战略/XT : Understanding the basic of basics

转载 作者:行者123 更新时间:2023-12-04 08:42:40 26 4
gpt4 key购买 nike

我确实尝试过了解 Stratego/XT 的第一步。我在谷歌上搜索了很多,我发现的所有网络资源在开始时似乎都取得了足够大的飞跃,以至于我无法建立联系。让我解释一下。

我是这样理解抽象语法树的:

Minus(Call(Var("f"),[Plus(Var("a"),Int("10"))]),Int("3"))

但似乎(甚至在下一句话中)文档实现了这一飞跃:

LetSplit :
Let([d1, d2 | d*], e*) ->
Let([d1], Let([d2 | d*], e*))

这对我来说毫无意义。有人可以用 LetSplit 解释这里发生了什么吗?

此外,是否有比 Stratego/XT 网站上庞大而复杂的官方“教程”更容易阅读的更好的资源来进一步加深对 Stratego/XT 的理解?

谢谢!

最佳答案

LetSplit :
Let([d1, d2 | d*], e*) ->
Let([d1], Let([d2 | d*], e*))

这是一个名为 LetSplit 的重写规则

它等同于(语法糖)策略:

LetSplit =
?Let([d1, d2 | d*], e*) ; // match
!Let([d1], Let([d2 | d*], e*)) // build

当调用时,然后,当左侧 Let([d1, d2 | d*], e*)(匹配 部分)与 current term,当前项替换为右侧 Let([d1], Let([d2 | d*], e*)) (build 部分)。当左侧不匹配时,规则失败,当前项保持不变。

d1、d2、d*、e* 是绑定(bind)到匹配期间在各自位置找到的子项的项变量。然后在构建部分使用这些名称,在那里它们扩展到它们之前绑定(bind)到的子树。请注意,* 和 ' 确实可能出现在术语变量名称的末尾。单引号没有特殊含义,而*在列表构建操作中有特殊含义(这里不是这种情况)。

语法 [d1, d2 |匹配部分中的 d*] 匹配任何至少包含两个元素的列表。这些元素将绑定(bind)到 d1 和 d2,列表中的其余元素将绑定(bind)到 d*(因此 d* 将是一个列表,并且可能是空列表 [])。

Also, is there a good resource for furthering a solid understanding of Stratego/XT that is easier to read that the garganutan and complex official "tutorial" on the Stratego/XT website?

研究论文。虽然不可否认它们并不是真的更容易阅读,但可以说它们是解释一些更高级概念的唯一地方。

无论如何,请随时在 stackoverflow 上提出更多问题,我会尽力回答他们:-)

关于program-transformation - 战略/XT : Understanding the basic of basics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5768345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com