cse 431s worksheet 2 - washington university in st. louis...first sets α derives-λ first s false r...
TRANSCRIPT
CSE 431S
Worksheet 2
Washington University
Spring 2013
Context-Free Grammar
• Create a grammar that recognizes the syntax of regular expressions.
– Examples: • “x”
• “x|x”
• “xx”
• “x*”
• “x|xx*”
• “(x|x)*”
– Note: we’re using ‘x’ as a placeholder terminal for a character
Context-Free Grammar
• We want the resulting parse tree to mirror
the precedence and association of the
regular expression operators.
– Example: “x|xx” is the same as “x|(xx)”, not
“(x|x)x”.
Context-Free Grammar
• Example: “x|xx” is the same as “x|(xx)”, not
“(x|x)x”.
– So the “xx” should be in a subtree.
x |
x x
Context-Free Grammar
• Similar to our grammars for arithmetic
expressions
– Have a “level” of our grammar for each
operation, with lower precedence at higher
level
Context-Free Grammar
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
Why can we not use R -> R ‘|’ R
for the first rule?
Context-Free Grammar
S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
Add end-of-file symbol.
Derivation
• Show the derivation of “x|xx*” S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
Derivation
• Show the derivation of “x|xx*”
S => R $
=> R '|' C $
=> C '|' C $
=> K '|' C $
=> P '|' C $
=> x '|' C $
=> x '|' C K $
=> x '|' K K $
=> x '|' P K $
=> x '|' x K $
=> x '|' x P * $
=> x '|' x x * $
S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
LL(1) Parsing
• Create a grammar suitable for top-down
parsing.
– Will our grammar work as is? S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
LL(1) Parsing
• Must eliminate left recursion and common
prefixes.
A → A α
| β
A → β A’
A’ → α A’
| λ
Eliminate left recursion
becomes
Eliminate common prefixes
X → αβ1
| αβ2
X → αX’
X’ → β1
| β2
becomes
LL(1) Parsing
S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Derives Lambda α Derives-λ
S
R
R’
C
C’
K
K’
P
S -> R $
R -> C R’
R’ -> | C R’
R’ -> λ
C -> K C’
C’ -> K C’
C’ -> λ
K -> P K’
K’ -> *
K’ -> λ
P -> ( R )
P -> x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Derives Lambda α Derives-λ
S False
R False
R’ True
C False
C’ True
K False
K’ True
P False
S -> R $ False
R -> C R’ False
R’ -> | C R’ False
R’ -> λ True
C -> K C’ False
C’ -> K C’ False
C’ -> λ True
K -> P K’ False
K’ -> * False
K’ -> λ True
P -> ( R ) False
P -> x False
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
First Sets α Derives-λ First
S False
R False
R’ True
C False
C’ True
K False
K’ True
P False
S -> R $ False
R -> C R’ False
R’ -> | C R’ False
R’ -> λ True
C -> K C’ False
C’ -> K C’ False
C’ -> λ True
K -> P K’ False
K’ -> * False
K’ -> λ True
P -> ( R ) False
P -> x False
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
First Sets α Derives-λ First
S False x, (
R False x, (
R’ True |
C False x, (
C’ True x, (
K False x, (
K’ True *
P False x, (
S -> R $ False x, (
R -> C R’ False x, (
R’ -> | C R’ False |
R’ -> λ True
C -> K C’ False x, (
C’ -> K C’ False x, (
C’ -> λ True
K -> P K’ False x, (
K’ -> * False *
K’ -> λ True
P -> ( R ) False (
P -> x False x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Follow Sets α Derives-λ First Follow
S False x, (
R False x, (
R’ True |
C False x, (
C’ True x, (
K False x, (
K’ True *
P False x, (
S -> R $ False x, (
R -> C R’ False x, (
R’ -> | C R’ False |
R’ -> λ True
C -> K C’ False x, (
C’ -> K C’ False x, (
C’ -> λ True
K -> P K’ False x, (
K’ -> * False *
K’ -> λ True
P -> ( R ) False (
P -> x False x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Follow Sets α Derives-λ First Follow
S False x, (
R False x, ( $, )
R’ True | $, )
C False x, ( |, $, )
C’ True x, ( |, $, )
K False x, ( x, (, |, $, )
K’ True * x, (, |, $, )
P False x, ( *, x, (, |, $, )
S -> R $ False x, (
R -> C R’ False x, (
R’ -> | C R’ False |
R’ -> λ True
C -> K C’ False x, (
C’ -> K C’ False x, (
C’ -> λ True
K -> P K’ False x, (
K’ -> * False *
K’ -> λ True
P -> ( R ) False (
P -> x False x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Predict Sets α Derives-λ First Follow Predict
S False x, (
R False x, ( $, )
R’ True | $, )
C False x, ( |, $, )
C’ True x, ( |, $, )
K False x, ( x, (, |, $, )
K’ True * x, (, |, $, )
P False x, ( *, x, (, |, $, )
S -> R $ False x, (
R -> C R’ False x, (
R’ -> | C R’ False |
R’ -> λ True
C -> K C’ False x, (
C’ -> K C’ False x, (
C’ -> λ True
K -> P K’ False x, (
K’ -> * False *
K’ -> λ True
P -> ( R ) False (
P -> x False x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
Predict Sets α Derives-λ First Follow Predict
S False x, (
R False x, ( $, )
R’ True | $, )
C False x, ( |, $, )
C’ True x, ( |, $, )
K False x, ( x, (, |, $, )
K’ True * x, (, |, $, )
P False x, ( *, x, (, |, $, )
S -> R $ False x, ( x, (
R -> C R’ False x, ( x, (
R’ -> | C R’ False | |
R’ -> λ True $, )
C -> K C’ False x, ( x, (
C’ -> K C’ False x, ( x, (
C’ -> λ True |, $, )
K -> P K’ False x, ( x, (
K’ -> * False * *
K’ -> λ True x, (, |, $, )
P -> ( R ) False ( (
P -> x False x x
S -> R $
R -> C R’
R’-> ‘|’ C R’
| λ
C -> K C’
C’-> K C’
| λ
K -> P K’
K’-> *
| λ
P -> ( R )
| x
LL(1) Parsing
• Is this grammar top-down parsable?
– For each nonterminal, the predict sets for its
productions must be disjoint.
LR(0) Parsing
• Create the LR(0) states using our original
grammar. S -> R $
R -> R ‘|’ C
| C
C -> C K
| K
K -> P *
| P
P -> ( R )
| x
LR(0) Parsing
• Create the start state.
State 0:
S -> . R $
LR(0) Parsing
• Calculate the closure.
State 0:
S -> . R $ 1
R -> . R ‘|’ C 1
R -> . C 2
C -> . C K 2
C -> . K 3
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
LR(0) Parsing
State 0:
S -> . R $ 1
R -> . R ‘|’ C 1
R -> . C 2
C -> . C K 2
C -> . K 3
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
State 1:
S -> R . $ 7
R -> R . ‘|’ C 8
LR(0) Parsing State 0: S -> . R $ 1
R -> . R ‘|’ C 1
R -> . C 2
C -> . C K 2
C -> . K 3
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
State 1: S -> R . $ 7
R -> R . ‘|’ C 8
State 2: R -> C .
C -> C . K 9
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . X 6
State 3: C -> K .
State 4: K -> P . * 10
K -> P .
State 5: P -> ( . R ) 11
R -> . R ‘|’ C 11
R -> . C 2
C -> . C K 2
C -> . K 3
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
State 6: P -> x .
State 7: S -> R $ .
State 8: R -> R ‘|’ . C 12
C -> . C K 12
C -> . K 3
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
State 9: C -> C K .
State 10: K -> P * .
State 11: P -> ( R . ) 13
R -> R . ‘|’ C 8
State 12: R -> R ‘|’ C .
C -> C . K 9
K -> . P * 4
K -> . P 4
P -> . ( R ) 5
P -> . x 6
State 13: P -> ( R ) .
LR(0) Parsing
• Is this grammar LR(0) parsable?
– No
• Shift-reduce conflicts in states 2, 4, and 12.