Extensão da LF2
BNF
BNF da extensão da LF2 com suporte a parâmetros opcionais
Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse
Valor ::= ValorConcreto | ValorAbstrato
ValorAbstrato ::= ValorFuncao
ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString
ValorFuncao ::= "fn" ListArg "." Expressao
ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao
ExpBinaria ::= Expressao "+" Expressao
ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao
DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecComposta
DecVariavel ::= "var" Id "=" Expressao
DecFuncao ::= "fun" ListArg "=" Expressao
DecComposta ::= DeclaracaoFuncional "," DeclaracaoFuncional
Arg ::= ArgRequerido | ArgOpcional
ArgRequerido ::= Id
ArgOpcional ::= Id "?" "(" Expressao ")"
Aplicacao:= Expressao"(" ListExp ")" | Expressao"(" ")"
ListExp ::= Expressao | Expressao, ListExp