private void resolve(DecisionNode root, SleighParserContext protoContext,
			SleighDebugLogger debug) throws MemoryAccessException, UnknownInstructionException {

		if (debug != null && debug.isVerboseEnabled()) {
			debug.append("resolving constructor for instruction bytes at: " +
				protoContext.getAddr().toString(true) + "\n");
		}

		ParserWalker walker = new ParserWalker(protoContext);
		walker.baseState();
		walker.setOffset(0);
		Constructor ct = root.resolve(walker, debug);		// Base constructor
		walker.setConstructor(ct);
		ct.applyContext(walker, debug);

		while (walker.isState()) {
			ct = walker.getConstructor();
			int oper = walker.getOperand();
			int numoper = ct.getNumOperands();
			while (oper < numoper) {
				OperandSymbol sym = ct.getOperand(oper);
				int off = walker.getOffset(sym.getOffsetBase()) + sym.getRelativeOffset();
				walker.allocateOperand();
				walker.setOffset(off);
				TripleSymbol tsym = sym.getDefiningSymbol();
				if (tsym != null) {
					if (debug != null) {
						debug.append(tsym.getName() + ": resolving...\n");
						debug.indent();
						debug.startPatternGroup(sym.getName());
					}
					Constructor subct = tsym.resolve(walker, debug);
					if (subct != null) {
						walker.setConstructor(subct);
						subct.applyContext(walker, debug);
						if (debug != null) {
							debug.indent();
						}
						break;
					}
					if (debug != null) {
						walker.popOperand();
						debug.dumpFixedHandle(sym.getName(), tsym, walker, language);
						walker.pushOperand(oper);
						debug.endPatternGroup(true);
						debug.dropIndent();
					}
				}
				else {
					if (debug != null) {
						debug.dumpPattern(sym, walker);
					}
				}
				walker.setCurrentLength(sym.getMinimumLength());
				walker.popOperand();
				oper += 1;
			}
			if (oper >= numoper) {			// Finished processing constructor
				walker.calcCurrentLength(ct.getMinimumLength(), numoper);
				walker.popOperand();
				if (debug != null) {
					if (walker.isState()) {
						debug.dropIndent();
						debug.endPatternGroup(true);
						debug.dropIndent();
					}
				}

			}
		}

		hashcode = rootState.hashCode();
		if (isindelayslot) {
			hashcode += 0xFABFAB;
		}
	}
Gather all the flow records (perhaps across multiple InstructionPrototypes via crossbuilds)
and convert to Addresses

@param res is the resulting flow Addresses
@param parsecontext is the parsing context for the current instruction
@param context is the context for the particular address so crossbuilds can be resolved
@throws MemoryAccessException if a memory error occurred while resolving instruction details
@throws UnknownContextException if the gather encounters an instruction not previously parsed
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java