Errors in Top-Down Parsing
description
Transcript of Errors in Top-Down Parsing
![Page 1: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/1.jpg)
Errors in Top-Down Parsing
Teoría de Autómatas y Lenguajes FormalesM. Luisa González Díaz
Universidad de Valladolid, 2005
![Page 2: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/2.jpg)
PPT integer char num array ^ [ of ] $
type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
![Page 3: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/3.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
A correct input:
array [ char ] of integer
![Page 4: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/4.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
char
char
] of integer
simple
integer
$
$
![Page 5: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/5.jpg)
Empty entries
![Page 6: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/6.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
![Page 7: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/7.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ ^ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
![Page 8: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/8.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ ^ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
Error
$
char
![Page 9: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/9.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ ^ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
char
char
] of integer
simple
integer
$
$
![Page 10: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/10.jpg)
Other kind of empty entries
![Page 11: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/11.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
![Page 12: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/12.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
char
char
] of $
Error
type
![Page 13: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/13.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
Unexpected token:Mark error.Try again with the next token
Unexpected end of string:Mark error.Recognize we can’t expand non terminal
Panic mode
![Page 14: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/14.jpg)
Code (panic mode)procedure type;
if lookahead = array thenmatch(array); match (‘[‘);simple; match(‘]‘); match(of); type
else if lookahead = ‘^’ thenmatch(‘^’); simple
else if lookahead in {char, integer, num} then simple
else if lookahead in {‘[‘,of, ‘]’} then writeln (‘Error:unexpected’, lookahead);match (lookahead); type
else (* lookahead = $ *)writeln (‘Error: I couldn’t find type’)
normal
errors
![Page 15: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/15.jpg)
Match errors
![Page 16: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/16.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of typearray [ simple
[ Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
char
char
] of integer
simple
integer
$
$
char
Error
![Page 17: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/17.jpg)
Other kind of match errors
![Page 18: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/18.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of type[ simplearray
Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
$
Error
![Page 19: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/19.jpg)
match: panic mode
• lookahead = expected token (t) – OK: read next token into lookahead and return
• lookahead <> expected token (t)– mark error :unexpected token (t), but
• lookahead <> $– try again with the next token into lookahead
• lookahead = $– don’t try again, don’t read anymore, just return
![Page 20: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/20.jpg)
Code of match (panic mode)procedure match (t: token);(*Pre: t <> $ * Never try to match end of string)begin
if lookahead = t thenlookahead := nexttoken (lexical analyzer)else if lookahead <> $ thenwriteln (‘Unexpected’, lookahead);lookahead := nexttoken;match (t)else (* lookahead = $ *)writeln (‘Unexpected end of string’)
end
![Page 21: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/21.jpg)
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
array
type
] of type[ simplearray
Lex. An.
PPT integer char num array ^ [ of ] $type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6
$
$
Error
[
Error
simple ]
Error
of
Error Error
type
![Page 22: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/22.jpg)
Main program
Beginlookahead = nexttoken;type; if lookahead = $ theninput finished (errors, if any, were marked)elseunexpected input after end of type
End.
![Page 23: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/23.jpg)
![Page 24: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/24.jpg)
PPT integer char num array ^ .. [ of ] $
type rule 1 rule 1 rule 1 rule 3 rule 2
simple rule 4 rule 5 rule 6 er
type → simple | ^ simple | array [simple] of typesimple → integer | char | num ptpt num
An example of phrase-level error-recovery strategy
Suposse it’s quite usual forgeting first number in num ptpt num
Error action : mark it was forgotten
![Page 25: Errors in Top-Down Parsing](https://reader035.fdocuments.net/reader035/viewer/2022062501/56815d36550346895dcb364b/html5/thumbnails/25.jpg)
Code (panic+phrase-level mode)procedure simple;
if lookahead = integer then match(integer); else if lookahead = char then match(char);
else if lookahead = num then match(num); match(ptpt); match(num);
else if lookahead in {array, ‘^’, ‘[‘, of, ‘]’} then writeln (‘Error:unexpected’, lookahead);match (lookahead); simple
else if lookahead = ptpt thenwriteln (‘Error: forgotten num’);match(ptpt); match(num);
else (* lookahead = $ *)writeln (‘Error: I couldn’t find simple’)
normal
errors