private void normalize() {
		int index = indexStack[depth];
		if (index < 0) {
			depth -= 1;
			if (depth < 0) {
				currentToken = null;
				return;
			}
			indexStack[depth] -= 1;
			normalize();
			return;
		}
		ClangTokenGroup group = nodeStack[depth];
		if (index >= group.numChildren()) {
			depth -= 1;
			if (depth < 0) {
				currentToken = null;
				return;
			}
			indexStack[depth] += 1;
			normalize();
			return;
		}
		ClangNode node = group.Child(index);
		if (node instanceof ClangToken) {
			currentToken = (ClangToken) node;
			return;
		}
		pushGroup((ClangTokenGroup) node);
		normalize();
	}
Backtrack until:
  - all indices indicate a proper child for their respective token group
Then push forward until:
  - the active node at the current depth is a ClangToken
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/TokenIterator.java