2009-04-02 10 views
5

Estoy buscando algunas buenas descripciones de mejores prácticas y patrones comunes para habilitar el resaltado de sintaxis en un cuadro de texto. Parece un ejercicio muy común que casi todos los idiomas tienen un control de interfaz de usuario que habilita el resaltado de sintaxis en diferentes idiomas. Solo tengo curiosidad por ver si hay un patrón común de implementación.Patrón de diseño resaltado de sintaxis

¿Todos usan expresiones regulares? ¿Hay un repositorio de expresiones regulares que se utilizan comúnmente en escenarios de resaltado de sintaxis?

¿Hay enfoques alternativos/mejores para resaltar la sintaxis?

actualización

Los enlaces a recursos relevantes acerca de la realización de resaltado de sintaxis en un idioma determinado o conceptos relacionados con resaltado de sintaxis sería grande. Lexing (análisis léxico) apareció en una respuesta, pero sin un vínculo para obtener más información. Cualquier cosa para ayudar a comprender mejor este problema comúnmente resuelto sería genial.

Lexical Analysis on Wikipedia

+0

+1 Tengo curiosidad por saber acerca de esto también ... Sospecho que las expresiones regulares serían demasiado lentas para archivos grandes, o al menos no funcionarían para cosas complicadas, como resaltar solo las variables que se han definido. – mpen

Respuesta

2

Las expresiones regulares son sin duda el primer lugar más empezar el rato. Sin embargo, no pueden lidiar con muchos casos extremos que uno conoce en la mayoría de los idiomas: texto que parece que las palabras clave pueden encontrarse en literales de cadenas, los literales de cadenas a su vez pueden contener delimitadores escapados, así como caracteres especiales. Lo mismo ocurre con los comentarios, etc.

Básicamente para hacer un buen trabajo de resaltado de sintaxis, debe realizar el léxico de la fuente, analizándolo con la aplicación de heurística específica del idioma para crear una lista de regiones donde cada región de la fuente se anota con la forma en que se debe diseñar.

A medida que se realizan las modificaciones, puede volver a aplicar las reglas de idioma para ver hasta qué punto este cambio puede alterar la presentación de una región. Por ejemplo, escribir una letra dentro de un literal de cadena simplemente hace que la cadena literal sea más larga, pero teclear una comilla de cierre trunca la región y convierte la parte sobrante de ella en código, sujeto a todas las demás reglas de lexing.

+0

Así que supongo que la mayoría de los marcadores basados ​​en web (javascript) están utilizando expresiones regulares y los IDE reales son lexing? –

+0

Probablemente, aunque incluso con JS, los buenos editores probablemente leerán. Los reg-ex, bueno, se confunden a veces. Sé que esto ha sucedido en algunos editores en los que creen que una cita escapada es en realidad un delimitador de cadenas. – levik