Сдвиг / уменьшение конфликтов в парсере бизонов

Я строю грамматический парсер с бизоном. Правила, которые я определил до сих пор:

Program :   Exp {};
Exp     :   STRING {};
Exp     :   TRUE {};
Exp     :   FALSE {};
Exp     :   NOT Exp {};
Exp     :   Exp OP Exp{};
OP      :   AND | OR | XOR {};

Я получаю сообщение:

warning: 4 shift/reduce conflicts [-Wconflicts-sr]

Я попытался определить префикс и избежать левой рекурсии:

Program     :   Exp {};
Exp1        :   STRING {};
Exp1        :   TRUE {};
Exp1        :   FALSE {};
Exp1        :   NOT Exp {};
Exp         :   Exp1 OPA{};
OPA         :   OPExp | {};
OP          :   OR | AND | XOR {};

Таким образом, я все еще получил конфликты. Как я могу их решить?

0 ответов

Другие вопросы по тегам