Funcional 2
- Estende a Linguagem Funcional 1 com funções de alta ordem
- Uma função passa a ser um valor
- O contexto inclui um único componente:
- mapeamento de identificadores em valores
- Portanto, o resultado da avaliação de uma expressão pode ser uma função, uma função pode ser argumento de outra função, …
- Um programa é uma expressão
Fontes
Expressao ::= Valor
| ExpUnaria
| ExpDeclaracao
| Id
| Aplicacao
| IfThenElse
Valor ::= ValorConcreto
| ValorAbstrato
ValorAbstrato ::= ValorFuncao
ValorConcreto ::= ValorInteiro
| ValorBooleano
| ValorString
ValorFuncao ::= “fn” ListId “.” Expressao
ExpUnaria ::= ExpMenos
| ExpNot
| ExpLength
ExpBinaria ::= ExpSoma
| ExpSub
| ExpAnd
| ExpOr
| ExpEquals
| ExpConcat
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
PartialInstantiatorVisitor
Ambiente
AmbienteCompilacao
AmbienteExecucao
Contexto
ContextoCompilacao
ContextoExecucao