Rafael Lourenço de Lima Chehab 15/0045123
Raphael Soares 14/0160299
Felipe Franco 15/0125071
Jean Pierre Sissé 09/0139879
A main está na classe ProgramaPrincipal no package br.unb.poo.mh em src/
Após iniciada a execução deve-se sair escrevendo "quit"
Para abrir um arquivo a.txt escreva load(a.txt), sem aspas. Esse arquivo deve conter somente uma funcao
Imprima set para ativar a verificacao de tipos
Imprima reset para desativar a verificacao de tipo
Aviso: Se for utilizada uma função recursiva a verificacao de tipos deve estar desativada, caso contrario pode ocorrer um problema de execucao
Para avaliar uma expressão, basta escrevê-la, exemplo:
Haskell> 1 + 2
:: Inteiro
3
Haskell>
Ao usar uma aplicação de funçao deve-se colocar parentesis ao redor dos parâmetros, porém dentro dos parentêsis não é necessário nenhum separador. Exemplo:
Haskell> soma a b = a + b
:: Inteiro
Haskell> soma (1 2)
:: Inteiro
3
O mini haskell utilizado possui as seguintes funcionalidades: subtracao, parentesis, multiplicacao, lista, ifthenelse, concatenar, guarda e guardas, soma, or, not, and, lessthan, lessorequal, greaterthan, greaterorequal, equal, divisor, declaracaofuncao, aplicacaofuncao.
A prioridade entre as expressoes é, da primeira a ser executada até a menor:
identificador; lista; valorBooleano; valorInteiro; parentesis; aplicacaoFuncao; ifThenElse; concatenar; multiplicacao; expressaoDivisor; expressaoSoma; expressaoSubtracao; expressaoGreaterOrEqual; expressaoLessOrEqual; expressaoGreaterThan; expressaoLessThan; expressaoEqual; expressaoNot; expressaoAnd; expressaoOr.
Na pasta examples/, há um exemplo para cada expressao, como também um arquivo com a descricao de uso. Como por example subtraco.hs e subtracao_desc.txt
Para fazer o Parser do texto utilizou-se ANTLR, a gramática e classe dele estão no packet br.unb.poo.mh.grammar. A versão utilizada é 4.5.3, e a instalação foi feito seguindo o manual de https://github.com/antlr/antlr4/blob/master/doc/getting-started.md
Observacao: Ao verificar a cobertura, não se atingiu os 90%. Isso se deve em parte às classes geradas pelo ANTLR, que tiveram uma baixa de cobertura baixa, porém esse valor não pode ser muito alterado, uma vez que o acesso ao Parser é limitado à algumas funções.
Sem contar o ANTLR, a cobertura foi de 85,2%