Если вы не хотите сражаться за получение полной контекстно-свободной (или, что еще хуже, полностью контекстно-зависимой) грамматики, полностью правильной для каждого языка, который вы хотите обрабатывать (или, что еще хуже, для каждого диалекта языка, который вы хотите обработать ... сколько видов C ++ существует?), для целей подсветка синтаксиса вам, вероятно, лучше отказаться от полной корректности и принять, что иногда вы получитеэто неправильно.В этом случае регулярные выражения кажутся очень хорошим ответом.Они также могут быть очень быстрыми, поэтому они не будут мешать человеку, выполняющему редактирование.
Если вы настаиваете на полной проверке / завершении синтаксиса (я так не думаю), то вынужна эта полная грамматика.Вы также будете очень долго готовить редакторы для реальных языков.
Иногда лучше не быть слишком серьезным.98% решение, которое вы можете получить, лучше, чем 100% решение, которое никогда не материализуется.