예제 #1
0
    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]])
예제 #2
0
    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]])
예제 #3
0
    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]])
예제 #4
0
    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]])
예제 #5
0
    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]])
예제 #6
0
    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]])
예제 #7
0
    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]])
예제 #8
0
    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])
예제 #9
0
    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]])
예제 #10
0
    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]])
예제 #11
0
    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]])
예제 #12
0
    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]])
예제 #13
0
    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]])
예제 #14
0
    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])
예제 #15
0
    def p_operador_unario(self, p):
        '''
		operador_unario : SOMA
		| SUB
		| operador_negacao
		'''
        p[0] = Arvore('operador_unario', [], p[1])
예제 #16
0
    def p_atribuicao(self, p):
        '''
		atribuicao : var ATRIBUICAO expressao
		'''
        print(p[1])
        print(p[3])
        p[0] = Arvore('atribuicao', [p[1], p[3]])
예제 #17
0
    def p_numero(self, p):
        '''
		numero : NUMINTEIRO
		| NUMFLUTUANTE
		| NOTCIENTIFICA
		'''
        p[0] = Arvore('numero', [], p[1])
예제 #18
0
    def p_declaracao(self, p):
        '''
		declaracao : declaracao_variaveis
		| inicializacao_variaveis
		| declaracao_funcao
		'''
        p[0] = Arvore('declaracao', [p[1]])
예제 #19
0
    def p_operador_relacional(self, p):
        '''
		operador_relacional : MENOR
		| MAIOR
		| IGUAL
		| DIFERENCA
		| MENORQ
		| MAIORQ
		'''
        p[0] = Arvore('operador_relacional', [], p[1])
예제 #20
0
    def p_acao(self, p):
        '''
		acao : expressao
		| declaracao_variaveis
		| se
		| repita
		| leia
		| escreva
		| retorna
		| error
		'''
        p[0] = Arvore('acao', [p[1]])
예제 #21
0
    def p_inicializacao_variaveis(self, p):
        '''
		inicializacao_variaveis : ATRIBUICAO
		'''
        p[0] = Arvore('inicializacao_variaveis', [p[1]])
예제 #22
0
    def p_declaracao_variaveis(self, p):
        '''
		declaracao_variaveis : tipo DOISPONTOS lista_variaveis
		'''
        p[0] = Arvore('declaracao_variaveis', [p[1], p[3]])
예제 #23
0
    def p_retorna(self, p):
        '''
		retorna : RETORNA APAREN expressao FPAREN
		'''
        p[0] = Arvore('retorna', [p[3]])
예제 #24
0
    def p_programa(self, p):
        '''
		programa : lista_declaracoes
		'''
        print(p[1])
        p[0] = Arvore(type='programa', children=[p[1]])
예제 #25
0
    def p_expressao(self, p):  # expressao_simples
        '''
		expressao : expressao_logica
		| atribuicao
		'''
        p[0] = Arvore('expressao', [p[1]])
예제 #26
0
    def p_chamada_funcao(self, p):
        '''
		chamada_funcao : ID APAREN lista_argumentos FPAREN
		'''
        p[0] = Arvore('chamada_funcao', [p[3]], p[1])
예제 #27
0
    def p_operador_logico(self, p):
        '''
		operador_logico : ELOGICO
		| OULOGICO
		'''
        p[0] = Arvore('operador_logico', [], p[1])
예제 #28
0
    def p_operador_negacao(self, p):
        '''
		operador_negacao : NEGACAO
		'''
        p[0] = Arvore('operador_negacao', [], p[1])
예제 #29
0
    def p_operador_multiplicacao(self, p):
        '''
		operador_multiplicacao : VEZES
		| DIVISAO
		'''
        p[0] = Arvore('operador_multiplicacao', [], p[1])
예제 #30
0
    def p_operador_soma(self, p):
        '''
		operador_soma : SOMA
		| SUB
		'''
        p[0] = Arvore('operador_soma', [], p[1])