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

Programa ::= Expressao

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

DefFuncao

Tipo
TipoFuncao
TipoPolimorfico

AmbienteCompilacao
ContextoCompilacao

AmbienteFuncional
AmbienteExecucaoFuncional
ContextoFuncional
ContextoExecucaoFuncional

Exemplos de Programas

Exemplo

Parser

Functional1