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