public static DWARFExpression read(BinaryReader reader, byte addrSize, int intSize)
			throws DWARFExpressionException {
		List<DWARFExpressionOperation> operations = new ArrayList<>();

		try {
			long opcodeoffset;
			boolean invalidOpCodeEncountered = false;

			while ((opcodeoffset = reader.getPointerIndex()) < reader.length()) {
				int opcode = reader.readNextUnsignedByte();
				if (!DWARFExpressionOpCodes.isValidOpcode(opcode)) {
					// consume the remainder of the bytes in the expression because
					// we've hit an invalid opcode and can not proceed any further.
					int bytesLeft = (int) (reader.length() - reader.getPointerIndex());
					operations.add(new DWARFExpressionOperation(opcode,
						DWARFExpressionOpCodes.BLOBONLY_OPERANDTYPES, new long[] { 0 },
						readSizedBlobOperand(reader, bytesLeft), (int) opcodeoffset));
					invalidOpCodeEncountered = true;
				}
				else {
					DWARFExpressionOperandType[] operandTypes =
						DWARFExpressionOpCodes.getOperandTypesFor(opcode);

					long[] operandValues =
						(operandTypes.length != 0) ? new long[operandTypes.length]
								: EMPTY_OPERANDS_VALUE;
					byte[] blob = null;
					for (int i = 0; i < operandTypes.length; i++) {
						DWARFExpressionOperandType optype = operandTypes[i];
						if (optype == DWARFExpressionOperandType.SIZED_BLOB) {
							blob = readSizedBlobOperand(reader, operandValues[i - 1]);
						}
						else {
							operandValues[i] = readOperandValue(optype, reader, addrSize, intSize);
						}
					}

					DWARFExpressionOperation op = new DWARFExpressionOperation(opcode, operandTypes,
						operandValues, blob, (int) opcodeoffset);
					operations.add(op);
				}
			}

			if (invalidOpCodeEncountered) {
				throw new IOException("Unknown DWARF opcode(s) encountered");
			}

			return new DWARFExpression(operations);
		}
		catch (IOException ioe) {
			DWARFExpression badExpr = new DWARFExpression(operations);
			String s = badExpr.toString();
			throw new DWARFExpressionException(
				"Error reading DWARF expression, partial expression is: ", badExpr, -1, ioe);
		}
	}
A {@link DWARFExpression} is an immutable list of {@link DWARFExpressionOperation operations} and some factory methods to read
an expression from its binary representation.
<p>
Use a {@link DWARFExpressionEvaluator} to execute a {@link DWARFExpression}.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/expression/DWARFExpression.java