Свердлов помог.
Я обычую грамматику переписал так:
A=+E|-E|E
E = T {+T|-T}
T = F {*F | /F | %F }
F = константа|функция|имя|(A)
Получилось лучше.
Относительность и абсолютность выражений на уровне LL(1) грамматики - сложно состряпать, если вообще возможно.
Дело в том, что возможны выражения R-A и R-R. Один и тот же символ (минус) в множестве first для разных правил. И там еще минус в правиле для E. А состряпать грамматику с единственным минусом мне не удалось (видно, тямыне хватает).
Я обошелся другим способом.
Просто вычислителю задается, какой тип выражений он должен считать, и он в лоб проверяет, соответствуют ли аргументы и операции этому выражению.