unten sind zwei Grammatiken. < /p>
In dieser Grammatik machen semantische Prädikate "Arbeit". D.h. Wenn sie falsch sind, stimmen Regeln nicht überein und wenn sie wahr sind, stimmen die Regeln überein: < /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>
Und in dieser Grammatik funktionieren semantische Prädikate nicht. D.h. Wenn sie falsch sind, werden die Regeln immer noch mit dem BU -Fehler übereinstimmen. < /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>
In beiden Fällen versuche ich einfache Tests durchzuführen, um 2 + 2 und 2 * 2 zu analysieren. Definitionsarbeit oder nicht? Was ist die Logik hier?
Ist es möglich zu verstehen, wann funktionieren semantische Prädikate und wann nicht? ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post