Download presentation
Presentation is loading. Please wait.
Published byWhitney Lewis Modified over 9 years ago
1
Compiler Principles Winter 2012-2013 Compiler Principles Exercises on scanning & top-down parsing Roman Manevich Ben-Gurion University
2
Scanning question 1 Write a regular expression for positive integers where every three consecutive digits, starting from the right, are separated by a _ – Examples: 23 1_000 2_784_153 – Negative examples: 1_0 1_5422 2
3
Scanning question 1 Write a regular expression for positive integers where every three consecutive digits, starting from the right, are separated by a _ – Examples: 23 1_000 2_784_153 – Negative examples: 1_0 1_5422 Answer: D = 0 | 1 | 2 … | 9 Small = D | DD | DDD Three = DDD R = Small (_Three)* 3
4
Parsing question 1 Consider the grammar below S ( L ) | a L L, S | S 1.show a parse tree for each of the following 1.(a, a) 2.(a, (a, a)) 4
5
Answer 5 a,a() SS L L S a, ( S L S )L
6
Parsing question 2 Consider the grammar G L L, a | a – What is the language generated by G? – Eliminate the left-recursion in G – Write a non-left-recursive version without ε productions – Construct an LL(1) parser and run it on a, a, a 6
7
Parsing question 2 Consider the grammar G L L, a | a – What is the language generated by G? – Eliminate the left-recursion in G – Write a non-left-recursive version with ε productions – Is the resulting grammar LL(1)? Answer – The language given by the regular expression (a,)* a – L a M M , a M | ε – L a | a M M , a M |, a – The grammar contains FIRST-FIRST conflicts for both L and M and therefore it is not LL(1) 7
8
Parsing question 3 Consider the grammar G1 below X P P P a P b Q: Is it ambiguous? 8
9
Parsing question 3 Consider the grammar G1 below X P P P a P b Q: Is it ambiguous? A: since the only non-terminal with alternatives is P and the first of its two alternatives ({a} and {b}) the grammar is LL(1). All LL(1) grammars are unambiguous 9
10
Parsing question 4 Consider the following grammar E a ( S ) w t E a ( S ) w b S S ; c | c – Construct an LL(1) parser, applying any transformations necessary if the grammar is not in LL(1) – Hint: move the ) down to help transformations – Apply the parser to the input a (c; c) w b Note: the following solution is over-complicated since there is an implicit constraint – no epsilon productions are allowed. Otherwise the solution is pretty simple. 10
11
Answer The grammar E a ( S ) w t E a ( S ) w b S S ; c | c will have a FIRST-FIRST conflict for E, since the first two rules start with ‘a ( S ) w’. We therefore apply left-factoring and obtain E a ( S ) E’ E’ w b | w t S S ; c | c 11
12
Answer The grammar E a ( S ) E’ E’ w b | w t S S ; c | c Is left-recursive on S so we eliminate the left- recursion and obtain the grammar E a ( S ) E’ E’ w b | w t S c | c ; S 12
13
Answer Let’s compute FIRST sets for E a ( S ) E’ E’ w b | w t S c | c ; S FIRST( S c) = FIRST(c ; S) = {c} FIRST(w b)=FIRST(w t) = {w} so there are FIRST-FIRST conflict. We apply left-factoring to both E’ and S and obtain E a ( S ) E ’ E’ w E ’’ E ’’ b | t S c S’ S’ ε | ; S Now if we apply substitution for S’ we will just get back to a left- recursive grammar. Time to use the hint 13
14
Answer Starting from E a ( S ) E ’ E’ w E ’’ E ’’ b | t S c | c ; S Let’s move ) from E to S E a ( S E’ E’ w E ’’ E ’’ b | t S c ) | c ; S Now let’s apply left-factoring to S and obtain: E a ( S E’ E’ w E ’’ E ’’ b | t S c S’ S’ ) | ; S 14
15
Answer Let’s compute FIRST sets for (1) E a ( S E ’ (2) E’ w E ’’ (3) E ’’ b (4) E ’’ t (5) S c S ’ (6) S ’ ) (7) S ’ ; S FIRST(E) = {a} FIRST(E’) = {w} FIRST(E’’) = {b, t} FIRST( S ) = {c} FIRST( S ’) = {), ;} There are no conflicts so the grammar is in LL(1) 15
16
Parsing table ;)ctbw(a 1E 2E’ 43E’’ 5S 76S’ 16
17
Running on a ( c; c ) w b 17 Input suffixStack contentMove a ( c; c ) w b $E$ predict(E, a) = E a ( S E ’ a ( c; c ) w b $ a ( S E ’ $ match(a, a) ( c; c ) w b $ ( S E ’ $ match( ‘(‘, ‘(‘) c; c ) w b $ S E ’ $ predict(S, c) = S c S ’ c; c ) w b $ c S ’ E ’ $ match(c, c) ; c ) w b $ S ’ E ’ $ predict(S’, ;) = S ’ ; S ; c ) w b $ ; S E ’ $ match( ‘(;, ‘;‘) c ) w b $ S E ’ $ predict(S, c) = S c S ’ c ) w b $ c S’ E ’ $ match(c, c) ) w b $ S’ E ’ $ predict(S’, ‘)’) = S ’ ) ) w b $ ) E’ $match( ‘)‘, ‘)‘) w b $E’ $ predict(E’, w) = E’ w E ’’ w b $ w E ’’ $ match(w, w) b $E’’ $ predict(E’’, b) = E ’’ b b $ match(b, b) $$
18
Running on a ( c; c ) w b 18 Input suffixStack contentMove a ( c; c ) w b $E$ predict(E, a) = E a ( S E ’ a ( c; c ) w b $ a ( S E ’ $ match(a, a) ( c; c ) w b $ ( S E ’ $ match( ‘(‘, ‘(‘) c; c ) w b $ S E ’ $ predict(S, c) = S c S ’ c; c ) w b $ c S ’ E ’ $ match(c, c) ; c ) w b $ S ’ E ’ $ predict(S’, ;) = S ’ ; S ; c ) w b $ ; S E ’ $ match( ‘(;, ‘;‘) c ) w b $ S E ’ $ predict(S, c) = S c S ’ c ) w b $ c S’ E ’ $ match(c, c) ) w b $ S’ E ’ $ predict(S’, ‘)’) = S ’ ) ) w b $ ) E’ $match( ‘)‘, ‘)‘) w b $E’ $ predict(E’, w) = E’ w E ’’ w b $ w E ’’ $ match(w, w) b $E’’ $ predict(E’’, b) = E ’’ b b $ match(b, b) $$ Since the input has been read and the stack is empty – the parsing was successful and the input is accepted
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.