Funcional 1
- Estende a Linguagem de Expressões 2 com funções parametrizadas e recursivas
- O corpo de uma função é uma expressão e a aplicação da função a um argumento retorna um valor
- O contexto inclui dois componentes:
- mapeamento de identificadores em valores
- mapeamento de identificadores (nomes de função) em definições de função
- Um programa é uma expressão
Fontes
Valor ::= ValorConcreto
Expressao ::= ExpUnaria
| ExpDeclaracao
| Id
| Aplicacao
| IfThenElse
Valor ::= ValorConcreto
ValorConcreto ::= ValorInteiro
| ValorBooleano
| ValorString
ExpUnaria ::= ExpMenos “-“ Expressao
| ExpNot “not” Expressao
| ExpLength “length” Expressao
ExpBinaria ::= ExpSoma Expressao “+” Expressao
| ExpSub Expressao “-“ Expressao
| ExpAnd Expressao “and” Expressao
| ExpOr Expressao “or” Expressao
| ExpEquals Expressao “==” Expressao
| ExpConcat 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 ::= Id”(“ ListExp “)”
ListExp ::= Expressao | Expressao, ListExp
IfThenElse ::= “if” Expressao “then” Expressao “else” Expressao
Classes Auxiliares
Tipo
TipoFuncao
TipoPolimorfico
AmbienteCompilacao
ContextoCompilacao
AmbienteFuncional
AmbienteExecucaoFuncional
ContextoFuncional
ContextoExecucaoFuncional