protected WildAssemblyTerminal generateWildTerminal(AssemblySymbol t) {
		if (t instanceof AssemblyNonTerminal nt) {
			if ("instruction".equals(nt.getName())) {
				// Never allow full instruction to be wildcarded
				return null;
			}
			return new WildAssemblySubtableTerminal(nt.getName());
		}
		if (t instanceof AssemblyFixedNumericTerminal term) {
			return new WildAssemblyFixedNumericTerminal(term.getVal());
		}
		if (t instanceof AssemblyNumericMapTerminal term) {
			return new WildAssemblyNumericMapTerminal(term.getName(), term.getMap());
		}
		if (t instanceof AssemblyNumericTerminal term) {
			return new WildAssemblyNumericTerminal(term.getName(), term.getBitSize(),
				term.getSpace());
		}
		if (t instanceof AssemblyStringMapTerminal term) {
			return new WildAssemblyStringMapTerminal(term.getName(), term.getMap());
		}
		if (t instanceof AssemblyStringTerminal term && term.getDefiningSymbol() != null) {
			return new WildAssemblyStringTerminal(term.getString());
		}
		/**
		 * Exclude string terminals. These should be purely syntactic elements. Use of them as fixed
		 * literals, e.g., 1 or RAX, is an error on the spec's part.
		 */
		return null;
	}
Construct a builder for the given language

<p>
Once a builder is prepared for the given language, it can be used to build an assembler for
any number of programs using that same language. Clients should take advantage of this to
avoid re-incurring the steep cost of constructing an assembler for the same language.

@param lang the language
Ghidra/Features/WildcardAssembler/src/main/java/ghidra/asm/wild/WildSleighAssemblerBuilder.java