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

Programa ::= Expressao

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

Exemplos de Programas

Exemplo

Parser

Funcional2