# AST Generation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Concepts Lecture 9.

## Presentation on theme: "AST Generation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Concepts Lecture 9."— Presentation transcript:

AST Generation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Concepts Lecture 9

Replacing Recursion with Iteration Not all the nonterminals are needed. The recursion in SL, X, Y and Z can be replaced with iteration.

Replacing Recursion with Iteration (cont’d) proc S; {S → begin SL end → id := E; case Next_Token of T_begin :Read(T_begin); repeat S; until Next_Token  {T_begin,T_id}; Read(T_end); T_id : Read(T_id); Read (T_:=); E; Read (T_;); otherwiseError; end end; Replaces recursion on Z. Replaces call to SL. SL SL → S Z Z → S Z → }

Replacing Recursion with Iteration (cont’d) proc E; {E → TY Y → +TY → } T; while Next_Token = T_+ do Read (T_+); T; od end; Replaces recursion on Y.

Replacing Recursion with Iteration (cont’d) proc T; {T → PX X → *T → } P; if Next_Token = T_* thenRead (T_*); T; end; Replaces call to X.

Replacing Recursion with Iteration (cont’d) proc P;{P → (E) → id } case Next_Token of T_(: Read (T_(); E; Read (T_)); T_id: Read (T_id); otherwise Error; end end;

Construction of Derivation Tree for the Original Grammar (Bottom Up) proc S; { (1)S → begin SL end (2)S → begin SL end → id := E; → id := E; SL → SZ SL → SL S Z → SZ → S → } case Next_Token of T_begin : Read(T_begin); S; Write (SL → S); while Next_Token in {T_begin,T_id} do S; Write (SL → SL S); od Read(T_end); Write (S → begin SL end);

Construction of Derivation Tree for the Original Grammar (Bottom Up) (cont’d) T_id : Read(T_id); Read (T_:=); E; Read (T_;); Write (S → id :=E ;); otherwise Error; end end;

Construction of Derivation Tree for the Original Grammar (Bottom Up) (cont’d) proc E; {(1)E → TY (2) E → E+T Y → +TY → T → } T; Write (E → T); while Next_Token = T_+ do Read (T_+); T; Write (E → E+T); od end

Construction of Derivation Tree for the Original Grammar (Bottom Up) (cont’d) proc T; {(1)T → PX (2) T → P*T X → *T → P → } P; if Next_Token = T_* thenRead (T_*); T; Write (T → P*T) else Write (T → P); end;

Construction of Derivation Tree for the Original Grammar (Bottom Up) (cont’d) proc P;{(1)P → (E) (2)P → (E) → id → id } // SAME AS BEFORE end;

Example Input String : begin id := (id + id) * id; end Output : P → id T → P E → T P → id T → P E → E+T P → (E) P → id T → P T → P*T E → T S → id:=E; SL → S S → begin SL end

Generating the Abstract Syntax Tree, Bottom Up, for the Original Grammar proc S; { S → begin S+ end  'block' → id := E;  'assign' var N:integer; case Next_Token of T_begin :Read(T_begin); S; N:=1; while Next_Token in {T_begin,T_id} do S; N:=N+1; od Read(T_end); Build Tree ('block',N); T_id : Read(T_id); Read (T_:=); E; Read (T_;); Build Tree ('assign',2); otherwise Error end end; Assume this builds a node. Build Tree (‘x’,n) pops n trees from the stack, builds an ‘x’ node as their parent, and pushes the resulting tree.

Generating the Abstract Syntax Tree, Bottom Up, for the Original Grammar (cont’d) proc E; {E → E+T  '+' → T } T; while Next_Token = T_+ do Read (T_+) T; Build Tree ('+',2); od end; Left branching in tree!

Generating the Abstract Syntax Tree, Bottom Up, for the Original Grammar (cont’d) proc T; {T → P*T  '*' → P } P; if Next_Token = T_* thenRead (T_*) T; Build Tree ('*',2); end; Right branching in tree!

Generating the Abstract Syntax Tree, Bottom Up, for the Original Grammar (cont’d) proc P;{P → (E) → id } // SAME AS BEFORE, // i.e.,no trees built end;

Example Input String : begin id 1 := (id 2 + id 3 ) * id 4 ; end Sequence of events : id 1 id 2 id 3 id 4 BT( ' + ',2) BT( ' * ',2) BT( ' assign ',2) BT( ' block ',1)

Summary Bottom-up or top-down tree construction. Original or modified grammar. Derivation Tree or Abstract Syntax Tree. Technique of choice (Hint: project) Top-down, recursive descent parser. Bottom-up tree construction for the original grammar.

AST Generation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Concepts Lecture 9

Download ppt "AST Generation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Concepts Lecture 9."

Similar presentations