110 likes | 212 Vues
Linguagem Funcional 2. Listas e Compreensão de Listas. Equipe: Gustavo Cabral gflc@cin.ufpe.br Leonardo Medeiros lmm@cin.ufpe.br Maici Leite mdl@cin.ufpe.br Professor: Augusto Sampaio acas@cin.ufpe.br. Roteiro. Funcionalidades introduzidas Modificações na BNF Objetos introduzidos
E N D
Linguagem Funcional 2 Listas e Compreensão de Listas Equipe: Gustavo Cabral gflc@cin.ufpe.br Leonardo Medeiros lmm@cin.ufpe.br Maici Leite mdl@cin.ufpe.br Professor: Augusto Sampaio acas@cin.ufpe.br
Roteiro • Funcionalidades introduzidas • Modificações na BNF • Objetos introduzidos • Testes realizados
Funcionalidades introduzidas • Listas • Verificação implícita de tipos; • Incluir operações sobre listas: • cons (:), head, tail e concat (++) • Declaração de listas; • Podem ser parâmetros ou retornadas por funções; • Uma lista pode ser vazia; • A ordem é relevante: [3,4] <> [4,3] • Exemplos • [1,2,3]++[1,2,3]++[4,5,6] • 1:([2,3]++(10:[1,2,3])++[4,5,6]) • head([1+1,2+2,3+3]) • tail([1+1,2+2,3+3])
Funcionalidades introduzidas • Novos operadores aritméticos: • >, <, >= e <= • Para tornar mais prático a utilização das expressões condicionais adicionamos estes operadores.
Funcionalidades introduzidas • Compreensão de Listas • É uma maneira de descrever listas seguindo uma notação mais forma; • Formado: [exp | qualificador,...,qualificador] • exp é uma expressão • qualificador pode ser: • Gerador da forma: lista de elementos; • Condição: filtro para os elementos provenientes dos geradores. • Exemplo: • Para duplicarmos [1,7,3], fazemos [2*A|A<-[1,7,3]] • [x+1+y|x<-[1+1,2+2,3+3], x<=5, x>3, y<-[4,5,6], y>=5] • head( tail( [ x+1 | x<-[1+1,2+2,3+3] ] ))
Modificações na BNF • Lista: • ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista • ValorLista ::= "[“ [SeqExpressao] "]" • SeqExpressao ::= Expressao | Expressao "," SeqExpressao
Modificações na BNF • Novos operadores: ExpessaoBinaria ::= ExpressaoBasica ( ...| ">" ExpressaoUnaria | ">=" ExpressaoUnaria | "<" ExpressaoUnaria | "<=" ExpressaoUnaria | "++" ExpressaoUnaria | ":" ExpressaoBinaria)*
Modificações na BNF • Compreensão de Lista: ExpressaoBasica ::= Valor | Id | ExpressaoUnaria | ... | CompreensaoLista
Modificações na BNF • CompreensaoLista ::= "[" Expressao "|" Qualificador "]" • Qualificador ::= GeradorDaForma ( "," GeradorDaForma | "," Expressao )* • GeradorDaForma := Id "<-" Expressao
Objetos introduzidos • Valores: • ValorLista • Declarações: • Gerador da Forma • Expressões: • ComprLista • ExpCons • ExpDeclaracao • ExpHead • ExpTail • Util • ProdutoCartesiano
Testes realizados Para termos bastante controle nos erros introduzidos a cada alteração na linguagem utilizamos o JUnit, que auxiliou bastante na corretude da linguagem e ganho de produtividade. Sem falar na interface gráfica que é bastante amigável. Arquitetura do Teste: Classe Java que extende de junit.framework.TestCase com o unit teste a ser realizado, arquivo txt com o programa a ser avaliado. public void testConsLista() throws Exception { InputStream file = new FileInputStream("src/plp/teste/ConsListas.txt"); AllTests.parser.ReInit(file, null); Programa p = AllTests.parser.Input(); boolean tipoOk = p.checaTipo(); if (tipoOk) { Valor v = p.executar(); if ( v.toString().toString().compareTo("[5,6,7]")!= 0) { fail();}} else { fail();}}