Как я могу сказать Биверу игнорировать уменьшение / уменьшение конфликтов?

Я пытаюсь использовать Beaver для разбора грамматики, содержащей конфликт уменьшения / уменьшения. Ожидается конфликт. Другие генераторы синтаксического анализатора поддерживают, говоря что-то вроде %expect 0 1 указать, что ожидается один конфликт уменьшения / уменьшения, но Бивер, кажется, не поддерживает это. Как я могу сказать Биверу игнорировать известный конфликт уменьшения / уменьшения и генерировать парсер?

1 ответ

Бобр не может этого сделать, но вы можете использовать директивы%left, %right или%nonassoc для определения правил ассоциативности и приоритетов.

Я предполагаю, что вам все равно, какое уменьшение выполняется в случае конфликта (либо потому, что деревья разбора идентичны, либо потому, что они идентичны для вашей цели). Поэтому для вас не должно иметь значения, какие приоритеты вы определяете, просто то, что вы определяете достаточный приоритет.

Предположим, что конфликт существует между операторами OP1 и OP2, тогда следующие директивы разрешат ваш конфликт.

%nonassoc OP1;
%nonassoc OP2;

Однако, если конфликт между двумя правилами вычета с одним и тем же оператором (OP), то вам нужно либо

%left OP;

или же

%right OP;
Другие вопросы по тегам