Чтобы ваш IDE / компилятор / интерпретатор действительно "понимал" и раскрашивал код, вам нужно проанализировать его и выделить различные синтаксические части. Классическим справочником для этого является Книга Дракона , «Компиляторы: принципы, методы и инструменты». Вы можете увидеть некоторые трудности в конструкциях, подобных этой
i+++++i;
или
list<list<hash<list<int>,hash<int,<list>>>>>;
//or just matching parens
Правильно сделать это - сложная проблема . Некоторые языки, такие как java, делают это проще, чем другие, такие как C и C ++ (у обоих есть стандарты) или ruby (у которых даже нет спецификации, а реализация зависит от спецификации). Однако, если вы хотите сделать всего несколько битов выделения, вы можете пропустить большие части грамматики и получить решение на 80% легче. Я подозреваю, что движок SO знает о строках и нескольких различных типах комментариев, и этого достаточно для их цели.
Сложность между 80% и 100% является одной из причин того, что большинство IDE имеют подсветку синтаксиса для C ++, но Visual C ++ все еще не поддерживает C ++ рефакторинг. Для выделения нескольких ошибок, вероятно, все в порядке. Когда вы проводите рефакторинг, вам нужно по-настоящему понимать область действия переменной в разных пространствах имен, а также все виды указателей.