Extensão da LF2

BNF

BNF da extensão da LF2 com suporte a parâmetros opcionais

Programa ::= Expressao

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

| 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" ListArg "=" Expressao

DecComposta ::= DeclaracaoFuncional "," DeclaracaoFuncional

Arg ::= ArgRequerido | ArgOpcional

ArgRequerido ::= Id

ArgOpcional ::= Id "?" "(" Expressao ")"

ListArg ::= Arg | Arg ListArg

Aplicacao:= Expressao"(" ListExp ")" | Expressao"(" ")"

ListExp ::= Expressao | Expressao, ListExp