Slide 1

Slide 1 text

jgs Compilers Lecture 13: Error Handling I Dr. Javier Gonzalez-Sanchez [email protected]

Slide 2

Slide 2 text

jgs Previously …

Slide 3

Slide 3 text

Dr. Javier Gonzalez-Sanchez | Compilers | 3 jgs Rules PROGRAM BODY ASSIGNMENT VARIABLE WHILE IF RETURN PRINT C EXPRESSION X Y R E A B

Slide 4

Slide 4 text

Dr. Javier Gonzalez-Sanchez | Compilers | 4 jgs Grammar à '{' '}’ à {';'|';'|';’|||';'} à identifier '=' à ('int'|'float'|'boolean'|'char’|'string'|'void')identifier à 'while' '(' ')' à 'if' '(' ')' ['else' ] à 'return' à ’print’ ‘(‘ ‘)’ à {'|' } à {'&' } à ['!'] à {('>'|'<'|'=='|'!=') } à {(’+'|'-’) } à {('*'|'/') } à ['-'] à integer | octal | hexadecimal | binary | true | false | string | char | float | identifier|'(' ')'

Slide 5

Slide 5 text

Dr. Javier Gonzalez-Sanchez | Compilers | 5 jgs Assignment 2 | Code public static void RULE_BODY() { while (!tokens.get(currentToken).getWord().equals(“}”)) { if (tokens.get(currentToken).getToken().equals(“identifier”)) { RULE_ASSIGNMENT(); if (tokens.get(currentToken).getWord().equals(“;”)) { currentToken++; else error(3); } else if (tokens.get(currentToken).getToken().equals(“int”) | ...) { RULE_VARIABLE(); if (tokens.get(currentToken).getWord().equals(";")) { currentToken++; else error(3); } else if (tokens.get(currentToken).getWord().equals(“while”)) { RULE_WHILE(); } else if (tokens.get(currentToken).getWord().equals(“if”)) { RULE_IF(); } else if (tokens.get(currentToken).getWord().equals(“return”)) { RULE_RETURN(); if (tokens.get(currentToken).getWord().equals(“;”)) { currentToken++; else error(3); } else error(4); } } BODY

Slide 6

Slide 6 text

Dr. Javier Gonzalez-Sanchez | Compilers | 6 jgs PREDICTIVE DESCENDENT RECURSIVE PARSER

Slide 7

Slide 7 text

jgs Error Handling

Slide 8

Slide 8 text

Dr. Javier Gonzalez-Sanchez | Compilers | 8 jgs 1 •Understand de provided source code (3 rules) 2 •Program the rules PROGRAM, BODY, EXPRESSION, X, Y, R, E, C (11 rules) 3 •Program the full set of rules in the grammar (16 rules) 4 •Report syntactical errors (one error and stop) PANIC MODE 5 •Implement error synchronization •ERROR RECOVERY What Next

Slide 9

Slide 9 text

Dr. Javier Gonzalez-Sanchez | Compilers | 9 jgs Programming Assignment 2 Level 4 Handling Syntactical Errors (part 1): Error messages

Slide 10

Slide 10 text

Dr. Javier Gonzalez-Sanchez | Compilers | 10 jgs Grammar PROGRAM BODY ASSIGNMENT VARIABLE WHILE IF RETURN PRINT C EXPRESSION X Y R E A B

Slide 11

Slide 11 text

Dr. Javier Gonzalez-Sanchez | Compilers | 11 jgs Assignment 2 {} Input: Build successful Output:

Slide 12

Slide 12 text

Dr. Javier Gonzalez-Sanchez | Compilers | 12 jgs Assignment 2 { hello word } Input: Line 2: expected = Line 2: expected ; Output:

Slide 13

Slide 13 text

Dr. Javier Gonzalez-Sanchez | Compilers | 13 jgs Assignment 2 { int x int int int x; } Input: Line 2: expected ; Line 3: expected identifier Line 3: expected ; Line 4: expected identifier Output:

Slide 14

Slide 14 text

Dr. Javier Gonzalez-Sanchez | Compilers | 14 jgs Assignment 2 { x = a; x = 0x36AW; x = ((((((((((y)))))))))); x = (5+(4-(3+(5+5/(2+(3+(1+(77+(1-(y)))))))))) + “hello” + ‘q’; if (a < b) {} else {} if (a < b) { if (a < b) { } else { } } } Input: Line 3: expected value, identifier or ( Output:

Slide 15

Slide 15 text

Dr. Javier Gonzalez-Sanchez | Compilers | 15 jgs Parser | Error Points PROGRAM Line N: expected { Line N: expected }

Slide 16

Slide 16 text

Dr. Javier Gonzalez-Sanchez | Compilers | 16 jgs Parser | Error Points Line N: expected ; BODY Line N: expected identifier or keyword

Slide 17

Slide 17 text

Dr. Javier Gonzalez-Sanchez | Compilers | 17 jgs Parser | Error Points ASSIGNMENT Line N: expected =

Slide 18

Slide 18 text

Dr. Javier Gonzalez-Sanchez | Compilers | 18 jgs Parser | Error Points VARIABLE Line N: expected identifier

Slide 19

Slide 19 text

Dr. Javier Gonzalez-Sanchez | Compilers | 19 jgs Parser | Error Points WHILE Line N: expected ( Line N: expected )

Slide 20

Slide 20 text

Dr. Javier Gonzalez-Sanchez | Compilers | 20 jgs Parser | Error Points IF Line N: expected ( Line N: expected )

Slide 21

Slide 21 text

Dr. Javier Gonzalez-Sanchez | Compilers | 21 jgs Parser | Error Points RETURN

Slide 22

Slide 22 text

Dr. Javier Gonzalez-Sanchez | Compilers | 22 jgs Parser | Error Points PRINT Line N: expected ( Line N: expected )

Slide 23

Slide 23 text

Dr. Javier Gonzalez-Sanchez | Compilers | 23 jgs Parser | Error Points EXPRESSION X Y R E A B

Slide 24

Slide 24 text

Dr. Javier Gonzalez-Sanchez | Compilers | 24 jgs Parser | Error Points C Line N: expected value, identifier or ( Line N: expected )

Slide 25

Slide 25 text

Dr. Javier Gonzalez-Sanchez | Compilers | 25 jgs Assignment 2 public static void error(int err) { int n = tokens.get(currentToken).getLine(); switch (err) { case 1: gui.writeConsole("Line” + n + ": expected {”); break; case 2: gui.writeConsole("Line” + n + ": expected }”); break; case 3: gui.writeConsole("Line” + n + ": expected ;”); break; case 4: gui.writeConsole("Line” +n+": expected identifier or keyword”); break; case 5: gui.writeConsole("Line” +n+": expected =”); break; case 6: gui.writeConsole("Line” +n+": expected identifier”); break; case 7: gui.writeConsole("Line” +n+": expected )”); break; case 8: gui.writeConsole("Line” +n+": expected (”); break; case 9: gui.writeConsole("Line” +n+": expected value, identifier, (”); break; } }

Slide 26

Slide 26 text

Dr. Javier Gonzalez-Sanchez | Compilers | 26 jgs Questions

Slide 27

Slide 27 text

jgs Compilers Javier Gonzalez-Sanchez, Ph.D. [email protected] Spring 2024 Copyright. These slides can only be used as study material for the Compilers course at Universidad Panamericana. They cannot be distributed or used for another purpose.