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

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

Exercício de Aquecimento

Apresentações semelhantes


Apresentação em tema: "Exercício de Aquecimento"— Transcrição da apresentação:

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

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 → + | - | * | / Itálico para símbolos não terminais id e num, estariam ser definidos no léxico

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

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

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; } Não é muito O.O. – falta encapsulamento – Mas serve para nosso proprósito

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 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 Sem nos preocupar com parsing, podemos representar nossos programas em java assim:
Stm prog = new CompoundStm( new AssignStm("a", new PlusExp(new NumExp(5), new NumExp(3) ), new CompoundStm ( new AssignStm ( ..... )

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


Carregar ppt "Exercício de Aquecimento"

Apresentações semelhantes


Anúncios Google