def p_location_1(p): 'location : ID' p[0] = Node('id',[],p[1]) p[0].name = p[1] p[0].value = p[1] # Validacion id no declarado. data = symtab.find_id( p[1] ) if not data : print ( ">>ERROR: identificador '%s' no declarada." % p[1] )
def p_expre_id(p): 'expre : ID' p[0] = Node('id', [], p[1]) p[0].value = p[1] # Validacion id no declarado. data = symtab.find_id( p[1] ) if not data : print ( ">>ERROR: identificador '%s' no declarada. Linea" % p[1] ) # tipo de dato typ = symtab.find_type(p[1]) if typ : p[0].typ = typ
def p_linea_4(p): 'linea : ID ASIG expre' p[0] = Node( ':=', [p[3]], p[1] ) p[0].assign = 1 # Validacion id no declarado. data = symtab.find_id( p[1] ) if not data : print ( ">>ERROR: identificador '%s' no declarada." % p[1] ) # Comprobacion asignacion de tipo p1 = symtab.get_id( p[1] ) typ = symtab.comparate_types(p1, p[3]) if typ == 'error' : print( ">>ERROR: Se esperaban expresiones del mismo tipo. linea: ")
def p_location_2(p): 'location : ID CORI expre CORD' p[0] = Node('array',[p[3]],p[1]) # Tipo del id typ = symtab.find_type(p[1]) try: p[0].typ = (typ[0], p[3].value) except AttributeError: p[0].typ= (typ[0], "unknow") pass p[0].value = p[1] # Indices enteros if hasattr(p[3],'typ'): if p[3].typ[0] != 'int': print (">>ERROR: El indice del array %s debe ser un valor entero" % typ[0]) # Validacion id no declarado. data = symtab.find_id( p[1] ) if not data : print ( ">>ERROR: identificador '%s' no declarada." % p[1] )