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

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

Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino

Apresentações semelhantes


Apresentação em tema: "Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino"— Transcrição da apresentação:

1 Emanuella Aleixo ( emanuellaaleixo17@gmail.com) José Antônio (jamrr@cin.ufpe.br) Juliana Mafra (j_mafra@hotmail.com) Marcela Balbino (marcelabalbinosm@gmail.com) Prof.: Augusto Sampaio PLP – Extensão da LI2 Procedimentos de Alta Ordem

2 2/24 Apresentação Definição Alterações na BNF Alterações no Parser Simplificações no Ambiente Classes Criadas Classes Alteradas Testes

3 3/24 Procedimentos de Alta Ordem São procedimentos que podem receber outros procedimentos como parâmetro, pois agora eles passam a possuir o status de valor. Ex.: { var p = "Procedimento", var a = "Alta Ordem", var n = 10, proc concat (string i, string a, int m) { i := i ++ " de " ++ a; write(i) ; write(m) }, proc pAltaOrdem( int num, [string, string, int] prod) { call prod(p, a, n) }; call pAltaOrdem(n, concat) }

4 4/24 Alterações na BNF Programa ::= Comando Comando ::= Atribuicao | ComandoDeclaracao | While | IfThenElse | IO | Comando ";" Comando | Skip | ChamadaProcedimento Skip ::= Atribuicao ::= IdAbstrato “:=” Expressao IdAbstrato ::= Id | Indexacao Expressao ::= Valor | ExpUnaria | ExpBinaria | IdAbstrato Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorProcedimento ValorProcedimento ::= “pc” ListaDeclaracaoParametro “.” Comando ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorArray

5 5/24 Alterações na BNF ValorArray ::= “{” ListaExpressao “}” ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao Indexacao ::= Id “[“ Expressao “]” ComandoDeclaracao :: = "{" Declaracao ";" Comando "}" Declaracao ::= DeclaracaoVariavel | DeclaracaoProcedimento | DeclaracaoComposta DeclaracaoVariavel ::= "var" Id "=" Expressao | "array" Id "=" Expressao DeclaracaoComposta ::= Declaracao "," Declaracao

6 6/24 Alterações na BNF DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" "{" Comando "}" ListaDeclaracaoParametro ::= DeclaracaoParametro | DeclaracaoParametro "," ListaDeclaracaoParametro DeclaracaoParametro::= Tipo Id Tipo ::= "string" | "int" | "boolean" | "TipoArray" | "TipoProcedimento“ TipoProcedimento:= Tipo | Tipo "," TipoProcedimento While ::= "while" Expressao "do" Comando IfThenElse ::= "if" Expressao "then" Comando "else" Comando

7 7/24 Alterações no Parser Declaracao PDeclaracao(): { Declaracao retorno; } { ( LOOKAHEAD(PDeclaracaoVariavel() ) retorno = PDeclaracaoComposta() | LOOKAHEAD(PDeclaracaoProcedimento() ) retorno = PDeclaracaoComposta() | retorno = PDeclaracaoVariavel() | retorno = PDeclaracaoProcedimento() ) {return retorno;} }

8 8/24 Alterações no Parser DeclaracaoComposta PDeclaracaoComposta(): { Declaracao d1; Declaracao d2; } { d1 = PDeclaracaoVariavel() d2 = PDeclaracao() {return new DeclaracaoComposta(d1, d2);} | d1 = PDeclaracaoProcedimento() d2 = PDeclaracao() {return new DeclaracaoComposta(d1, d2);} }

9 9/24 Alterações no Parser Tipo PTipo(): { Tipo tipo; Tipo tipoInterno; } { ( ( {tipo = Tipo.TIPO_INTEIRO;} | {tipo = Tipo.TIPO_BOOLEANO;} | {tipo = Tipo.TIPO_STRING;} ) [ LOOKAHEAD ( ) {tipoInterno = tipo; tipo = Tipo.TIPO_ARRAY; tipo.setTipoInterno(tipoInterno);} ] | tipo = PTipoProcedimento() ) { return tipo; }

10 10/24 Alterações no Parser Tipo PTipoProcedimento(): { List listTipos = new ArrayList(); Tipo tipo; } { LOOKAHEAD ( ) { return new TipoProcedimento(listTipos); } | tipo = PTipo() { listTipos.add(tipo); } ( ( tipo = PTipo()) { listTipos.add(tipo); } )* { return new TipoProcedimento(listTipos); }

11 11/24 Alterações no Parser Valor PValor() : { Valor retorno; } { ( retorno = PValorInteiro() | retorno = PValorBooleano() | retorno = PValorString() | retorno = PValorArray() | retorno = PValorProcedimento() ) { return retorno; }

12 12/24 Alterações no Parser Valor PValorProcedimento() : { ListaDeclaracaoParametro parametrosFormais; Comando comando; } { parametrosFormais = PListaDeclaracaoParametro() comando = PComando() { return new ValorProcedimento(parametrosFormais, comando); }

13 13/24 Alterações no Parser ListaDeclaracaoParametro PListaDeclaracaoParametro(): { DeclaracaoParametro parametro; List retorno = new ArrayList(); } { ( parametro = PDeclaracaoParametro() ) { retorno.add(parametro); } ( parametro = PDeclaracaoParametro() ) { retorno.add(parametro); } )* )? { return new ListaDeclaracaoParametro(retorno); }

14 14/24 Alterações no Parser DeclaracaoParametro PDeclaracaoParametro(): { Id id; Tipo tipo; } { tipo = PTipo() id = PId() { return new DeclaracaoParametro(id, tipo); }

15 15/24 Simplificações no Ambiente Como procedimento agora é um Valor, não se faz necessário fazer um mapeamento diferenciado para associar identificadores de procedimentos às respectivas definições. Necessidade de apenas um único mapeamento.

16 16/24 Simplificações no Ambiente AmbienteCompilacaoImperativa2 (plp.imperative2.memory) public void mapParametrosProcedimento(IdAbstrato idArg, ListaDeclaracaoParametro parametrosId) public ListaDeclaracaoParametro getParametrosProcedimento(IdAbstrato idArg) ContextoCompilacaoImperativa2 (plp.imperative2.memory) AmbienteExecucaoImperativa2 (plp.imperative2.memory) public void mapProcedimento(Id idArg, Procedimento procedimentoId) public Procedimento getProcedimento(Id idArg) ContextoExecucaoImperativa2 (plp.imperative2.memory)

17 17/24 Classes Criadas ValorProcedimento (plp.imperative3) - extends DefProcedimento - implements ValorAbstrato - public ValorProcedimento(ListaDeclaracaoParametro parametrosFormais, Comando comando) { super(parametrosFormais, comando); } - public Valor avaliar(AmbienteExecucao amb) throws...{ return this; }

18 18/24 Classes Criadas ValorProcedimento (plp.imperative3) (cont.) - public boolean checaTipo(AmbienteCompilacao amb) throws... { return this.getTipo(amb) != null; } - public Tipo getTipo(AmbienteCompilacao amb) throws...{ List list = new ArrayList (); ListaDeclaracaoParametro parametrosFormais2 = getParametrosFormais(); for (DeclaracaoParametro declaracaoParametro : parametrosFormais2) { list.add(declaracaoParametro.getTipo()); } return new TipoProcedimento(list);

19 19/24 Classes Criadas TipoProcedimento (plp.imperative3) - extends Tipo - private List listTipo; // Compara os parâmetros formais com os parâmetros reais public boolean checaTipo(List tiposParametrosReais) { return this.listTipo.equals(tiposParametrosReais); }

20 20/24 Classes Alteradas Tipo (plp.expressions1.util) - Novo tipo -> TIPO_PROC - public boolean eProc()

21 21/24 Classes Alteradas DeclaracaoProcedimento (plp.imperative2.declaration) - Construtor: public DeclaracaoProcedimento(Id nome, DefProcedimento defProcedimento) public DeclaracaoProcedimento(IdAbstrato nome, ValorProcedimento valorProcedimento) - ChecaTipo: ambiente2.mapParametrosProcedimento(parametro1, parametrosFormais); ambiente.incrementa(); ambiente.map(parametro1, parametro2.getTipo(ambiente)); resultado = parametrosFormais.checaTipo(ambiente); ambiente =parametrosFormais.declaraParametro(ambiente); resultado = resultado && comando.checaTipo(ambiente); return resultado;

22 22/24 Classes Alteradas DeclaracaoProcedimento (plp.imperative2.declaration) - Elabora: ((AmbienteExecucaoImperativa2) ambiente).mapProcedimento(parametro1,new Procedimento(parametrosFormais, parametro2)); ((AmbienteExecucaoImperativa) ambiente).map(parametro1,parametro2);

23 23/24 Classes Alteradas ChamadaProcedimento (plp.imperative2.command) - executar: Procedimento procedimento = ambiente.getProcedimento(nomeProcedimento); ValorProcedimento procedimento = (ValorProcedimento) ambiente.get(nomeProcedimento); - checaTipo: ambiente.incrementa(); Tipo tipo = ambiente.get(this.nomeProcedimento); if(!tipo.eProc()){ return false; } TipoProcedimento tipoProc = (TipoProcedimento) tipo; List tiposParametrosReais = parametrosReais.getTipos(ambiente); resposta = tipoProc.checaTipo(tiposParametrosReais); ambiente.restaura(); return resposta;

24 24/24 Dúvidas ?


Carregar ppt "Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino"

Apresentações semelhantes


Anúncios Google