所以,我正在尝试解析包含这样的 switch 语句的代码
function (a : Boolean) equals (b : Boolean) : Boolean {
switch (a) {
case true:
switch (b) {
case true:
return (true);
case false:
return (false);
}
case false:
switch (b) {
case true:
return (false);
case false:
return (true);
}
}
};
和
switch
: "switch" expression "{" cases "}" {
Switch $2 $4
}
;
cases
: case cases {
($1 : $2)
}
| case {
[$1]
}
;
case
: "case" pattern ":" caseStatements {
Case $2 $4
}
;
caseStatements
: caseStatement ";" caseStatements {
($1 : $3)
}
| caseStatement {
[$1]
}
;
caseStatement
: assignment {
AssignmentCaseStatement $1
}
| return {
ReturnCaseStatement $1
}
| switch {
SwitchCaseStatement $1
}
;
但我不断得到:
certa: user error (../examples/Certa/BooleanLogic.certa:16: Parse error at token 'case')
当我运行生成的解析器时。这里奇怪的是它在“case”关键字的第二个实例上失败,但不是第一个。为什么会这样?