def p_expression_id(t): 'expression : ID' if tabela.exists(t[1]) : ident = tabela.getVar(t[1]) if ident.referencia: print "\tCRVI " + ident.getEnd() else: print "\tCRVL " + ident.getEnd() tipo.add(ident.getTipo()) else: sys.stderr.write("ERRO: variavel nao definida:"+t[1]+"\n") raise SyntaxError
def p_expression_id(t): 'expression : ID' if tabela.exists(t[1]): ident = tabela.getVar(t[1]) if ident.referencia: print "\tCRVI " + ident.getEnd() else: print "\tCRVL " + ident.getEnd() tipo.add(ident.getTipo()) else: sys.stderr.write("ERRO: variavel nao definida:" + t[1] + "\n") raise SyntaxError
def p_statement_lista_expressoes_subprograma(t): '''lista_expressoes_subprograma : ID | expression | ID VIRG lista_expressoes_subprograma | expression VIRG lista_expressoes_subprograma ''' elem = tabela.useParam() if tabela.exists(t[1]): ident = tabela.getVar(t[1]) if elem.referencia and not ident.referencia: print "\tCREN "+ident.getEnd() else: print "\tCRVL "+ident.getEnd() elif elem.referencia: print "ERRO: expressao encontrada na passagem por referencia ",elem raise SyntaxError
def p_statement_lista_expressoes_subprograma(t): '''lista_expressoes_subprograma : ID | expression | ID VIRG lista_expressoes_subprograma | expression VIRG lista_expressoes_subprograma ''' elem = tabela.useParam() if tabela.exists(t[1]): ident = tabela.getVar(t[1]) if elem.referencia and not ident.referencia: print "\tCREN " + ident.getEnd() else: print "\tCRVL " + ident.getEnd() elif elem.referencia: print "ERRO: expressao encontrada na passagem por referencia ", elem raise SyntaxError
def p_statement_atribuicao(t): 'atribuicao : ID ATTRIB expression' if tabela.exists(t[1]): ident = tabela.getVar(t[1]) if ident.eFuncao(): ident = ident.retorno tabela.resetParam() if ident.referencia: print "\tARMI "+ident.getEnd() else: print "\tARMZ "+ident.getEnd() tipo.add(ident.getTipo()) tipo.compara() tipo.reset() else: sys.stderr.write("ERRO: variavel nao definida: "+t[1]+"\n") raise SyntaxError
def p_statement_atribuicao(t): 'atribuicao : ID ATTRIB expression' if tabela.exists(t[1]): ident = tabela.getVar(t[1]) if ident.eFuncao(): ident = ident.retorno tabela.resetParam() if ident.referencia: print "\tARMI " + ident.getEnd() else: print "\tARMZ " + ident.getEnd() tipo.add(ident.getTipo()) tipo.compara() tipo.reset() else: sys.stderr.write("ERRO: variavel nao definida: " + t[1] + "\n") raise SyntaxError
def p_expression_function_exp(t): 'expression : id_sub LPAREN lista_expressoes_subprograma RPAREN' if tabela.exists(t[1]): ident = tabela.getVar(t[1]) print "\tCHPR " + ident.getRotulo()