Я только начал самостоятельно изучать книгу Дракона по разработке компиляторов.Я работаю над проблемой, которая говорит, чтобы разработать грамматику для выражения, содержащего двоичные +, -, *, / и унарные +, -
Я придумал следующее
E -> E+T | E-T | T
T -> T*P | T/P | P
P -> +S | -S | S
S -> id | constant | (E)
Однако,в этом есть очевидный недостаток.Согласно этой грамматике, выражения типа
1--3
являются допустимыми, что является ошибкой во всех известных мне языках программирования.Хотя выражения типа
1+-+3
and
1- -3
должны быть действительными.Как можно создать такую грамматику?