def p_expressao_multiplicativa(self, p): ''' expressao_multiplicativa : expressao_unaria | expressao_multiplicativa operador_multiplicacao expressao_unaria ''' if len(p) == 2: p[0] = Arvore('expressao_multiplicativa', [p[1]]) elif len(p) == 4: p[0] = Arvore('expressao_multiplicativa', [p[1], p[2], p[3]])
def p_expressao_unaria(self, p): ''' expressao_unaria : fator | operador_unario fator ''' if len(p) == 2: p[0] = Arvore('expressao_unaria', [p[1]]) elif len(p) == 3: p[0] = Arvore('expressao_unaria', [p[1], p[2]])
def p_lista_variaveis(self, p): ''' lista_variaveis : lista_variaveis VIRGULA var | var ''' if len(p) == 4: p[0] = Arvore('lista_variaveis', [p[1], p[3]]) else: p[0] = Arvore('lista_variaveis', [p[1]])
def p_expressao_simples(self, p): ''' expressao_simples : expressao_aditiva | expressao_simples operador_relacional expressao_aditiva ''' if len(p) == 2: p[0] = Arvore('expressao_simples', [p[1]]) elif len(p) == 4: p[0] = Arvore('expressao_simples', [p[1], p[2], p[3]])
def p_expressao_logica(self, p): ''' expressao_logica : expressao_simples | expressao_logica operador_logico expressao_simples ''' if len(p) == 2: p[0] = Arvore('expressao_logica', [p[1]]) elif len(p) == 4: p[0] = Arvore('expressao_logica', [p[1], p[2], p[3]])
def p_lista_declaracoes(self, p): ''' lista_declaracoes : lista_declaracoes declaracao | declaracao ''' if len(p) == 3: p[0] = Arvore('lista_declaracoes', [p[1], p[2]]) elif len(p) == 2: p[0] = Arvore('lista_declaracoes', [p[1]])
def p_se(self, p): ''' se : SE expressao ENTAO corpo FIM | SE expressao ENTAO corpo SENAO corpo FIM ''' if len(p) == 6: p[0] = Arvore('se', [p[2], p[4]]) elif len(p) == 8: p[0] = Arvore('se', [p[2], p[4], p[6]])
def p_var(self, p): ''' var : ID | ID indice ''' if len(p) == 2: p[0] = Arvore('var', [], p[1]) elif len(p) == 3: p[0] = Arvore('var', [p[2]], p[1])
def p_corpo(self, p): ''' corpo : corpo acao | vazio ''' if len(p) == 3: p[0] = Arvore('corpo', [p[1], p[2]]) elif len(p) == 2: p[0] = Arvore('corpo', [p[1]])
def p_indice(self, p): ''' indice : indice ACOLCHETE expressao FCOLCHETE | ACOLCHETE expressao FCOLCHETE ''' if len(p) == 5: p[0] = Arvore('indice', [p[1], p[3]]) else: p[0] = Arvore('indice', [p[2]])
def p_lista_argumentos(self, p): ''' lista_argumentos : lista_argumentos VIRGULA expressao | expressao | vazio ''' if len(p) == 4: p[0] = Arvore('lista_argumentos', [p[1], p[3]]) elif len(p) == 2: p[0] = Arvore('lista_argumentos', [p[1]])
def p_lista_parametros(self, p): ''' lista_parametros : lista_parametros VIRGULA parametro | parametro | vazio ''' if len(p) == 4: p[0] = Arvore('lista_parametros', [p[1], p[3]]) else: p[0] = Arvore('lista_parametros', [p[1]])
def p_fator(self, p): ''' fator : APAREN expressao FPAREN | var | chamada_funcao | numero ''' if len(p) == 4: p[0] = Arvore('fator', [p[2]]) elif len(p) == 2: p[0] = Arvore('fator', [p[1]])
def p_declaracao_funcao(self, p): ''' declaracao_funcao : tipo cabecalho | cabecalho ''' print(len(p)) if len(p) == 3: p[0] = Arvore('declaracao_funcao', [p[1], p[2]]) print("p==3") print(p[1]) print(p[2]) else: p[0] = Arvore('declaracao_funcao', [p[1]]) print("p==2") print(p[1])
def p_operador_unario(self, p): ''' operador_unario : SOMA | SUB | operador_negacao ''' p[0] = Arvore('operador_unario', [], p[1])
def p_atribuicao(self, p): ''' atribuicao : var ATRIBUICAO expressao ''' print(p[1]) print(p[3]) p[0] = Arvore('atribuicao', [p[1], p[3]])
def p_numero(self, p): ''' numero : NUMINTEIRO | NUMFLUTUANTE | NOTCIENTIFICA ''' p[0] = Arvore('numero', [], p[1])
def p_declaracao(self, p): ''' declaracao : declaracao_variaveis | inicializacao_variaveis | declaracao_funcao ''' p[0] = Arvore('declaracao', [p[1]])
def p_operador_relacional(self, p): ''' operador_relacional : MENOR | MAIOR | IGUAL | DIFERENCA | MENORQ | MAIORQ ''' p[0] = Arvore('operador_relacional', [], p[1])
def p_acao(self, p): ''' acao : expressao | declaracao_variaveis | se | repita | leia | escreva | retorna | error ''' p[0] = Arvore('acao', [p[1]])
def p_inicializacao_variaveis(self, p): ''' inicializacao_variaveis : ATRIBUICAO ''' p[0] = Arvore('inicializacao_variaveis', [p[1]])
def p_declaracao_variaveis(self, p): ''' declaracao_variaveis : tipo DOISPONTOS lista_variaveis ''' p[0] = Arvore('declaracao_variaveis', [p[1], p[3]])
def p_retorna(self, p): ''' retorna : RETORNA APAREN expressao FPAREN ''' p[0] = Arvore('retorna', [p[3]])
def p_programa(self, p): ''' programa : lista_declaracoes ''' print(p[1]) p[0] = Arvore(type='programa', children=[p[1]])
def p_expressao(self, p): # expressao_simples ''' expressao : expressao_logica | atribuicao ''' p[0] = Arvore('expressao', [p[1]])
def p_chamada_funcao(self, p): ''' chamada_funcao : ID APAREN lista_argumentos FPAREN ''' p[0] = Arvore('chamada_funcao', [p[3]], p[1])
def p_operador_logico(self, p): ''' operador_logico : ELOGICO | OULOGICO ''' p[0] = Arvore('operador_logico', [], p[1])
def p_operador_negacao(self, p): ''' operador_negacao : NEGACAO ''' p[0] = Arvore('operador_negacao', [], p[1])
def p_operador_multiplicacao(self, p): ''' operador_multiplicacao : VEZES | DIVISAO ''' p[0] = Arvore('operador_multiplicacao', [], p[1])
def p_operador_soma(self, p): ''' operador_soma : SOMA | SUB ''' p[0] = Arvore('operador_soma', [], p[1])