Skip to content

Commit 427e0b3

Browse files
committed
lecture: add further remark on precedence rules (ANTLR)
1 parent 0adc9d3 commit 427e0b3

1 file changed

Lines changed: 22 additions & 1 deletion

File tree

lecture/02-parsing/antlr-parsing.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,31 @@ Eingabe `2+3*4` wird jetzt inkorrekt als als "(2+3)\*4" geparst:
471471
![](images/screenshot_parsetree_incorrect.png)
472472

473473
::: caution
474-
**Präzedenz entsteht in ANTLR4 nur durch die Reihenfolge der linkrekursiven
474+
**Präzedenz entsteht in ANTLR4 nur durch die Reihenfolge der linksrekursiven
475475
Alternativen in *derselben* Regel (ggf. mit `<assoc=right>` für
476476
Rechtsassoziativität).**
477477
:::
478+
479+
::: note
480+
Bitte daran denken, dass die Reihenfolge der linksrekursiven Alternativen den
481+
Vorrang definiert.
482+
483+
Betrachten Sie die folgende Änderung der Grammatik von oben:
484+
485+
``` antlr
486+
expr
487+
: expr '*' expr
488+
| expr '/' expr
489+
| expr '+' expr
490+
| expr '-' expr
491+
| INT
492+
;
493+
```
494+
495+
Das funktioniert, hier wird den Alternativen implizt ein Vorrang zugeordnet. Aber
496+
jetzt bekommt die Multiplikation Vorrang vor der Division, und auch die Addition
497+
bekommt Vorrang vor der Subtraktion. Ist das wirklich so gewollt?
498+
:::
478499
::::
479500

480501
# Kontext-Objekte für Parser-Regeln

0 commit comments

Comments
 (0)