Principles of Programming Languages
h"p://www.di.unipi.it/~andrea/Dida2ca/PLP-15/
- Prof. Andrea Corradini
Department of Computer Science, Pisa
- From DSA to Regular Expression
- Top-down parsing
Principles of Programming Languages - - PowerPoint PPT Presentation
Principles of Programming Languages h"p://www.di.unipi.it/~andrea/Dida2ca/PLP-15/ Prof. Andrea Corradini Department of Computer Science, Pisa Lesson 7 From DSA to Regular Expression Top-down parsing MoBvaBons: exercise 7(b)
– Not easy…. – A soluBon: (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* – How can we get it?
2
1 1 A B D C 1 1
automaton accepBng the language
defining the language accepted by the automaton?
3
Regular Expressions DeterminisBc Finite Automata Non-DeterminisBc Finite Automata Right-linear (Regular) Grammars Thompson algorithm Subset construcBon MinimizaBon (ParBBon/Refinement)
4
5
1 1 A B D C 1 1 A → ε | 1B | 0D B → 1A | 0C C → 0B | 1D D → 0A | 1C
6
7
8
1) SubsBtute D in A and C A → ε | 1B | 0( 0A | 1C) B → 1A | 0C C → 0B | 1(0A | 1C) 2) SubsBtute B in A and C A → ε | 1(1A | 0C) | 0(0A | 1C) C → 0(1A | 0C) | 1(0A | 1C) 3) Put C in form C = α | βC A → ε | 1(1A | 0C) | 0(0A | 1C) C → 01A | 10A | (00 | 11)C 4) Solve C: C = (00 | 11)*(01A | 10A) 5) Factorize C in A A → ε | 11A | 00A | (10 | 01)C 6) SubsBtute C in A A → ε | 11A | 00A | (10 | 01) (00 | 11)*(01A | 10A) 7) Put A in form A = α | βA A → ε | (11 | 00 | (10 | 01) (00 | 11)*(01 | 10))A 8) Solve A: A = (11 | 00 | (10 | 01) (00 | 11)*(01 | 10))* The other soluBon: (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* A → ε | 1B | 0D B → 1A | 0C C → 0B | 1D D → 0A | 1C
9
Regular Expressions DeterminisBc Finite Automata Non-DeterminisBc Finite Automata Right-linear (Regular) Grammars Thompson algorithm Subset construcBon MinimizaBon (ParBBon/Refinement) Least fixed-point
languages Easy! Directly! Sec?on 3.9 of Dragon Book
10
11
Lexical Analyzer Parser and rest of front-end
Symbol Table
12
{wcw | w ∈ (a | b)*} {anbmcnd m | n > 0,m > 0}
13
14
15
16
id + id
17
18
19
20
⇒ C → C A BR C B | a b BR C B | a B | C C | a
CR → A BR C B CR | C CR | ε
21
22
– stmt ::= if expr then stmt else stmt | if expr then stmt
– stmt ::= if expr then stmt stmt’ – stmt' ::= else stmt | ε
23
24
25
26
27
28
29
procedure rest(); begin if lookahead in FIRST(+ term rest) then match(‘+’); term(); rest() else if lookahead in FIRST(- term rest) then match(‘-’); term(); rest() else if lookahead in FOLLOW(rest) then return else error() end;
30
PredicBve parsing program (driver) Parsing table M
31
for each producBon A → α do for each a ∈ FIRST(α) do add producBon A → α to M[A,a] enddo if ε ∈ FIRST(α) then for each b ∈ FOLLOW(A) do add A → α to M[A,b] enddo endif enddo
32
id + * ( ) $ E E → T ER E → T ER ER ER → + T ER ER → ε ER → ε T T → F TR T → F TR TR TR → ε TR → * F TR TR → ε TR → ε F F → id F → ( E ) A → α FIRST(α) FOLLOW(A) E → T ER ( id $ ) ER → + T ER + $ ) ER → ε ε T → F TR ( id + $ ) TR → * F TR * + $ ) TR → ε ε F → ( E ) ( * + $ ) F → id id * + $ )
33
34
Stack $E $ERT $ERTRF $ERTRid $ERTR $ER $ERT+ $ERT $ERTRF Input id+id*id$ id+id*id$ id+id*id$ id+id*id$ +id*id$ +id*id$ +id*id$ id*id$ id*id$ Production applied E → T ER T → F TR F → id
ER → + T ER T → F TR F → id
id + * ( ) $ E E → T ER E → T ER ER ER → + T ER ER → ε ER → ε T T → F TR T → F TR TR TR → ε TR → * F TR TR → ε TR → ε F F → id F → ( E )
Stack $ERTRid $ERTR $ERTRF* $ERTRF $ERTRid $ERTR $ER $ Input id*id$ *id$ *id$ id$ id$ $ $ $
TR → * F TR F → id
ER → ε
35
a b e i t $ S S → a S → i E t S SR SR SR → ε SR → e S SR → ε E E → b A → α FIRST(α) FOLLOW(A) S → i E t S SR i e $ S → a a SR → e S e e $ SR → ε ε E → b b t
36
37
Error is detected here Prefix
38
39
id + * ( ) $ E E → T ER E → T ER synch synch ER ER → + T ER ER → ε ER → ε T T → F TR synch T → F TR synch synch TR TR → ε TR → * F TR TR → ε TR → ε F F → id synch synch F → ( E ) synch synch FOLLOW(E) = { ) $ } FOLLOW(ER) = { ) $ } FOLLOW(T) = { + ) $ } FOLLOW(TR) = { + ) $ } FOLLOW(F) = { + * ) $ }
40
id + * ( ) $ E E → T ER E → T ER synch synch ER ER → + T ER ER → ε ER → ε T T → F TR synch T → F TR synch synch TR insert * TR → ε TR → * F TR TR → ε TR → ε F F → id synch synch F → ( E ) synch synch
Can then continue here
41
id + * ( ) $ E E → T ER E → T ER synch synch ER ER → + T ER ER → ε ER → ε T T → F TR synch T → F TR synch synch TR TR → F TR TR → ε TR → * F TR TR → ε TR → ε F F → id synch synch F → ( E ) synch synch
42
Grammar: S → a A B e A → A b c | b B → d Shib-reduce corresponds to a rightmost derivaBon: S ⇒rm a A B e ⇒rm a A d e ⇒rm a A b c d e ⇒rm a b b c d e Reducing a sentence: a b b c d e a A b c d e a A d e a A B e S