Если вы всегда хотите, чтобы |
связывался с ближайшим LAMBDA
, это в основном означает, что вы можете иметь только LAMBDA
в предложении LAST |
из match_block
:
non_lambda_expression:
IDENTIFIER
| CONST
;
expression:
non_lambda_expression
| LAMBDA match_block
;
non_lambda_match_block:
pattern '=' non_lambda_expression
| non_lambda_match_block '|' pattern '=' non_lambda_expression
;
match_block:
pattern '=' expression
| non_lambda_match_block '|' pattern '=' expression
;
pattern:
IDENTIFIER
| CONST
;
По сути, вы разделяете expression
и match_block
на две версии - одну, в которой разрешены лямбды, и другую, в которой нет - и используете соответствующую в каждом месте, чтобы избежать неоднозначности.