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
|
ExpBinaria
|
ExpDeclaracao
|
Id
|
Aplicacao
|
IfThenElse
Valor ::=
ValorConcreto
|
ValorAbstrato
ValorAbstrato ::= ValorFuncao
ValorConcreto ::=
ValorInteiro
|
ValorBooleano
|
ValorString
ValorFuncao ::= “fn” ListId “.” Expressao
ExpUnaria ::=
“-“ Expressao
|
“not” Expressao
|
“length” Expressao
ExpBinaria ::=
Expressao “+” Expressao
|
Expressao “-“ Expressao
|
Expressao “and” Expressao
|
Expressao “or” 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
PartialInstantiatorVisitor
Ambiente
AmbienteCompilacao
AmbienteExecucao
Contexto
ContextoCompilacao
ContextoExecucao