public Address parseAsRelativeAddress(String input, Address baseAddress)
			throws ExpressionException {
		ExpressionValue expressionValue = baseAddress == null ? parse(input)
				: parse(input, new AddressExpressionValue(baseAddress));

		if (expressionValue instanceof AddressExpressionValue addressValue) {
			return validateAddressSpace(addressValue.getAddress());
		}
		if (expressionValue instanceof LongExpressionValue longValue) {
			long offset = longValue.getLongValue();
			AddressSpace space = getAddressSpace();
			try {
				return space.getAddressInThisSpaceOnly(offset);
			}
			catch (AddressOutOfBoundsException e) {
				throw new ExpressionException(e.getMessage());
			}
		}
		throw new ExpressionException("Expression did not evalute to a long! Got a " +
			expressionValue.getClass() + " instead.");

	}
Evaluates the given input expression as a relative offset that will be added to the given
base address.
@param input the expression to evaluate as an offset
@param baseAddress the base address the evaluted expression will be added to to get the 
resulting address.
@return the Address after the evaluated offset is added to the given base address.
@throws ExpressionException if the input expression can't be evaluated to a valid, unique
address.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressEvaluator.java