使用匿名变量匹配Type Labeled模式匹配中的节点类型

时间:2014-12-06 18:38:09

标签: rascal

我想知道是否可以在此处使用匿名变量来匹配节点的类型。例如来自http://tutor.rascal-mpl.org/Rascal/Expressions/Values/Location/Location.html#/Rascal/Patterns/Abstract/TypedLabelled/TypedLabelled.html):

case Exp e:_(_,_): println("And I found an Exp <e>");

将匹配添加和减去Exp节点。我已经尝试过这样的事情,但没有取得任何成功。

(道歉,在我看到ask.rascal的链接之前,我在网站的评论部分发布了这个)

2 个答案:

答案 0 :(得分:3)

基于戴维的答案,如果您只想匹配带有两个参数的构造函数,您可以执行类似的操作:

rascal>data D = d1(int n) | d2(int n, int m) | d3(int n,int m);
ok

rascal>D d: str s(_,_) := d2(3,4);
bool: true

rascal>D d: str s(_,_) := d1(3);
bool: false

通常在此表单的匹配项中,您将使用构造函数名称。使用str s强制将其作为通用节点匹配,其中节点作为节点名称(字符串,此处为构造函数名称)和节点参数(此处,我们假设两个参数)给出。如果存在大量这些类型的匹配,这可能很有用,但我建议您单独编写它们。

答案 1 :(得分:1)

case Exp e: println(e);应该这样做