private static Address parseAddress(String addressString, Program program, String description)
			throws InvalidAddressException {
		Address addr = XmlProgramUtilities.parseAddress(program.getAddressFactory(), addressString);
		if (addr == null) {
			throw new InvalidAddressException(
				"Invalid " + description + " in memory block definition: " + addressString);
		}
		return addr;
	}
Construct <code>MemoryBlockDefinition</code> using a text-based specified.
Intended for use when parsing XML.
@param blockName memory block name (required)
@param addressString start of memory block (required, see {@link AddressFactory#getAddress(String)}).
@param bitMappedAddress optional specification of data source address for bit-mapped memory
block (may be null)
@param byteMappedAddressRatio optional specification of data source address for byte-mapped 
memory block which may include optional byte mapping ratio, e.g., "rom:1000/2:4" (may be 
null).  The default mapping ratio is 1-byte to 1-source-byte (1:1), although other 
decimations may be specified using a mapping ratio. When specifying a mapping ratio both 
values must be in the range 1..127 where the right (source-byte count) value must be 
greater-than-or-equal to the left value (e.g., 2:4).
@param mode block mode as concatenation of the following mode indicator characters:
<pre>
  r - read mode enabled
  w - write mode enabled
  x - execute mode enabled
  v - volatile mode enabled
</pre>
@param lengthString length of memory block in bytes (required)
@param initializedString boolean (y | n | true | false) indicating if memory block is
initialialized or not (must be null for mapped block specification)
@param overlayString boolean (y | n | true | false) indicating if memory block is an overlay
(false assumed if null).
@throws XmlAttributeException if parse failure occurs (NOTE: address parsing is not performed)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java