Emanuella Aleixo ( [email protected]) José Antônio ([email protected]) Juliana Mafra ([email protected]) Marcela Balbino ([email protected]) Prof.: Augusto Sampaio PLP – Extensão da LI2 Implementação de ARRAY
Jan 09, 2016
Emanuella Aleixo ( [email protected])José Antônio ([email protected])
Juliana Mafra ([email protected])Marcela Balbino ([email protected])
Prof.: Augusto Sampaio
PLP – Extensão da LI2Implementação de ARRAY
2/11
Nova BNFPrograma ::= Comando
Comando ::= Atribuicao | ComandoDeclaracao | While | IfThenElse | IO | Comando ";" Comando | Skip | ChamadaProcedimento
Skip ::= Atribuicao ::= IdAbstrato “:=” ExpressaoIdAbstrato ::= Id | IndexacaoExpressao ::= Valor | ExpUnaria | ExpBinaria | IdAbstrato Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorArrayValorArray ::= “{” ListaExpressao “}”
3/11
Nova BNF (cont.)
ExpUnaria ::= "-" Expressao | "not" Expressao | "length" ExpressaoExpBinaria ::= 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 "=" ExpressaoDeclaracaoComposta ::= Declaracao "," Declaracao
4/11
Nova BNF (cont.)
DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" "{" Comando "}" ListaDeclaracaoParametro ::= Tipo Id | Tipo Id "," ListaDeclaracaoParametro Tipo ::= "string" | "int" | "boolean" | "TipoArray"While ::= "while" Expressao "do" ComandoIfThenElse ::= "if" Expressao "then" Comando "else" ComandoIO ::= "write" "(" Expressao ")" | "read" "(" IdAbstrato ")" ChamadaProcedimento ::= "call" Id "(" [ ListaExpressao ] ")" ListaExpressao ::= Expressao | Expressao, ListaExpressao
5/11
Classes Alteradas
• Tipo (plp.expressions1.util)
- private Tipo tipoInterno; - Novo tipo -> TIPO_ARRAY - public boolean eArray()
6/11
Classes Alteradas
• Lista (plp.imperative1.util)
Foi alterada da forma funcional (head, tail) para forma indexada, para melhor representação de array.
7/11
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);
8/11
Classes Alteradas
• DeclaracaoVariavel (plp.imperative1.declaration)
- private boolean isArray; (no const. isArray = false) - Método checaTipo if (isArray) {
Tipo tipoInterno = ((ValorArray)parametro2).getTipoInterno(ambiente);
ambiente.map(parametro1, parametro2.getTipo(ambiente));
parametro1.getTipo(ambiente).setTipoInterno(tipoInterno);
}
9/11
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 getTipoInternoRetorna o tipo do primeiro elemento da lista.
10/11
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.
11/11
Classes Criadas
• Indexacao (plp.imperative3)- implements IdAbstrato- Método avaliar
ValorArray lista = (ValorArray) amb.get(id);indice = getIndice(amb);Valida o índicereturn (Valor) lista.get(indice);
- Método checaTipoid.checaTipo(amb) &&exp.checaTipo(amb) && exp.getTipo(amb).eInteiro()
12
Dúvidas
?