15 Syntax Parsing
15 Syntax Parsing
Programming Languages:
Syntax Description and Parsing
Computer Engineering,METU
27 May 2009
Programming Languages:Syntax Description and Parsing
Outline
Programming Languages:Syntax Description and Parsing
Describing Syntax
Introduction
Introduction
Definitions
Definitions
A Grammar Rule
Sample Grammar
Parse Tree
a = a * b
hstmti
hidi = hexpri
hidi * hidi
a b
Programming Languages:Syntax Description and Parsing
Describing Syntax
Context Free Grammar
Ambigous Grammars
Rewritten Grammar
hstmti
hstmti → hidi = hexpri hidi = hexpri
hexpri → hexpri + htermi | htermi
a hexpri + htermi
htermi → htermi * hfactori | hfactori
htermi htermi * hfactori
hfactori → hidi | ( hexpri )
hidi → a | b | c hfactori hfactori hidi
hidi hidi c
a b
htermi and hexpri has different precedence.
Once inside of htermi, there is no way to derive +
Only one parse possible
Programming Languages:Syntax Description and Parsing
Describing Syntax
Associativity
Associativity
Sample Grammar
a = a + b * c * a ^ b ^ c
hasgni
hidi = hexpri
a hexpri + htermi
a hidi c b hidi
b c
Programming Languages:Syntax Description and Parsing
Parsing
Compilation
Compilation
source code
Lexical Analysis
sequence of lexemes
Syntax analysis
parse tree
intermediate code
WHL LP ID LT I L I T RP LB
Code ID LP RP SC
generation ID PLEQ I L I T SC
RB
machine code
hwhlstmti
Programming Languages:Syntax Description and Parsing
Parsing
Parsing
Parsing
Top-down Parsing
Start from the starting non-terminal, apply grammar rules to
reach the input sentence
hassigni 7→ a = hexpr i 7→ a = hexpr i + htermi 7→
a = htermi + htermi 7→ a = hfacti + htermi 7→
a = a + htermi 7→ a = a + htermi ∗ hfacti 7→
a = a + hfacti ∗ hfacti 7→ a = a + b ∗ hfacti 7→
a=a+b∗a
Simplest form gives leftmost derivation of a grammar
processing input from left to right.
Left recursion in grammar is a problem. Elimination of left
recursion needed.
Deterministic parsing: Look at input symbols to choose next
rule to apply.
recursive descent parsers, LL family parsers are top-down
parsers
Programming Languages:Syntax Description and Parsing
Parsing
Top-down Parsing
LL Parsers
Bottom-up Parsing
a = a + b ∗ a 7→ a = hfacti + b ∗ a 7→ a = htermi + b ∗ a 7→
a = hexpr i + b ∗ a 7→ a = hexpr i + hfacti ∗ a 7→
a = hexpr i + htermi ∗ a 7→ a = hexpr i + htermi ∗ hfacti 7→
a = hexpr i + htermi 7→ a = hexpr i 7→ hassigni