Pregunta

Estoy masoquistamente escribir un editor de texto de código abierto para Mac y finalmente he llegado al punto en el que quiero añadir resaltado de sintaxis. He estado yendo y viniendo en varias soluciones para los últimos días, y finalmente he decidido a abrir la cuestión a un público más amplio.

Estas son las opciones que veo:

  • Definir idiomas básicamente con una serie de regex coincidencia de patrones (similar a cómo define TextMate sus idiomas)
  • Definir idiomas con un gramática formal como BNF o PEG

El uso de la coincidencia de patrones de expresiones regulares parece menos que ideal, ya que no puede representar formalmente un lenguaje casi tan bien como una gramática formal; Sin embargo, algunas lenguas menos formales tendrán un ajuste en BNF (es decir, de rebajas dificultades - aunque sé que hay una gran PEG aplicación ).

¿Cuáles son las ventajas y desventajas de rendimiento para el resaltado de sintaxis en vivo? ¿Qué pasa con la flexibilidad para una amplia gama de idiomas?

Si voy a la ruta BNF, Todd Ditchendorf creó el ParseKit marco impresionante que funcionaría muy bien fuera de la -caja. Alguien sabe de alguna cosa similar para los PEG?

¿Fue útil?

Solución

A menos que quiera pelear la batalla de conseguir un contexto completo libre (o peor, una sensible al contexto) gramática completamente correcta para cada idioma que desee con el proceso (o, peor aún, por cada dialecto del idioma que desee proceso ... ¿cómo muchas clases de C ++ no?), a los efectos de resaltado de sintaxis usted es probablemente mejor renunciar a la corrección completa y aceptar que a veces' ll hacerlo mal. En ese caso, las expresiones regulares parecen una muy buena respuesta. También pueden ser muy rápido, por lo que no interfieran con la persona que realiza la edición.

Si usted insiste en hacer la comprobación de sintaxis completa / finalización (no creo que lo son), entonces usted tendrá que la gramática completa. También será un tiempo muy largo en la producción de los editores de las lenguas reales.

A veces es mejor no ser demasiado grave. Una solución al 98% que se puede obtener es mejor que una solución 100% que nunca se materializa.

Otros consejos

No podría ser exactamente lo que necesita, ya que está escribiendo el editor de ti mismo, pero no hay un marco impresionante llamada xtext que realmente va a generar un completo editor con coloreado de sintaxis, vista de esquema personalizable y auto-completado, etc., basado en una gramática de la lengua: http://eclipse.org/Xtext

Además de los problemas de conseguir una gramática de trabajo para un lenguaje, no es la complejidad añadida de tratar de conseguir que funcione para el código que se encuentra en medio de la que se está editando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top