Бизон: Дать левый приоритет правилу? - PullRequest
2 голосов
/ 17 февраля 2011

С бизоном у меня много% слева (+, * и т. Д.) И несколько% справа (=, + = и т. Д.).Это все токены.Теперь у меня есть правило.Его

| rval
| AttrData rval

Проблема в том, что AttrData rval возвращает rval, поэтому AttrData 1 + 1 может быть либо (AttrData 1) +1, либо AttrData (1 + 1).Что мне нравится делать, так это применять левое правило к AttrData, НО, которое не работает, потому что это не токен.Я попытался% prec, и я тоже получаю сообщение об ошибке.

Я могу исправить это, написав | AttrData '(' rval ')' НО я не хочу этого делать, и я бы предпочел, чтобы пользователи писали AttrData (1+1), так как большую часть времени онина самом деле будет означать (AttrData 1) + 1.

Как мне дать правилу левый приоритет?

Единственное, что у меня есть, это еще что-то, что я решил с помощью принудительных скобок, чтобы не путать(если cond {if cond} else)

1 Ответ

1 голос
/ 29 декабря 2011

Вы можете установить явные приоритеты, которые могут вам помочь

ЕСЛИ ЕЩЕ ПРИМЕР

%nonassoc LOWER_THAN_ELSE

%nonassoc ELSE

%%
stmt   :    IF expr stmt %prec LOWER_THAN_ELSE ;
       |    IF expr stmt ELSE stmt;
...