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

Programa ::= Expressao

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

ListId ::= Id
       | Id, ListId

Aplicacao ::= Expressao “(“ ListExp “)”

ListExp ::= Expressao
       | Expressao, ListExp

Classes auxiliares

Ambiente
AmbienteCompilacao
AmbienteExecucao
TipoLista
ListaVaziaException

Exemplos de Programas

Exemplo

Parser

Funcional3