compilers
play

Compilers Shift-Reduce Parsing Alex Aiken Shift-Reduce Parsing - PowerPoint PPT Presentation

Compilers Shift-Reduce Parsing Alex Aiken Shift-Reduce Parsing Important Fact #1 about bottom-up parsing: A bottom-up parser traces a rightmost derivation in reverse Alex Aiken Shift-Reduce Parsing Important Fact #1 has an interesting


  1. Compilers Shift-Reduce Parsing Alex Aiken

  2. Shift-Reduce Parsing Important Fact #1 about bottom-up parsing: A bottom-up parser traces a rightmost derivation in reverse Alex Aiken

  3. Shift-Reduce Parsing Important Fact #1 has an interesting consequence: – Let  be a step of a bottom-up parse – Assume the next reduction is by X   – Then  is a string of terminals Why? Because  X    is a step in a right-most derivation Alex Aiken

  4. Shift-Reduce Parsing • Idea: Split string into two substrings – Right substring is as yet unexamined by parsing – Left substring has terminals and non-terminals – The dividing point is marked by a | Alex Aiken

  5. Shift-Reduce Parsing Bottom-up parsing uses only two kinds of actions: Shift Reduce Alex Aiken

  6. Shift-Reduce Parsing • Shift: Move | one place to the right – Shifts a terminal to the left string ABC|xyz  ABCx|yz Alex Aiken

  7. Shift-Reduce Parsing • Apply an inverse production at the right end of the left string – If A  xy is a production, then Cbxy|ijk  CbA|ijk Alex Aiken

  8. Shift-Reduce Parsing reduce T  int int * int | + int reduce T  int * T int * T | + int reduce T  int T + int | reduce E  T T + T | reduce E  T + E T + E | E | Alex Aiken

  9. Shift-Reduce Parsing |int * int + int shift int | * int + int shift int * | int + int shift reduce T  int int * int | + int reduce T  int * T int * T | + int T | + int shift T + | int shift reduce T  int T + int | reduce E  T T + T | reduce E  T + E T + E | E | Alex Aiken

  10. Shift-Reduce Parsing |int * int + int + int int int *  Alex Aiken

  11. Shift-Reduce Parsing |int * int + int int | * int + int + int int int *  Alex Aiken

  12. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int + int int int *  Alex Aiken

  13. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int + int int int *  Alex Aiken

  14. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int int * T | + int T + int int int *  Alex Aiken

  15. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int T int * T | + int T | + int T + int int int *  Alex Aiken

  16. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int T int * T | + int T | + int T T + | int + int int int *  Alex Aiken

  17. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int T int * T | + int T | + int T T + | int T + int | + int int int *  Alex Aiken

  18. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int T int * T | + int T | + int T T T + | int T + int | + int int int T + T | *  Alex Aiken

  19. Shift-Reduce Parsing |int * int + int int | * int + int int * | int + int int * int | + int T E int * T | + int T | + int T T T + | int T + int | + int int int T + T | *  T + E | Alex Aiken

  20. Shift-Reduce Parsing |int * int + int E int | * int + int int * | int + int int * int | + int T E int * T | + int T | + int T T T + | int T + int | + int int int T + T | *  T + E | E | Alex Aiken

  21. Shift-Reduce Parsing For the given grammar, what is the correct shift- reduce parse for the string: id + -id E  E’ | E’ + E |id + -id | E’ + -id E’  - E’ | id | (E) |id + -id E’ |+ -id id|+ -id E ’ +|-id |id + -id |id + -id E ’ +|-id E’ + -|id id|+ -id id|+ -id E’ + -|id E’ + -| E’ id +|-id E’ |+ -id E’ + -id| E’ +|- E’ id + -|id E’ +|-id E’ + - E’ | E’ +| E’ id + -id| E’ + -|id E’ + E’ | E’ +|E id + - E’ | E’ + -id| E’ + E | E ’ |+ E id + E’ | E’ + -E ’ | E| | E’ + E id + E| E’ + E’ | |E E’ + E| E ’ + E | E| E|

  22. Shift-Reduce Parsing • Left string can be implemented by a stack – Top of the stack is the | • Shift pushes a terminal on the stack • Reduce – pops symbols off of the stack (production rhs) – pushes a non-terminal on the stack (production lhs) Alex Aiken

  23. Shift-Reduce Parsing • In a given state, more than one action (shift or reduce) may lead to a valid parse • If it is legal to shift or reduce, there is a shift-reduce conflict • If it is legal to reduce by two different productions, there is a reduce-reduce conflict Alex Aiken

Recommend


More recommend