protected AbstractAssemblyStateGenerator<?> getStateGenerator(OperandSymbol opSym,
			AssemblyParseTreeNode node, AssemblyResolvedPatterns fromLeft) {
		if (node instanceof AssemblyParseHiddenNode) {
			return getHiddenStateGenerator(opSym, fromLeft);
		}
		if (node instanceof AssemblyParseNumericToken token) {
			return new AssemblyOperandStateGenerator(this, token, opSym, fromLeft);
		}
		if (node instanceof AssemblyParseBranch branch) {
			return new AssemblyConstructStateGenerator(this, branch, fromLeft);
		}
		if (node instanceof AssemblyParseToken token && node.getSym().takesOperandIndex()) {
			return new AssemblyStringStateGenerator(this, token, opSym, fromLeft);
		}
		throw new AssertionError();
	}
Get the state generator for a given operand and parse tree node

@param opSym the operand symbol
@param node the corresponding parse tree node, possibly null indicating a hidden operand
@param fromLeft the accumulated patterns from the left sibling or parent
@return the generator
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AbstractAssemblyTreeResolver.java