Я пытаюсь привести некоторые ошибки синтаксического анализа, указав неассоциативный приоритет. Вот часть моего файла грамматики:Правило неассоциативного правила Bison
Comparison :
Value ComparisonOp Value
{
$2->Left($1);
$2->Right($3);
$$ = $2;
}
;
Выражения типа 1 = 2 следует разобрать, но выражения как 1 = 2 = 3, не допускаются в грамматике. Чтобы учесть это, я пытался сделать мой оператор нон ассоциативную следующим образом:
%nonassoc NONASSOCIATIVE
.
.(rest of the grammar)
.
Comparison :
Value ComparisonOp Value %prec NONASSOCIATIVE
{
$2->Left($1);
$2->Right($3);
$$ = $2;
}
;
1 = 2 = 3 все еще проходит, Может кто-то пожалуйста, скажите мне, что я делаю неправильно?
ComparisonOp является правилом, что расширяется токены EQ, NEQ, я попытался добавить правила приоритета для них но, по-видимому, приоритет не распространяется на родительское правило. – stopBugs
. Вы должны правильно установить приоритет на обоих правилах, а разрешение приоритетов токенов - бизон, сравнивая приоритет правила, которое должно быть уменьшено, с приоритетом маркера сдвинуты. Если вы установите только один или другой, ничего не произойдет. –
Я сделал оба, все равно это не работает. Один тонко здесь заключается в том, что в правиле для значения у меня есть – stopBugs