Closed Cydhra closed 2 years ago
Das hier betrifft #53, aber kann auch auf main gefixt werden
Tatsächlich kann man hier garnicht so viel ändern, weil man nicht einfach annehmen darf, dass Zeichen zu viel sind, es könnten ja auch welche Fehlen. Fixes dürfen hier nur in Einzelfällen geschehen, nicht generell.
Wenn der Parser eine Unterscheidung durch Lookahead macht, und im
else
Teil nicht failt sondern einen rekursiven Abstieg macht, dann wird er nach dem Abstieg bei einem illegalen Token falsche Annahmen bezüglich der Recovery treffen. Illegale Tokens müssen vor dem Abstieg gelesen werden:Theoretisches Beispiel:
wird bei einem Input von
ident!(...)
(mitident
gerade gelesen, alsopeek() == '!'
inparseStatement
absteigen. Dann wird inparseStatement
erkannt dass!
illegal ist, aber dennoch ins Statement parsing recovered, obwohl danach das vorher nicht betrachtete(
steht.