private static int consumeCommentTokens(List<ClangNode> alltoks, int i, ClangCommentToken first,
			ClangLine current, StringBuilder builder) {
		builder.setLength(0);
		builder.append(first.getText());
		i += 1;
		while (i < alltoks.size()) {
			ClangToken tok = (ClangToken) alltoks.get(i);
			if (tok instanceof ClangCommentToken) {
				if (first.getSyntaxType() != tok.getSyntaxType()) {
					break;
				}
				builder.append(tok.getText());
			}
			else if (tok instanceof ClangSyntaxToken) {
				// Comments can have blank space tokens embedded in them
				String val = tok.getText();
				if (val.isBlank()) {
					builder.append(val);
				}
				else {
					break;
				}
			}
			else {
				break;
			}
			i += 1;
		}
		ClangCommentToken commentToken = ClangCommentToken.derive(first, builder.toString());
		commentToken.setLineParent(current);
		current.addToken(commentToken);

		return i;
	}
Within a token stream, after seeing an initial comment token, collect the contiguous
sequence of tokens that are part of the comment and group them into a single
ClangCommentToken.  This makes post processing on the full comment string easier.
A single comment string can contain white space that manifests as ClangSyntaxTokens
with white space as text.
@param alltoks is the token stream
@param i is the position of the initial comment token
@param first is the initial comment token
@param current is the ClangLine object currently being scanned
@param builder is used to collect the full comment string
@return the position of the first token after the comment string
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java