¿Cómo funciona el resaltado de sintaxis en los editores y cuál es el algoritmo detrás de él?

El resaltado de sintaxis es básicamente una de las cosas más simples que hace un IDE.

El programa fuente que escribe pasa por varias etapas durante el proceso de compilación. La primera etapa suele ser escaneo o análisis léxico. Esto escanea el archivo fuente de su programa y crea tokens a partir de él. El IDE luego compara estos tokens con una lista de palabras clave conocidas (reservadas) para el lenguaje de programación en cuestión. Si coincide, resaltará ese token.

En lo que respecta al algoritmo detrás de esto, esto se puede lograr manteniendo un conjunto ordenado de palabras clave y encontrando si un token generado pertenece a este conjunto (búsqueda binaria). Si lo hace, debe resaltarse. Si no, no resaltes el token. Dicho esto, un IDE hace mucho más análisis sobre el código fuente, aparte del resaltado de sintaxis. Mi respuesta anterior solo tenía la intención de darle una idea de cómo se puede resaltar la sintaxis. Un IDE como Visual Studio o Eclipse hace cosas mucho más sofisticadas como parte del resaltado de sintaxis que están más allá del alcance de esta respuesta.

Para comprender cómo funciona el resaltador de sintaxis, todo lo que necesita para comprender las expresiones regulares. Debería poder escribir patrones para que pueda obtener comentarios, palabras clave, subcadenas de preprocesador de su código y envolverlos en una clase span para que pueda diseñarlos. He escrito un tutorial para echar un vistazo.
¿Cómo funciona el resaltado de sintaxis? waytocrack.com

No sé lo que usan los editores. Pero, si tuviera que desarrollar tal cosa, almacenaría todas las palabras clave en una tabla hash y luego, cuando el usuario escriba, verificaría la palabra actual y la resaltaría según el atributo de la tabla hash. Si NO está en la tabla, dele el color predeterminado. Supongo que sería un método lo suficientemente rápido como para usar una tabla hash.
Si desea ir más allá y resaltar los nombres de las funciones de cualquier biblioteca incluida, puede ser un poco complejo. En ese caso, preferiría ejecutar un subproceso en segundo plano que actualizaría continuamente la tabla hash dependiendo de los “#include” en el código. Tendrá que atravesar cada archivo incluido, buscar un prototipo de función y agregarlo a la tabla. Después de eso, debe llamar a una función de volver a dibujar o volver a resaltar.
La mayoría de los editores resaltan solo las funciones estándar y las palabras clave y almacenarlas en una tabla hash en tiempo de compilación sería una tarea fácil.