Академический Документы
Профессиональный Документы
Культура Документы
2301373
Outline
Parsing Process
Grammars
Context-free grammar
Backus-Naur Form (BNF)
Parsing Process
Call the scanner to get tokens
Build a parse tree from the stream of
tokens
Grammar
Example
G= ({S, A, B, C}, {a, b, c}, P, S)
P= { SSABC, BA AB, CB BC, CA AC,
SA a, aA aa, aB ab, bB bb,
bC bc,
cC cc}
Context-Free Grammar
Examples
EEOE
E (E)
E id
O+
OO*
O/
S
S
S
S
SS
(S)S
()
Derivation
A sequence of replacement of a
substring in a sentential form.
Definition
Let G = (V, T, P, S ) be a CFG, , ,
be strings in (V U T)* and A is in V.
A G if A is in P.
Examples
S SS | (S)S | () |
S
SS
(S)SS
(S)S(S)S
(S)S(())S
((S)S)S(())S
((S)())S(())S
((())())S(())S
((())()) (())S
((())())(())
E E O E | (E) | id
O+|-|*|/
E
EOE
(E) O E
(E O E) O E
* ((E O E) O E) O E
((id O E)) O E) O E
((id + E)) O E) O E
((id + id)) O E) O E
* ((id + id)) * id) + id
derivation is a replaceme
derivation is a replaceme
m.
m.
E
EOE
(E) O E
(E O E) O E
(id O E) O E
(id + E) O E
(id + id) O E
(id + id) * E
(id + id) * id
EOE
E O id
E * id
(E) * id
(E O E) * id
(E O id) * id
(E + id) * id
(id + id) * id
L(G) = {w| S
w}.
* G
Right/Left Recursive
A grammar is a left
recursive if its produ
ction rules can gener
ate a derivation of th
e form A * A X.
Examples:
E E O id | (E) | id
E F + id | (E) | id
F E * id | id
F + id
E * id + id
A grammar is a right
recursive if its
production rules can
generate a derivation
of the form A * X A.
Examples:
E id O E | (E) | id
E id + F | (E) | id
F id * E | id
id + F
id + id * E
Parse Tree
F
i
d
E
i
i
d
E
E
i
d
Preorder
numbering
E1
E
i
d
E
5
i
d
E
2
i
i
d
Reverse of d
postorder numbering
E+E
id + E
id + E * E
id + id * E
id + id * id
E+E
E+E*E
E + E * id
E + id * id
id + id * id
(1)
(2)
(3)
(4)
(5)
(1)
(2)
(3)
(4)
(5)
Grammar: Example
List of parameters in:
Function definition
function sub(a,b,c)
Function call
sub(a,1,2)
<argList>
id , <arglist>
id, id , <arglist>
<argList>
(id ,)* id
<arglist> , id
<arglist> , id, id
id (, id )*
Grammar: Example
List of parameters
If zero parameter is
allowed, then ?
Work ?
NO!
Generate
id , id , id ,
Grammar: Example
List of parameters
If zero parameter is
allowed, then ?
Work ?
NO!
Generate
id , id , id ,
Grammar: Example
List of statements:
No statement
One statement:
s;
s; s; s;
A statement can be a
block of statements.
{s; s; s;}
+
E
id
2
E
*
E
id
3
id1
id
2
id3
ex
p
tru
e
if
st elsePa
rt
else
st
return
tru
e
st
return
Ambiguous Grammar
A grammar is ambiguous if it can
generate two different parse trees for o
ne string.
Ambiguous grammars can cause
inconsistency in parsing.
E+E
E-E
E*E
E/E
id
E
E
id1
+
E
id
2
E
*
E
E
id3
E
id
1
id3
id2
Ambiguity in Expressions
solved by precedence
solved by associativity
Precedence
EE+E
EE-E
EE*E
EE/E
E id
EE+E
EE-E
EF
FF*F
FF/F
F id
E
E
id1
+
E
E
*
id
2
E
E
E
id3 id
1
E
id3
id2
F
id
1
F
id
2
F
id
3
Precedence (contd)
EE+E|E-E|F
FF*F|F/F|X
X ( E ) | id
E
F
(
E
E
+
F
X
)
E
id
1
id
2
id
3
F
X
id
4
Associativity
Left-associative
operators
EE+F|E-F|F
FF*X|F/X|X
X ( E ) | id
id4
id3
( E )
E
F
X
id1
F
X
id2
{ if (0)
{ if (1) St else St } }
0
if (
if (
St
E )
1
St
IfSt
E )
0
IfSt
else St
if
{ if (0)
{ if (1) St }
else St }
St
else St
IfSt
(
E
1
St
St
MatchedSt | UnmatchedSt
UnmatchedSt
if (E) St |
St
if (E) MatchedSt else
UnmatchedSt
MatchedSt
UnmatchedSt
if (E) MatchedSt else MatchedSt|
...
if
( E )
E
0|1
St
if (0) if (1) St else St
= if (0)
if (1) St else St
MatchedSt
if (
E ) MatchedStelseMatchedS
Optional Part
Syntax Diagrams
nonterminals: IfSt
terminals: id
sequences and choices:
Examples
X ::= (E) | id
id
;
F
St
St
+
Reading Assignment
Chapter 3