Можно ли понять, когда работают семантические предикаты, а когда нет?JAVA

Программисты JAVA общаются здесь
Anonymous
Можно ли понять, когда работают семантические предикаты, а когда нет?

Сообщение Anonymous »

Ниже приведены две грамматики. < /p>
В этой грамматике семантические предикаты выполняют «работу». Т.е. Если они ложные, правила не совпадают, и если они правда, правила соответствуют: < /p>
expr
: term
| expr asterisk expr (asterisk expr)*
| expr plus expr (plus expr)*
;

plus: {_input.LT(1).getText().equals("+")}? SPECID;
asterisk: {_input.LT(1).getText().equals("*")}? SPECID;

term
: ALNUMID
| STRID
| LPAREN expr RPAREN
;
< /code>
И в этой грамматике семантические предикаты не работают. Т.е. Если они ложны, правила по -прежнему совпадают с ошибкой BU. < /p>
expr
: add
| mult
| term
;

mult
: term (asterisk) term ((asterisk) term)*
;

add
: (term|mult) plus (term|mult) (plus (term|mult))*
;

plus: {_input.LT(1).getText().equals("+")}? SPECID;
asterisk: {_input.LT(1).getText().equals("*")}? SPECID;

term
: ALNUMID
| STRID
| LPAREN expr RPAREN
;
< /code>
В обоих случаях я пытаюсь запустить простые тесты для анализа 2 + 2 и 2 * 2. < /p>
Можно ли понять заранее, Уилл Определение работы или нет? Какая здесь логика?

Подробнее здесь: https://stackoverflow.com/questions/794 ... n-they-don

Вернуться в «JAVA»