1 / 11

Linguagem Funcional 2

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

jeneil
Download Presentation

Linguagem Funcional 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Roteiro • Funcionalidades introduzidas • Modificações na BNF • Objetos introduzidos • Testes realizados

  3. 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])

  4. Funcionalidades introduzidas • Novos operadores aritméticos: • >, <, >= e <= • Para tornar mais prático a utilização das expressões condicionais adicionamos estes operadores.

  5. 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] ] ))

  6. Modificações na BNF • Lista: • ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista • ValorLista ::= "[“ [SeqExpressao] "]" • SeqExpressao ::= Expressao | Expressao "," SeqExpressao

  7. Modificações na BNF • Novos operadores: ExpessaoBinaria ::= ExpressaoBasica ( ...| ">" ExpressaoUnaria | ">=" ExpressaoUnaria | "<" ExpressaoUnaria | "<=" ExpressaoUnaria | "++" ExpressaoUnaria | ":" ExpressaoBinaria)*

  8. Modificações na BNF • Compreensão de Lista: ExpressaoBasica ::= Valor | Id | ExpressaoUnaria | ... | CompreensaoLista

  9. Modificações na BNF • CompreensaoLista ::= "[" Expressao "|" Qualificador "]" • Qualificador ::= GeradorDaForma ( "," GeradorDaForma | "," Expressao )* • GeradorDaForma := Id "<-" Expressao

  10. Objetos introduzidos • Valores: • ValorLista • Declarações: • Gerador da Forma • Expressões: • ComprLista • ExpCons • ExpDeclaracao • ExpHead • ExpTail • Util • ProdutoCartesiano

  11. 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();}}

More Related