解析模式匹配时的错误

时间:2014-02-22 13:15:39

标签: rascal

当我遇到一个奇怪的解析器错误时,我正在编写一个小帮助函数toString(TypeSymbol t, M3 m)

该函数有很多语句,如:

...
}else if(object() := t){
    return "object";
}else if(float() := t){
    return "float";
}else if(double() := t){
    return "double";
...

这些工作正常。 但是,当我为int()void()尝试相同的模式时,编译器会发出错误,特别是=符号。

if(int() := t){}
          ^ Parse error here

1 个答案:

答案 0 :(得分:1)

正如经常发生的那样,我在输入时找到了这个问题的答案。 但是,我认为它对其他人来说很有价值,所以我会发布它。

我在这个答案中得到了模式匹配的语法:https://stackoverflow.com/a/21929342/451847

似乎模式匹配的“正确”方式是使用\为要测试的类型添加前缀。

所以,上面的代码变为:

...
}else if(\object() := t){
    return "object";
}else if(\float() := t){
    return "float";
}else if(\double() := t){
    return "double";
...

\语法适用于大多数情况,但我认为int()void()的定义不同。

相关问题