public void printList(ParserWalker walker, ArrayList<Object> list)
			throws MemoryAccessException {

		int opSymbolCnt = 0;
		FixedHandle lastHandle = null;
		int lastHandleIndex = -1;

		for (String element : printpiece) {
			int prevSize = list.size();
			if (element.length() != 0) {
				if (element.charAt(0) == '\n') {
					int index = element.charAt(1) - 'A';
					operands[index].printList(walker, list);
					if (prevSize != list.size() && ++opSymbolCnt == 1) {
						// Identify sole handle which can be fixed
						for (int n = prevSize; n < list.size(); n++) {
							Object obj = list.get(n);
							if (!(obj instanceof FixedHandle)) {
								continue;
							}
							if (lastHandle != null) {
								// can't fix multiple handles
								lastHandle = null;
								break;
							}
							lastHandle = (FixedHandle) obj;
							lastHandleIndex = index;
						}
					}
				}
				else {
					for (int j = 0; j < element.length(); ++j) {
						list.add(Character.valueOf(element.charAt(j)));
					}
				}
			}
		}

		// Fix constant operand exported as address
		if (opSymbolCnt == 1 && lastHandle != null && lastHandle.fixable && templ != null) {
			HandleTpl res = templ.getResult();
			if (res != null) {	// Pop up handle to containing operand
				res.fixPrintPiece(lastHandle, walker, lastHandleIndex);
			}
		}
	}
The primary sleigh concept representing a semantic action
taking operands (semantic values) as input
producing a semantic value as output
matching a particular pattern
printing in a certain way
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java