A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Exercício de Aquecimento Prof. André Luis Meneses Silva 1.

Apresentações semelhantes


Apresentação em tema: "Exercício de Aquecimento Prof. André Luis Meneses Silva 1."— Transcrição da apresentação:

1 Exercício de Aquecimento Prof. André Luis Meneses Silva 1

2 Sintaxe de Straight-Line Stm Stm ; Stm | id := Exp | print ( ExpList ) Exp Exp BinOp Exp | ( Stm, Exp ) | id | num ExpList Exp, ExpList | Exp BinOp + | - | * | / 2

3 3 a := 5+3 ; b := (print(a, a-1), 10*a) ; print(b) CompoundStm AssignStm aPlusExp NumExp CompoundStm AssignStmPrintStm 5 3 SingleExpList IdExp b b ESeqExp PrintStm TimesExp NumExpIdExp 10 a PairExpList IdExp a SingleExpList MinusExp IdExp NumExp a 1 Árvore abstrata

4 Representação em Java Em geral Uma classe abstrata para c/construção lingüística (cada não terminal: Stm, Exp,...) Para c/produção, uma classe estende a respectiva classe abstrata Na árvore, cada nó interno representa uma instância de alguma das classes concretas 4

5 5 public abstract class Stm { } public class CompoundStm extends Stm { public Stm stm1,stm2; public CompundStm(Stm s1, Stm s2) { stm1=s1; stm2=s2; } } public class AssignStm extends Stm { public String id; public Exp exp; public AssignStm(String i, Exp e) { id = i; exp = e; } } public class PrintStm extends Stm { public ExpList exps; public PrintStm(ExpList es) { exps = es; } }

6 6 public abstract class Exp { } public class IdExp extends Exp { public Sring id; public IdExp(String i) { id = i; } } public class NumExp extends Exp { public int num; public NumExp(int n) { num = n; } } public class PlusExp extends Exp { public Exp left, right; public PlusExp(Exp l, Exp r) { left = l; right = r; } } // Similar para MinusExp, // TimesExp e DivExp public class EseqExp extends Exp { public Stm stm; public Exp exp; public EseqExp(Stm s, Exp e) { stm = s; exp = e; } }

7 7 public abstract class ExpList { } public class SingleExpList extends ExpList { public Exp exp; public SingleExp(Exp e) { exp = e; } } public class PairExpList extends ExpList { public Exp head; public ExpList tail; public PairExpList(Exp e, ExpList l) { head=e; tail = l; } }

8 8 Stm prog = new CompoundStm( new AssignStm("a", new PlusExp(new NumExp(5), new NumExp(3) ), new CompoundStm ( new AssignStm ( ) Sem nos preocupar com parsing, podemos representar nossos programas em java assim:

9 Exercício Implementar um interpretador para Straight- Line. Implemente um PrettyPrinter para Straight-Line. PrettyPrinter possui um método interprete que recebe qualquer uma das classes de straight-line e imprime sua representação. Implemente uma classe Table que mapeia identificadores para inteiros. Table irá modelar a memória do seu programa Table deve ter métodos: update e lookup 9


Carregar ppt "Exercício de Aquecimento Prof. André Luis Meneses Silva 1."

Apresentações semelhantes


Anúncios Google