tree generation

Post on 05-Feb-2016

31 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Tree Generation. Programming Language Principles Lecture 5. Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida. String-To-Tree Transduction. Can obtain derivation or abstract syntax tree. Tree can be generated top-down, or bottom-up. - PowerPoint PPT Presentation

TRANSCRIPT

Tree Generation

Prepared byManuel E. Bermúdez, Ph.D.

Associate ProfessorUniversity of Florida

Programming Language PrinciplesLecture 5

String-To-Tree Transduction

• Can obtain derivation or abstract syntax tree.

• Tree can be generated top-down, or bottom-up.

• We will show how to obtain1. Derivation tree top-down2. AST for the original grammar,

bottom-up.

Top-Down Generation of Derivation Tree• In each procedure, and for each

alternative, write out the appropriate production AS SOON AS IT IS KNOWN

Top-Down Generation of Derivation Tree (cont’d)proc S; {S → begin SL end

→ id := E; }case Next_Token of

T_begin : Write(S → begin SL end);

Read(T_begin);SL;Read(T_end);

Top-Down Generation of Derivation Tree (cont’d)

T_id : Write(S → id :=E;);

Read(T_id);Read (T_:=);E;Read (T_;);

otherwise Errorend

end;

Top-Down Generation of Derivation Tree (cont’d)proc SL; {SL → SZ}

Write(SL → SZ);S;Z;

end;

proc E; {E → TY}Write(E → TY);T;Y;

end;

Top-Down Generation of Derivation Tree (cont’d)proc Z; {Z → SZ

→ }case Next_Token of

T_begin, T_id: Write(Z → SZ); S; Z;

T_end: Write(Z → );otherwise Error;

endend;

Top-Down Generation of Derivation Tree (cont’d)proc Y; {Y → +TY

→ }if Next_Token = T_+ then

Write (Y → +TY);Read (T_+);T;Y;

else Write (Y → );end;

Top-Down Generation of Derivation Tree (cont’d)proc T; {T → PX}

Write (T → PX);P;X

end;

proc X;{X → *T → }

Top-Down Generation of Derivation Tree (cont’d)

if Next_Token = T_* thenWrite (X → *T);Read (T_*);T;

else Write (X → );end;

Top-Down Generation of Derivation Tree (cont’d)

proc P;{P → (E)→ id }

case Next_Token ofT_(: Write (P → (E));

Read (T_(); E; Read (T_)); T_id: Write (P → id); Read (T_id);otherwise Error;

end;

Notes

• The placement of the Write statements is obvious precisely because the grammar is LL(1).

• Can build the tree “as we go”, or have it built by a post-processor.

Example• Input String:

begin id := (id + id) * id; end• Output:

S → begin SL endSL → SZS → id :=E;E → TYT → PXP → (E)E → TYT → PXP → idX →

Y → +TYT → PXP → idX → Y → X → *TT → PXP → idX → Y → Z →

Bottom-up Generation of the Derivation Tree• We could have placed the write

statements at the END of each phrase, instead of the beginning. If we do, the tree will be generated bottom-up.

• In each procedure, and for each alternative, write out the production A AFTER is parsed.

Bottom-up Generation of the Derivation Tree (cont’d)proc S;{S → begin SL end

→ id := E; }case Next_Token ofT_begin: Read (T_begin);

SL;Read (T_end);

Write (S → begin SL end); T_id: Read (T_id); Read (T_:=);E;Read (T_;);Write (S → id:=E;);otherwise Error;

end;

Bottom-up Generation of the Derivation Tree (cont’d)proc SL; {SL → SZ}

S;Z;Write(SL → SZ);

end;

proc E; {E → TY}T;Y;Write(E → TY);

end;

Bottom-up Generation of the Derivation Tree (cont’d)proc Z; {Z → SZ

→ }case Next_Token of

T_begin, T_id: S; Z; Write(Z → SZ);

T_end: Write(Z → );otherwise Error;

endend;

Bottom-up Generation of the Derivation Tree (cont’d)

proc Y; {Y → +TY → }

if Next_Token = T_+ thenRead (T_+);T;Y;Write (Y → +TY);

else Write (Y → );end;

Bottom-up Generation of the Derivation Tree (cont’d)proc T; {T → PX }

P;X;Write (T → PX)

end;

proc X;{X → *T → }

if Next_Token = T_* thenRead (T_*);T;Write (X → *T);

else Write (X → );end

Bottom-up Generation of the Derivation Tree (cont’d)proc P;{P → (E)

→ id }case Next_Token of

T_(: Read (T_(); E; Read (T_));

Write (P → (E));T_id: Read (T_id);

Write (P → id);otherwise Error;

end;

Notes

• The placement of the Write statements is still obvious.

• The productions are emitted as procedures quit, not as they start.

Notes (cont’d)

• Productions emitted in reverse order, i.e., the sequence of productions must be used in reverse order to obtain a right-most derivation.

• Again, can built tree “as we go” (need stack of trees), or later.

Example• Input String: begin id := (id + id) * id; end• Output:

P → idX →T → PXP → idX →T → PXY → Y → +TYE → TYP → (E)

P → idX → T → PXX → *TT → PXY → E → TYS → id:=E; Z → SL → SZS → begin SL end

Tree Generation

Prepared byManuel E. Bermúdez, Ph.D.

Associate ProfessorUniversity of Florida

Programming Language PrinciplesLecture 5

top related