protected AssemblyResolution solve(AbstractAssemblyResolutionFactory<?, ?> factory,
			PatternExpression exp, MaskedLong goal, Map<String, Long> vals,
			AssemblyResolvedPatterns cur, Set<SolverHint> hints, String description)
			throws NeedsBackfillException {
		try {
			return getRegistered(exp.getClass()).solve(factory, exp, goal, vals, cur, hints,
				description);
		}
		catch (UnsupportedOperationException e) {
			DBG.println("Error solving " + exp + " = " + goal);
			throw e;
		}
	}
Solve a given expression, passing hints

@param exp the expression to solve
@param goal the desired output (modulo a mask) of the expression
@param vals any defined symbols (usually {@code inst_start}, and {@code inst_next})
@param hints describes techniques applied by calling solvers
@param description a description to attached to the encoded solution
@return the encoded solution
@throws NeedsBackfillException a solution may exist, but a required symbol is missing
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RecursiveDescentSolver.java