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] )