所以,我正在尝试解析包含这样的开关语句的代码
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”关键字的第二个实例上失败了,而不是第一个。那个世界为什么会这样?
答案 0 :(得分:1)
caseStatements的非递归分支不应该包含分号吗?
即
caseStatements
: caseStatement ";" caseStatements {
($1 : $3)
}
| caseStatement ";" {
[$1]
}
;