{% #include %} %token PROGRAM IDENTIFICADOR END ; %% inicio: PROGRAM IDENTIFICADOR (declaracoes)* corpo END declaracoes: declaracaoVariaveis |declaracaoFuncoes |declaracaoProcedimento declaracaoVariaveis: tipo IDENTIFICADOR (VIRGULA IDENTIFICADOR)* declaracaoFuncoes: FUNCTION IDENTIFICADOR ABRE_PARENTESE listaParametros FECHA_PARENTESE AS tipo declaracaoVariaveis* corpo IDENTIFICADOR OP_IGUAL ( valor ) END FUNCTION valor: VALOR_STRING | VALOR_NUMBER | VALOR_BOOLEAN listaParametros: IDENTIFICADOR AS tipo ( VIRGULA IDENTIFICADOR AS tipo )* declaracaoProcedimento: SUB IDENTIFICADOR ABRE_PARENTESE listaParametros FECHA_PARENTESE declaracaoVariaveis* corpo END SUB listaExpressao: (expressao | VALOR_STRING) ( VIRGULA (expressao | VALOR_STRING) )* expressao: expressaoBooleana | expressaoMatematica | atribuicao atribuicao: IDENTIFICADOR OP_IGUAL (expressaoMatematica | expressaoBooleana | VALOR_STRING ) expressaoMatematica: termo (( OP_MAIS | OP_MENOS ) termo )* termo: fator ((OP_MULT | OP_DIV ) fator)* fator: (OP_MENOS)? VALOR_NUMBER | IDENTIFICADOR tipo: INTEGER | STRING | BOOLEAN output: PRINT listaExpressao input: INPUT listaIdentificador listaIdentificador: IDENTIFICADOR (VIRGULA IDENTIFICADOR)* expressaoBooleana: termoBool ((expresaoBinaria) termoBool)* termoBool: fator ((NOT) fatorbool)* fatorBool: VALOR_NUMBER | IDENTIFICADOR