当我遇到一个奇怪的解析器错误时,我正在编写一个小帮助函数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
答案 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()
的定义不同。