Сами по себе вышеприведенные правила не вызывают никаких проблем;yacc / bison может справиться с ними просто без сдвига / уменьшения или уменьшения / уменьшения конфликтов.Проблемы могут возникнуть, если start
также является допустимым expression
.Если это так, язык неоднозначен - когда у вас есть start
в пределах start
, WHERE может быть связан с любым из них.Например, вход
START RETURN START RETURN expr WHERE expr RETURN expr
может быть проанализирован как
START RETURN ( START RETURN expr ) WHERE expr RETURN expr
или
START RETURN ( START RETURN expr WHERE expr RETURN expr )
, в зависимости от того, что подходит для вашего DSL, вы можете изменитьграмматика для применения одного или другого значения или запрета вложенных start
выражений, если они не имеют смысла.