Funcional 3
- Estende a Linguagem Funcional 2 com listas e compreensão de listas
- Uma Lista é um valor
- Portanto pode ser passado como parâmetro para uma função
- Um programa é uma expressão
Fontes
Expressao ::= Valor
| ExpUnaria
| ExpBinaria
| ExpDeclaracao
| Id
| Aplicacao
| IfThenElse
Valor ::= ValorConcreto
| ValorAbstrato
ValorAbstrato ::= ValorFuncao
ValorConcreto ::= ValorInteiro
| ValorBooleano
| ValorString
| ValorLista
ValorFuncao ::= “fn” Id Id “.” Expressao
ExpUnaria ::= ExpMenos
| ExpNot
| ExpLength
| ExpHead
| ExpTail
| ExpCompreensaoLista
ExpCompreensaoLista ::= Expressao Gerador
| Expressao Gerador Filtro
Gerador ::= “for” Id “in” Expressao
| “for” Id “in” Expressao [”,” Gerador]
Filtro ::= “if” Expressao
ExpBinaria ::= Expressao “+” Expressao
| Expressao “-“ Expressao
| Expressao “*” Expressao
| Expressao “>” Expressao
| Expressao “<” Expressao
| Expressao “and” Expressao
| Expressao “or” Expressao
| Expressao “==” Expressao
| Expressao “++” Expressao
| Expressao “..” Expressao
| Expressao “:” Expressao
| Expressao “^^” Expressao
ExpDeclaracao ::= “let” DeclaracaoFuncional “in” Expressao
DeclaracaoFuncional ::= DecVariavel
| DecFuncao
| DecComposta
DecVariavel ::= “var” Id “=” Expressao
DecFuncao ::= “fun” ListId “=” Expressao
DecComposta ::= DeclaracaoFuncional “,” DeclaracaoFuncional
Aplicacao ::= Expressao “(“ ListExp “)”
ListExp ::= Expressao
| Expressao, ListExp
Classes auxiliares
Ambiente
AmbienteCompilacao
AmbienteExecucao
TipoLista
ListaVaziaException