public final Variable  factor() throws RecognitionException, TokenStreamException {
		Variable result = new Variable("","","");;
		
		Token  i = null;
		Token  n = null;
		Token  n2 = null;
		
				Variable e;
			
		
		try {      // for error handling
			switch ( LA(1)) {
			case IDENT:
			{
				i = LT(1);
				match(IDENT);
				
							// Busca el identificador en la tabla de símbolos
							int indice = symbolsTable.existeSimbolo(i.getText());
				
							// Si encuentra el identificador, devuelve su valor
							if (indice >= 0) {
								// Se recupera el valor almacenado como cadena
								//String valorCadena = symbolsTable.getSimbolo(indice).getValor();
				
								// La cadena se convierte a número real
								
								result = symbolsTable.getSimbolo(indice);
							} else
								System.err.println("Line " + i.getLine() + ":" + i.getColumn() + " - " + "El identificador " + i.getText() + " está indefinido");
						
				break;
			}
			case LIT_NUMERO:
			{
				n = LT(1);
				match(LIT_NUMERO);
				
							result = new Variable("","number",n.getText());
						
				break;
			}
			case LIT_CADENA:
			{
				n2 = LT(1);
				match(LIT_CADENA);
				
							result = new Variable("","string",n2.getText());
						
				break;
			}
			case PARENTESIS_IZ:
			{
				match(PARENTESIS_IZ);
				e=expression();
				match(PARENTESIS_DE);
				
							result = e;
						
				break;
			}
			default:
			{
				throw new NoViableAltException(LT(1), getFilename());
			}
			}
		}
		catch (RecognitionException re) {
			
						mostrarExcepcion(re);
					
		}
		return result;
	}