Syntax Analysis Parsing Syntactic analysis = parsing Goal of - - PowerPoint PPT Presentation

syntax analysis
SMART_READER_LITE
LIVE PREVIEW

Syntax Analysis Parsing Syntactic analysis = parsing Goal of - - PowerPoint PPT Presentation

COS 301: Programming Languages Syntax Analysis Parsing Syntactic analysis = parsing Goal of parser: Find all syntax errors diagnostic message If no syntax errors parse tree UMaine School of Computing and Information Science COS 301 -


slide-1
SLIDE 1

COS 301: Programming Languages

Syntax Analysis

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing

Syntactic analysis = parsing Goal of parser: Find all syntax errors ⇒ diagnostic message If no syntax errors ⇒ parse tree

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

slide-2
SLIDE 2

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers:

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal)

slide-3
SLIDE 3

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation:

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy

slide-4
SLIDE 4

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers:

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation

slide-5
SLIDE 5

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation Ex: xwzy, same grammar, derivation:

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation Ex: xwzy, same grammar, derivation: xwzy ⇒ xAzy ⇒ xABy⇒ S

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation Ex: xwzy, same grammar, derivation: xwzy ⇒ xAzy ⇒ xABy⇒ S

slide-6
SLIDE 6

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation Ex: xwzy, same grammar, derivation: xwzy ⇒ xAzy ⇒ xABy⇒ S

COS 301 - 2018 UMaine School of Computing and Information Science

Types of parsers

Top-down parsers: Start at root to produce parse tree Order: leftmost derivation (preorder traversal) Ex: xwzy, grammar: S→ xABy, A → w, B→ z derivation: S ⇒ xABy ⇒ xwBy ⇒ xwzy Bottom-up parsers: Start at leaves to produce tree Reverse order of a rightmost derivation Ex: xwzy, same grammar, derivation: xwzy ⇒ xAzy ⇒ xABy⇒ S

COS 301 - 2018 UMaine School of Computing and Information Science

Computational complexity

Brute-force approach: Try every possible rule (exhaustive search) Exponential in length of the program So don’t do that! Better: Several algorithms ⇒ O(n3) Still too expensive for commercial compilers Can reduce the generality of the language to be parsed ⇒ linear O(n)

slide-7
SLIDE 7

COS 301 - 2018 UMaine School of Computing and Information Science

Top-Down Parsing

COS 301 - 2018 UMaine School of Computing and Information Science

Top-down parsing

Given xAα, where x is a string of terminal symbols A is the leftmost nonterminal symbol α is a string of terminals and non-terminals Goal: find next sentential form in leftmost derivation Thus: choose rule such that A is the LHS; e.g., rules: A⇒bB, A⇒ cBb, A⇒a then we choose between: xAα⇒xbBα, xAα⇒xcBbα, and xAα⇒xaα

COS 301 - 2018 UMaine School of Computing and Information Science

Top-down parsing

Which to choose for xAα? choices: A⇒xbBα, A⇒xcBbα, and A⇒xaα Look at the input If the next token after x is a, b, or c, then it’s clear What if some rule’s RHS has nonterminals first? E.g., A→ Bb, choice includes xBbα Which to choose? Much harder in this case – depends on what B expands to, etc.

slide-8
SLIDE 8

COS 301 - 2018 UMaine School of Computing and Information Science

Most common top-down parsers

Two most common: recursive-descent and table- driven Work on a subset of CF grammars Algorithms are called LL First L = left-to-right scan of input Second L = leftmost derivation

COS 301 - 2018 UMaine School of Computing and Information Science

Recursive-descent parser

Simple algorithm to understand Mutually-recursive set of procedures One for each (EBNF) production of language I.e., one for each nonterminal Top-down parsing To begin, call procedure for start nonterminal Call procedure for leftmost nonterminal, etc. Procedure tries ⇒ parse tree rooted at itself, matches input Use scanner (lexer, tokenizer) ⇒ next token as needed

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

slide-9
SLIDE 9

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>}

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>}

slide-10
SLIDE 10

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>)

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr>

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term>

slide-11
SLIDE 11

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor>

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or /

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A

slide-12
SLIDE 12

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so…

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A

slide-13
SLIDE 13

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so…

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term>

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor>

slide-14
SLIDE 14

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B

slide-15
SLIDE 15

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so…

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor>

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor> →Call <id> ⇒ C,

slide-16
SLIDE 16

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor> →Call <id> ⇒ C, ←Return <id> → C

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor> →Call <id> ⇒ C, ←Return <id> → C ←Return <factor> →<id>→C

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor> →Call <id> ⇒ C, ←Return <id> → C ←Return <factor> →<id>→C ←Return <term> → (<factor>→<id>→B) * (<factor>→<id>→C)

slide-17
SLIDE 17

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: example

Grammar: Given: A+B*C <expr> → <term> {(+ | -) <term>} <term> → <factor> {(* | /) <factor>} <factor> → <id> | int_const | (<expr>) →Call <expr> →Call <term> → Call <factor> → Call <id>: next token is an id (A), so success; next token not * or / ← Return <id> → A ← Return <factor> → <id>→ A Next token is +, so… ← Return <term>→<factor>→<id>→A Next token is +, so… →Call <term> →Call <factor> →Call <id> ⇒ B ←Return <id> → B ←Return <factor> → <id> → B Next token is *, so… →Call <factor> →Call <id> ⇒ C, ←Return <id> → C ←Return <factor> →<id>→C ←Return <term> → (<factor>→<id>→B) * (<factor>→<id>→C) ←Return <expr>→(<term>→<factor>→<id>→A) + (<factor>→<id>→B) * <factor>→<id>→C)

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: <expr>

void expr(){ /* parses <expr> => <term> {(+|-) <term>} */ printf("enter <expr>\n"); term(); while (nextToken == ADD_OP || nextToken == SUB_OP) { lex(); term(); } printf("exit <expr>\n"); } /* Q: Where does nextToken come from? A: each function leaves the next unconsumed token in nextToken each function assumes on entry that it is available in nextToken */

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: <term>

void term(){ /* parses <term> => <factor> {(*|/) <factor>} */ printf("enter <term>\n"); factor(); while (nextToken == MULT_OP || nextToken == DIV_OP) { lex(); factor(); } printf("exit <term>\n"); }

slide-18
SLIDE 18

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: <factor>

Has to choose among several alternatives: <factor> → <id> | <int_const> | (<expr>) May be able to detect a syntax error here: E.g., A + B * / C Fail in <factor> ⇒ “/” isn’t any allowed symbol

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: <factor>

void factor(){ /* parses <factor> => <id> | int_constant | ( expr ) */ printf("enter <factor>\n"); if (nextToken == IDENT || nextToken == INT_LIT) lex(); else { if (nextToken == LEFT_PAREN) { lex(); expr(); /* recursion! */ if (nextToken == RIGHT_PAREN) lex(); else error(); } else error(); printf("exit <factor>\n");

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: Example

Given (sum + 47)/total

Next token is: 25 lexeme is ( Enter <expr> Enter <term> Enter <factor> Next token is: 11 lexeme is sum Enter <expr> Enter <term> Enter <factor> Next token is: 21 lexeme is + Exit <factor> Exit <term> Next token is: 10 lexeme is 47 Enter <term> Enter <factor>

slide-19
SLIDE 19

COS 301 - 2018 UMaine School of Computing and Information Science

RD parser: Example

Next token is: 26 lexeme is ) Exit <factor> Exit <term> Exit <expr> Next token is: 24 lexeme is / Exit <factor> Next token is: 11 lexeme is total Enter <factor> Next token is: -1 lexeme is EOF Exit <factor> Exit <term> Exit <expr>

COS 301 - 2018 UMaine School of Computing and Information Science

<expr> <term> <factor> <factor> ( <expr> <term> <factor> sum + 47 ) / total <term> <factor>

Parse tree

For (sum + 47)/total But – where is this produced in the functions?

COS 301 - 2018 UMaine School of Computing and Information Science

Another example: if statement

Program for <ifStmt> nonterminal: Check if current token is if Call lex(), check if current token is ( Call lex(), then call <boolExpr> Check if current token is ) Call lex() and call <stmt> Check if current token = else if so, call lex(), then call <stmt>

<ifStmt> → if ( <boolExpr> ) <stmt> [else <stmt> ]

slide-20
SLIDE 20

COS 301 - 2018 UMaine School of Computing and Information Science

<ifStmt>

void ifstmt(){ if (nextToken != IF_CODE) error(); else { lex(); if (nextToken != LEFT_PAREN) error(); else { lex(); /* error in text; this was omitted */ boolexpr(); if (nextToken != RIGHT_PAREN) error(); else { lex(); /* error in text; this was omitted */ stmt(); if (nextToken == ELSE_CODE){ lex(); stmt(); } /* end if (nextToken == ELSE_CODE) /* } /* end if (nextToken != RIGHT_PAREN) /* } /* end if (nextToken != LEFT_PAREN) /* } /* end if (nextToken != IF_CODE) /* } /* end IF_STMT /*

COS 301 - 2018 UMaine School of Computing and Information Science

LL grammars

Recursive-descent parsers: parse left-to-right, leftmost derivations (LL) Classes of grammars limited Can’t parse grammars with rules of form: A → A + B Direct left-recursion ⇒ infinite recursion! Can also have indirect recursion: A→ Ba B → Ab Also, need to be able to choose correct RHS based on next input token – not always possible

COS 301 - 2018 UMaine School of Computing and Information Science

Eliminating left-recursion

For every nonterminal A: Group the rules for A as: A → Aα1 | Aα2 |...|Aαm | β1 | β2 |...| βn Then replace these rules with: A → β1A’ | β2A’| … | βnA’ A’ → α1A’ | α2A’ | … | αmA’ | ε Left-recursive grammar ⇒ right-recursive grammar

slide-21
SLIDE 21

COS 301 - 2018 UMaine School of Computing and Information Science

Example

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id>

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id> For <e>, α1 = + <t>, β1 = <t>, so: <e> <t> <e’> <e’> + <t> <e’> | ε

slide-22
SLIDE 22

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id> For <e>, α1 = + <t>, β1 = <t>, so: <e> <t> <e’> <e’> + <t> <e’> | ε <t>: α1 = * <f>, β1 = <f>, so: <t> <f> <t’> <t’> * <f> <t’> | ε

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id> For <e>, α1 = + <t>, β1 = <t>, so: <e> <t> <e’> <e’> + <t> <e’> | ε <t>: α1 = * <f>, β1 = <f>, so: <t> <f> <t’> <t’> * <f> <t’> | ε Note: no left-associativity of operators enforced – would have to do this in code generation

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id> For <e>, α1 = + <t>, β1 = <t>, so: <e> <t> <e’> <e’> + <t> <e’> | ε <t>: α1 = * <f>, β1 = <f>, so: <t> <f> <t’> <t’> * <f> <t’> | ε Note: no left-associativity of operators enforced – would have to do this in code generation

slide-23
SLIDE 23

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: <e> <e> + <t> | <t> <t> <t> * <f> | <f> <f> (<e>) | <id> For <e>, α1 = + <t>, β1 = <t>, so: <e> <t> <e’> <e’> + <t> <e’> | ε <t>: α1 = * <f>, β1 = <f>, so: <t> <f> <t’> <t’> * <f> <t’> | ε Note: no left-associativity of operators enforced – would have to do this in code generation

COS 301 - 2018 UMaine School of Computing and Information Science

Example

COS 301 - 2018 UMaine School of Computing and Information Science

Example

slide-24
SLIDE 24

COS 301 - 2018 UMaine School of Computing and Information Science

Indirect recursion

Indirect recursion also a problem for recursive- descent parsers E.g., A → B c B → A d Algorithm exists to get rid of it, too May be able to write grammar to avoid both kinds of recursion

COS 301 - 2018 UMaine School of Computing and Information Science

Choosing RHS

Lookahead Best case: single token, no backtracking called a LL(1) grammar (and algorithm) Pairwise disjointedness test: checks if grammar is LL(1)

COS 301 - 2018 UMaine School of Computing and Information Science

Pairwise disjointedness test

General idea: If non-terminal has > 1 RHS and… …the different RHSs ultimately produce same terminal… …then: grammar is not LL(1) and… …can’t be parsed w/ recursive-descent

slide-25
SLIDE 25

COS 301 - 2018 UMaine School of Computing and Information Science

Pairwise disjointedness test

Compute set First(r), where r is a rule RHS First(r) = {t | r ⟹* t β} where t is a terminal, β is rest of sentential form If non-terminal N has two rules, i and j Compute First(i), First(j) If First(i) ⋂ First(j) ≠ {} ⇒ grammar is not LL(1)

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar Left factoring sometimes works: Creates a new nonterminal Old rule(s) now combined into one, which uses new nonterminal

slide-26
SLIDE 26

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar Left factoring sometimes works: Creates a new nonterminal Old rule(s) now combined into one, which uses new nonterminal E.g.: A → a | aB – not pairwise disjoint A → a A’ A’ → ε | B

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar Left factoring sometimes works: Creates a new nonterminal Old rule(s) now combined into one, which uses new nonterminal E.g.: A → a | aB – not pairwise disjoint A → a A’ A’ → ε | B

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar Left factoring sometimes works: Creates a new nonterminal Old rule(s) now combined into one, which uses new nonterminal E.g.: A → a | aB – not pairwise disjoint A → a A’ A’ → ε | B Or use EBNF: A → a [ B ]

slide-27
SLIDE 27

COS 301 - 2018 UMaine School of Computing and Information Science

Left factoring

If not pairwise disjoint, sometimes can fix grammar Left factoring sometimes works: Creates a new nonterminal Old rule(s) now combined into one, which uses new nonterminal E.g.: A → a | aB – not pairwise disjoint A → a A’ A’ → ε | B Or use EBNF: A → a [ B ] Ex: <e> <t> | <t> + <e> | <t> - <e> ⇒ <e> <t> <e’>

<e’> + <e> | - <e>

COS 301 - 2018 UMaine School of Computing and Information Science

Bottom-Up Parsing

COS 301 - 2018 UMaine School of Computing and Information Science

Bottom-up parsing

Called LR algorithms L = left-to-right scan R = rightmost derivation Creates a parse tree starting with the leaves (the input) Creates tree in reverse order of rightmost derivation Sentential forms for this are called right sentential forms

slide-28
SLIDE 28

COS 301 - 2018 UMaine School of Computing and Information Science

Basic process

Start with the input sentence (a right-sentential form) Find a RHS in the sentential form Replace it with the LHS Repeat until only the start symbol left. Record of the reductions ⇒ the parse tree

COS 301 - 2018 UMaine School of Computing and Information Science

Example

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar:

slide-29
SLIDE 29

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E )

slide-30
SLIDE 30

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id

slide-31
SLIDE 31

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id

slide-32
SLIDE 32

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id E + id

slide-33
SLIDE 33

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id E + id E + F

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id E + id E + F E + T

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id E + id E + F E + T E

slide-34
SLIDE 34

COS 301 - 2018 UMaine School of Computing and Information Science

Example

Grammar: E → E + T | T T → T * F | F F → id | ( E ) Parse: A + B + C A + B + C — assume lex can give id + id + id id + id + id F + id + id T + id +id E + id + id E + F + id E + T + id E + id E + F E + T E T F E E + E + T T F id F id id

COS 301 - 2018 UMaine School of Computing and Information Science

Problem: Which RHS to choose?

E → E + T | T T → T * F | F F → id | ( E ) If current sentential form is: E + T + id Choose: E → T? E → E + T? T → F?

COS 301 - 2018 UMaine School of Computing and Information Science

Handles

Problem: Which RHS to choose, if several? Find handle in current sentential form Handle = correct pattern in RHS to replace s.t.: ⇒ new sentential form & sentential form in right-derivation of current Only 1 handle/sentential form So…how to find handle?

slide-35
SLIDE 35

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

Right derivation of A + B * (C + D) given grammar:

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e>

slide-36
SLIDE 36

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t>

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f>

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> )

slide-37
SLIDE 37

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> )

slide-38
SLIDE 38

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D )

slide-39
SLIDE 39

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D )

slide-40
SLIDE 40

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D )

slide-41
SLIDE 41

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D ) A + B * ( C + D )

slide-42
SLIDE 42

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D ) A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-43
SLIDE 43

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

slide-44
SLIDE 44

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-45
SLIDE 45

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

slide-46
SLIDE 46

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

slide-47
SLIDE 47

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-48
SLIDE 48

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

slide-49
SLIDE 49

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-50
SLIDE 50

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

slide-51
SLIDE 51

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

slide-52
SLIDE 52

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-53
SLIDE 53

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

slide-54
SLIDE 54

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

slide-55
SLIDE 55

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Skip a few steps…

slide-56
SLIDE 56

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

slide-57
SLIDE 57

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

slide-58
SLIDE 58

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

slide-59
SLIDE 59

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Last production done

Skip a few steps…

slide-60
SLIDE 60

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Skip a few steps…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Done

slide-61
SLIDE 61

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

What was common to all handles?

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS?

slide-62
SLIDE 62

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS?

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS? So far, so good…

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS?

slide-63
SLIDE 63

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS? No…wouldn’t this be <e> + <t>?

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS?

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS? What’s different?

slide-64
SLIDE 64

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Handle Last production done

Hypothesis: Handle is leftmost RHS? What’s different? RHS is composed of leaves

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let

slide-65
SLIDE 65

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation)

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm)

slide-66
SLIDE 66

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals;

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals

slide-67
SLIDE 67

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A

slide-68
SLIDE 68

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A

slide-69
SLIDE 69

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

slide-70
SLIDE 70

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

slide-71
SLIDE 71

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

slide-72
SLIDE 72

COS 301 - 2018 UMaine School of Computing and Information Science

Definitions

Let γ: a right sentential form ⇒rm— a single production (right derivation) ⇒* — 0 or more productions (assume rm) ⇒+ — 1 or more productions α, β, δ: strings of terminals/nonterminals; w — string of terminals β is a phrase of right sentential form γ = αβδ iff S ⇒* αAδ ⇒+ αβδ I.e., string of leaves of current parse tree rooted at A β is a simple phrase of γ = αβδ iff S ⇒* αAw ⇒ αβδ I.e., string of leaves with single-step derivation from A β is the handle of γ iff it is the leftmost simple phrase

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Phrases: B, C, D C+D (C+D) B*(C+D) <e>+B*(C+D)

slide-73
SLIDE 73

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Phrases: B, C, D C+D (C+D) B*(C+D) <e>+B*(C+D) Simple phrases: B, C, D

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Phrases: B, C, D C+D (C+D) B*(C+D) <e>+B*(C+D) Simple phrases: B, C, D Handle: B

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

slide-74
SLIDE 74

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Phrases: <t> * <f> <e> + <t> * <f>

COS 301 - 2018 UMaine School of Computing and Information Science

Finding the handle

<e> <e> + <t> <e> + <t> * <f> <e> + <t> * ( <e> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + D ) <e> + <t> * ( <t> + D ) <e> + <t> * ( <f> + D ) <e> + <t> * ( <id> + D ) <e> + <t> * ( C + D ) <e> + <f> * ( C + D ) <e> + <id> * ( C + D ) <e> + B * ( C + D ) <t> + B * ( C + D ) <f> + B * ( C + D ) <id> + B * ( C + D )
 A + B * ( C + D )

Phrases: <t> * <f> <e> + <t> * <f> Simple phrase = handle: <t> * <f>

COS 301 - 2018 UMaine School of Computing and Information Science

Finding handles

Consider: <e> + <t> * <f> If have parse tree, know <t> * <f> is simple phrase But if had parse tree…wouldn’t have to parse! How to know <e> + <t> isn’t handle? Suppose we chose it as handle ⇒ <e> * <f> No rule RHS begins <e> * So <e> + <t> isn’t the handle Lookahead

slide-75
SLIDE 75

COS 301 - 2018 UMaine School of Computing and Information Science

LR(1)

How far to look ahead? Want minimal amount: ideally 1 token Grammars that support this: LR(1) grammars L: left-to-right (& bottom-up) parsing R: rightmost derivation (1): single token lookahead

COS 301 - 2018 UMaine School of Computing and Information Science

Bottom-up LR(1) parsing

Start with leftmost token If most recently-read leftmost tokens are handle Replace with LHS If not, then read next token Handle: if most recently-read if lookahead token doesn’t conflict with potential LHS

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-76
SLIDE 76

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-77
SLIDE 77

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-78
SLIDE 78

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-79
SLIDE 79

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-80
SLIDE 80

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-81
SLIDE 81

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-82
SLIDE 82

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-83
SLIDE 83

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> ) <e> + <t> * ( <e> ) Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> ) <e> + <t> * ( <e> ) <e> + <t> * <f> Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-84
SLIDE 84

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> ) <e> + <t> * ( <e> ) <e> + <t> * <f> <e> + <t> Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Sentential form: Next Rest <id> + <id> * ( <id> + <id> ) <id> + <id> * ( <id> + <id> ) <f> + <id> * ( <id> + <id> ) <t> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <id> * ( <id> + <id> ) <e> + <f> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) don’t replace <t> or <e> + <t> w/ <e>: no rule RHS starting w/ <e> * <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <id> + <id> ) <e> + <t> * ( <f> + <id> ) <e> + <t> * ( <t> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <id> ) <e> + <t> * ( <e> + <f> ) <e> + <t> * ( <e> + <t> ) <e> + <t> * ( <e> ) <e> + <t> * ( <e> ) <e> + <t> * <f> <e> + <t> <e> Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing

Intuitively, this is simple… …but how to implement?

slide-85
SLIDE 85

COS 301 - 2018 UMaine School of Computing and Information Science

Shift-reduce parsing

Shift-reduce parsing: Bottom-up parsing of LR(1) grammars Automates the process of finding handles CFG needs pushdown automaton ⇒ stack Top-down, recursive-descent parser: runtime stack Shift-reduce parser ⇒ explicit stack Stack: Contains parsing state Current right sentential form Only 2 actions: shift a token from input → stack reduce top-of-stack (n frames) → LHS Reduce only done when top n frames = handle

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-86
SLIDE 86

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-87
SLIDE 87

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-88
SLIDE 88

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-89
SLIDE 89

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-90
SLIDE 90

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-91
SLIDE 91

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-92
SLIDE 92

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id> + <id>| ) shift Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id> + <id>| ) shift <e> + <t> * ( <e> ) <id> + <id> * ( <id> + <id>)| reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-93
SLIDE 93

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id> + <id>| ) shift <e> + <t> * ( <e> ) <id> + <id> * ( <id> + <id>)| reduce <e> + <t> * <f> <id> + <id> * ( <id> + <id>)| reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id> + <id>| ) shift <e> + <t> * ( <e> ) <id> + <id> * ( <id> + <id>)| reduce <e> + <t> * <f> <id> + <id> * ( <id> + <id>)| reduce <e> + <t> <id> + <id> * ( <id> + <id>)| reduce Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

COS 301 - 2018 UMaine School of Computing and Information Science

Parsing example

Stack Input Next Action |<id> + <id> * ( <id> + <id> ) shift <id> <id>| + <id> * ( <id> + <id> ) reduce <f> <id>| + <id> * ( <id> + <id> ) reduce <t> <id>| + <id> * ( <id> + <id> ) reduce <e> <id>| + <id> * ( <id> + <id> ) shift <e> + <id> +| <id> * ( <id> + <id> ) shift <e> + <id> <id> + <id>| * ( <id> + <id> ) reduce <e> + <f> <id> + <id>| * ( <id> + <id> ) reduce <e> + <t> <id> + <id>| * ( <id> + <id> ) shift <e> + <t> * <id> + <id> *| ( <id> + <id> ) shift <e> + <t> * ( <id> + <id> * (| <id> + <id> ) shift <e> + <t> * ( <id> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <f> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <t> <id> + <id> * ( <id>| + <id> ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id>| + <id> ) shift <e> + <t> * ( <e> + <id> + <id> * ( <id> +| <id> ) shift <e> + <t> * ( <e> + <id> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <f> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> + <t> <id> + <id> * ( <id> + <id>| ) reduce <e> + <t> * ( <e> <id> + <id> * ( <id> + <id>| ) shift <e> + <t> * ( <e> ) <id> + <id> * ( <id> + <id>)| reduce <e> + <t> * <f> <id> + <id> * ( <id> + <id>)| reduce <e> + <t> <id> + <id> * ( <id> + <id>)| reduce <e> <id> + <id> * ( <id> + <id>)| DONE Parse: A + B * (C + D) Assume lex. analy. ⇒ <id> + <id> * ( <id> + <id> )

slide-94
SLIDE 94

COS 301 - 2018 UMaine School of Computing and Information Science

Shift-reduce parser

Consider all of stack + 1 character (for LR(1)) to determine what to do Problem: read input ⇒ stack grows ⇒ slower Solution: At any time, parser is in particular state Can think of it as a state machine Table-based implementation Index: state + lookahead Specifies what to do, next state

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsers

LR parser: table-based shift-reduce parser Small program Most knowledge of parsing encoded in parsing table Parsing table: built from grammar producing table can be difficult usually by automated tool (e.g., yacc) First LR (“canonical LR”) ← Don Knuth (1965) simpler LR algorithms used to simplify table-building (e.g., SLR, LALR)… …but work on smaller classes of grammars

COS 301 - 2018 UMaine School of Computing and Information Science

Advantages of LR parsers

Can be used for all programming languages Detect syntax errors as soon as possible (reading left-to-right) LR grammar class ⊃ LL grammar class (e.g., LR includes many left recursive grammars)

slide-95
SLIDE 95

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing

Knuth’s insight: entire history of parse is available (in stack) for parser to use to make decision There is a finite, small set of different parse situations that have occurred So the parse stack can contain the parser state

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsers

Uses a stack + input string At any given time, parser is considered to be in a particular, named state Stack alternates token/state

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsers

Parsing table – really two tables: Action table: state + next token ⇒ next action actions: shift & go to state; reduce by a rule; accept; error Goto table: state + token on TOS ⇒ next state Built by (e.g.) yacc or bison On error, call error-handling routine

slide-96
SLIDE 96

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: example

  • 1. E → E + T
  • 2. E → T
  • 3. T → T * F
  • 4. T → F
  • 5. F → (E)
  • 6. F → id

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: example

Stack Input Action id+id*id$ Shift 5 0id5 +id*id$ Reduce 6, goto 3 (0/F) 0F3 +id*id$ R4, goto 2 (0/T) 0T2 +id*id$ R2, goto 1 (0/E) 0E1 +id*id$ Shift 6 0E1+6 id*id$ Shift 5 0E1+6id5 *id$ R6, goto 3 (6/F) 0E1+6F3 *id$ R4, goto 9 (6/T) 0E1+6T9 *id$ Shift 7 0E1+6T9*7 id$ Shift 5 0E1+6T9*7id5 $ R6, goto 10 (7/F) 0E1+6T9*7F10 $ R3, goto9 (7/T) 0E1+6T9 $ R1, goto 1(0/E) 0E1 R Accept

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: example

Stack Input Action id+id*id$ Shift 5 0id5 +id*id$ Reduce 6, goto 3 (0/F) 0F3 +id*id$ R4, goto 2 (0/T) 0T2 +id*id$ R2, goto 1 (0/E) 0E1 +id*id$ Shift 6 0E1+6 id*id$ Shift 5 0E1+6id5 *id$ R6, goto 3 (6/F) 0E1+6F3 *id$ R4, goto 9 (6/T) 0E1+6T9 *id$ Shift 7 0E1+6T9*7 id$ Shift 5 0E1+6T9*7id5 $ R6, goto 10 (7/F) 0E1+6T9*7F10 $ R3, goto9 (7/T) 0E1+6T9 $ R1, goto 1(0/E) 0E1 R Accept

Which grammar rule to use

slide-97
SLIDE 97

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: example

Stack Input Action id+id*id$ Shift 5 0id5 +id*id$ Reduce 6, goto 3 (0/F) 0F3 +id*id$ R4, goto 2 (0/T) 0T2 +id*id$ R2, goto 1 (0/E) 0E1 +id*id$ Shift 6 0E1+6 id*id$ Shift 5 0E1+6id5 *id$ R6, goto 3 (6/F) 0E1+6F3 *id$ R4, goto 9 (6/T) 0E1+6T9 *id$ Shift 7 0E1+6T9*7 id$ Shift 5 0E1+6T9*7id5 $ R6, goto 10 (7/F) 0E1+6T9*7F10 $ R3, goto9 (7/T) 0E1+6T9 $ R1, goto 1(0/E) 0E1 R Accept

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: example

Stack Input Action id+id*id$ Shift 5 0id5 +id*id$ Reduce 6, goto 3 (0/F) 0F3 +id*id$ R4, goto 2 (0/T) 0T2 +id*id$ R2, goto 1 (0/E) 0E1 +id*id$ Shift 6 0E1+6 id*id$ Shift 5 0E1+6id5 *id$ R6, goto 3 (6/F) 0E1+6F3 *id$ R4, goto 9 (6/T) 0E1+6T9 *id$ Shift 7 0E1+6T9*7 id$ Shift 5 0E1+6T9*7id5 $ R6, goto 10 (7/F) 0E1+6T9*7F10 $ R3, goto9 (7/T) 0E1+6T9 $ R1, goto 1(0/E) 0E1 R Accept

COS 301 - 2018 UMaine School of Computing and Information Science

=

Stack Input Action id+id*id$ Shift 5 0id5 +id*id$ Reduce 6, goto 3 (0/F) 0F3 +id*id$ R4, goto 2 (0/T) 0T2 +id*id$ R2, goto 1 (0/E) 0E1 +id*id$ Shift 6 0E1+6 id*id$ Shift 5 0E1+6id5 *id$ R6, goto 3 (6/F) 0E1+6F3 *id$ R4, goto 9 (6/T) 0E1+6T9 *id$ Shift 7 0E1+6T9*7 id$ Shift 5 0E1+6T9*7id5 $ R6, goto 10 (7/F) 0E1+6T9*7F10 $ R3, goto9 (6/T) 0E1+6T9 $ R1, goto 1(0/E) 0E1 R Accept

slide-98
SLIDE 98

COS 301 - 2018 UMaine School of Computing and Information Science

LR parsing: For you

  • 1. E → E + T
  • 2. E → T
  • 3. T → T * F
  • 4. T → F
  • 5. F → (E)
  • 6. F → id

Use table to parse: id * (id +id)