Estoy escribiendo un modo principal para un lenguaje de programación que tiene una gramática bien definida: tiene un BNF, formalizado en algunos archivos felices .
En particular, no quiero volver a implementar el BNF como una serie de escaneos de expresiones regulares hacia adelante / hacia atrás (como lo hacen muchos modos principales), aunque no me opondría a traducirlo de forma manual o automática.
Soy consciente de SMIE , ¿hay alguna otra opción disponible para mí en Emacs lisp que me permita definir la gramática del lenguaje y generar la mayor cantidad automática posible, por ejemplo, rostros, comandos sexp, población imenu?
Me preocupa principalmente la simplicidad y la corrección del modo, en lugar de su rendimiento en bruto, pero ciertamente me gustaría tener una idea aproximada de cuáles son las compensaciones (obviamente, si el rendimiento es demasiado bajo, sería inutilizable y por lo tanto, no es apropiado para usar).
Esto está algo relacionado con la escritura de un modo mayor, aunque está más avanzado, ya que estoy al tanto de todo en "Modos principales" en el manual de Emacs Lisp.
ACTUALIZACIÓN : He estudiado y hablado con el autor de Semantic y no es capaz de generar los mensajes de correo electrónicofont-lock
, tiene el objetivo de proporcionar herramientas de nivel superior y no es algo que estoy buscando.
fuente
Respuestas:
Además del paquete SMIE (que de hecho puede usar una gramática BNF, pero generalmente no funcionará bien con una gramática BNF que fue diseñada para el analizador de estilo LALR habitual), hay un
wisi
paquete disponible de GNU ELPA ( http: //elpa.gnu .org / packages / wisi.html ):No tengo experiencia con él y no conozco ningún paquete que no sea el modo ada que lo usa, pero el modo ada es bastante funcional, por lo que vale la pena echarle un vistazo. También espero que su autor esté encantado de ayudarlo a utilizarlo.
fuente
ada-mode
y no estoy seguro de cuán generalizable es. Una de las preocupaciones que diría es que el analizador subyacente, sabio, de Semantic, a menudo realiza un análisis completo de archivos en lugar de localizado, y no es particularmente robusto para los errores de sintaxis, por lo que puede introducir una gran regresión de rendimiento. Supongo que uno necesitaría una prueba de concepto para ver, ya que no hay respuestas definitivas.Acabo de crear un modo principal de GNU Emacs para editar gramáticas BNF .
Actualmente proporciona sintaxis básica y bloqueo de fuente para archivos BNF. EBNF y ABNF están en mis planes para el futuro cercano.
fuente