Вам на самом деле не нужно дерево разбора, чтобы сделать это идеально, но вам действительно нужен поток токенов, эквивалентный тому, что генерируется внешним интерфейсом компилятора. Такой поток токенов обязательно должен позаботиться обо всех странностях, таких как начало комментария с продолжения строки, начало комментария в строке, нормализация триграфа и т. Д. Если у вас есть поток токенов, удаление комментариев легко. (У меня есть инструмент, который производит именно такие потоки токенов, как, угадайте, внешний интерфейс реального синтаксического анализатора, который создает настоящее дерево синтаксического анализа :).
Тот факт, что токены индивидуально распознаются регулярными выражениями, предполагает, что в принципе вы можете написать регулярное выражение, которое выберет лексемы комментариев. Реальная сложность набора регулярных выражений для токенизатора (по крайней мере, написанного нами) предполагает, что вы не можете сделать это на практике; писать их по отдельности было достаточно сложно. Если вы не хотите делать это идеально, тогда большинство из приведенных выше решений RE просто хороши.
Теперь, почему вы хотели бы, чтобы раздельные комментарии были вне меня, если вы не создаете обфускатор кода. В этом случае вы должны быть совершенно правы.