Итак, я пытаюсь разобрать код, связывающий операторы переключателя, как это
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", но не на first . Почему в мире это будет?