@Override
	public Symbol nextSymbol()
	{
		Matcher m;

		// Skip the whitespaces.
		m = psp.matcher(text);
		if ( m.find() )
			text = m.group(1);

		// We consumed the entire input.
		if ( text.length() == 0 )
			return new Symbol(ILexer.EOF, null);

		m = pnum.matcher(text);
		if ( m.find() )
		{
			// Number.
			text = m.group(2);
			return new Symbol("num", m.group(1));
		}

		m = pop.matcher(text);
		if ( m.find() )
		{
			// Operator.
			text = m.group(2);
			return new Symbol(m.group(1), null);
		}

		return null;
	}