Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UP Lecture 14

UP Lecture 14

Compilers
Parser Implementation
(202603)

Avatar for Javier Gonzalez-Sanchez

Javier Gonzalez-Sanchez PRO

December 17, 2023
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. Dr. Javier Gonzalez-Sanchez | Compilers | 3 jgs Parser |

    Step by Step For each rule in the grammar { ▪ Step 1. The left-hand side (method declaration) ▪ Step 2. The right-hand side (body of the method) as follows: ▪ Step 2.1 Non-terminals (boxes) will be a call to a method ▪ Step 2.2. Terminals (ovals) will be if-conditions ▪ Step 2.3. Lines in a loop (EBNF items) will be loops }
  2. Dr. Javier Gonzalez-Sanchez | Compilers | 7 jgs Homework Programming

    Assignment 2 Develop a Predictive Descendent Recursive Parser by coding a Grammar
  3. Dr. Javier Gonzalez-Sanchez | Compilers | 12 jgs You Need

    a Lexer Add Yours To the Repository (I recommend creating a package 'Lexer'
  4. Dr. Javier Gonzalez-Sanchez | Compilers | 26 jgs Parser public

    static void RULE_PROGRAM() { if (tokens.get(currentToken).getWord().equals(“{”)) { currentToken++; else error(1); RULE_BODY(); if (tokens.get(currentToken).getWord().equals(“}”)) currentToken++; else error(2); } PROGRAM
  5. Dr. Javier Gonzalez-Sanchez | Compilers | 31 jgs Assignment 2

    | Code public static void RULE_ASSIGNMENT() { } ASSIGNMENT
  6. Dr. Javier Gonzalez-Sanchez | Compilers | 32 jgs Parser public

    static void RULE_BODY() { while (!tokens.get(currentToken).getWord().equals(“}”)) { RULE_EXPRESSION(); if (tokens.get(currentToken).getWord().equals(“;”)) currentToken++; else error(3); } } BODY
  7. Dr. Javier Gonzalez-Sanchez | Compilers | 33 jgs Parser public

    static void RULE_EXPRESSION() { RULE_X(); while (tokens.get(currentToken).getWord().equals(“|”)) { currentToken++; RULE_X(); } } EXPRESSION
  8. Dr. Javier Gonzalez-Sanchez | Compilers | 34 jgs Parser public

    static void RULE_X() { RULE_Y(); while (tokens.get(currentToken).getWord().equals(“&”)) { currentToken++; RULE_Y(); } } X
  9. Dr. Javier Gonzalez-Sanchez | Compilers | 35 jgs Parser public

    static void RULE_Y() { if (tokens.get(currentToken).getWord().equals(“!”)) { currentToken++; } RULE_R(); } Y
  10. Dr. Javier Gonzalez-Sanchez | Compilers | 36 jgs Parser public

    static void RULE_R() { RULE_E(); while ( tokens.get(currentToken).getWord().equals(“<”) |tokens.get(currentToken).getWord().equals(“>”) |tokens.get(currentToken).getWord().equals(“==”) |tokens.get(currentToken).getWord().equals(“!=”) ) { currentToken++; RULE_E(); } } R
  11. Dr. Javier Gonzalez-Sanchez | Compilers | 37 jgs Parser public

    static void RULE_E() { RULE_A(); while (tokens.get(currentToken).getWord().equals(“-”) | tokens.get(currentToken).getWord().equals(“+”) ) { currentToken++; RULE_A(); } } E
  12. Dr. Javier Gonzalez-Sanchez | Compilers | 38 jgs Parser public

    static void RULE_A() { RULE_B(); while (tokens.get(currentToken).getWord().equals(“/”) | tokens.get(currentToken).getWord().equals(“*”) ) { currentToken++; RULE_B(); } } A
  13. Dr. Javier Gonzalez-Sanchez | Compilers | 39 jgs Parser public

    static void RULE_B() { if (tokens.get(currentToken).getWord().equals(“-”)) { currentToken++; } RULE_C(); } B
  14. Dr. Javier Gonzalez-Sanchez | Compilers | 40 jgs Parser public

    static void RULE_C() { if (tokens.get(currentToken).getToken().equals(“integer”)) { currentToken++; } else if (tokens.get(currentToken).getToken().equals(“identifier”)) { currentToken++; } else if (tokens.get(currentToken).getWord().equals(“(”)) { currentToken++; RULE_EXPRESSION(); if (tokens.get(currentToken).getWord().equals(“)”)) { currentToken++; } else error(4); } } else { error (5); } } C
  15. Dr. Javier Gonzalez-Sanchez | Compilers | 41 jgs Assignment 2

    | Code public static void RULE_C() { } C
  16. Dr. Javier Gonzalez-Sanchez | Compilers | 42 jgs Assignment 2

    | Code public static void RULE_VARIABLE() { } VARIABLE
  17. Dr. Javier Gonzalez-Sanchez | Compilers | 43 jgs Assignment 2

    | Code public static void RULE_WHILE() { } WHILE
  18. Dr. Javier Gonzalez-Sanchez | Compilers | 44 jgs Assignment 2

    | Code public static void RULE_IF() { } IF
  19. Dr. Javier Gonzalez-Sanchez | Compilers | 45 jgs Assignment 2

    | Code public static void RULE_RETURN() { } RETURN
  20. Dr. Javier Gonzalez-Sanchez | Compilers | 46 jgs Assignment 2

    | Code public static void RULE_CALL_METHOD () { } CALL_METHOD
  21. Dr. Javier Gonzalez-Sanchez | Compilers | 47 jgs Assignment 2

    | Code public static void RULE_PARAM_VALUES () { } PARAM_VALUES
  22. Dr. Javier Gonzalez-Sanchez | Compilers | 48 jgs Homework The

    first version of your parser (without error handling) is due in one week. Focus on implementing the grammar rules and parsing functionality. Assume the input is always correct; if an error occurs, the parser may stop.
  23. jgs Compilers Javier Gonzalez-Sanchez, Ph.D. [email protected] Spring 2025 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.