120 likes | 210 Views
PLP – Extensão da LI2 Implementação de ARRAY. 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. Nova BNF. Programa ::= Comando
E N D
PLP – Extensão da LI2Implementação de ARRAY 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
Nova 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 ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorArray ValorArray ::= “{” ListaExpressao “}”
Nova BNF (cont.) 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
Nova BNF (cont.) DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" "{" Comando "}" ListaDeclaracaoParametro ::= Tipo Id | Tipo Id "," ListaDeclaracaoParametro Tipo ::= "string" | "int" | "boolean" | "TipoArray" While ::= "while" Expressao "do" Comando IfThenElse ::= "if" Expressao "then" Comando "else" Comando IO ::= "write" "(" Expressao ")" | "read" "(" IdAbstrato ")" ChamadaProcedimento ::= "call" Id "(" [ ListaExpressao ] ")" ListaExpressao ::= Expressao | Expressao, ListaExpressao
Classes Alteradas • Tipo (plp.expressions1.util)- private Tipo tipoInterno; - Novo tipo -> TIPO_ARRAY - public boolean eArray()
Classes Alteradas • Lista (plp.imperative1.util) Foi alterada da forma funcional (head, tail) para forma indexada, para melhor representação de array.
Classes Alteradas • Atribuicao (plp.imperative1.command) - Método executar : a[2+3]:= Expressao Checa se o IdAbstrato é uma Indexação * Recupera, em uma lista, os elementos do array * Seta o índice * Valida o índice * lista.set(indice, expressao.avaliar(ambiente)); * ambiente.changeValor(indexacao.getId(), lista);
Classes Alteradas • DeclaracaoVariavel (plp.imperative1.declaration)- private boolean isArray; (no const. isArray = false) - Método checaTipoif (isArray) { Tipo tipoInterno = ((ValorArray)parametro2).getTipoInterno(ambiente); ambiente.map(parametro1, parametro2.getTipo(ambiente)); parametro1.getTipo(ambiente).setTipoInterno(tipoInterno); }
Classes Criadas • IdAbstrato (plp.expressions2.expressions) • ValorArray (plp.imperative3)- extends ValorConcreto - Método checaTipo Checa se os elementos da ListaExpressao são todos do mesmo tipo. Ex.: {1, 2+3, 5, true}- Método getTipoInterno Retorna o tipo do primeiro elemento da lista.
Classes Criadas • ValorArray (plp.imperative3) (cont.)- Método get (int indice) Retorna o elemento correspondente.- Método size Retorna o tamanho da lista, ou seja, o número de elementos do array.- Método set(int indice, Expressao exp) Armazena o valor da expressão na posição indicada pelo índice.
Classes Criadas • Indexacao (plp.imperative3)- implements IdAbstrato- Método avaliarValorArray lista = (ValorArray) amb.get(id); indice = getIndice(amb); Valida o índice return (Valor) lista.get(indice);- Método checaTipoid.checaTipo(amb) && exp.checaTipo(amb) && exp.getTipo(amb).eInteiro()
Dúvidas ?