private Expression factor() {
		Expression result;
		if (type == FLOAT)
		{
			match(FLOAT);
			result = new Expression.DoubleConstant(Double.valueOf(identifier));
		}
		else
			if (type == STRING)
			{
				match(STRING);
				result = new Expression.StringConstant(identifier);
			}
			else
			if (type == INTEGER)
			{
				match(INTEGER);
				result = new Expression.LongConstant(Long.valueOf(identifier));
			}
			else
				if (type == LEFT_BRACKET)
				{
					match(LEFT_BRACKET);
					result = expression_R_Logical_Or
				(
				expression_R_Logical_And
					(
					expression_R_Compare
						(
							expression_R(higher_expression())
						)
					)
				);
					match( RIGHT_BRACKET );
				}
			else
			{
				result = lang_structure();
			}
		return result;
	}