syntax-highlighting – ¿Para qué lenguajes es apropiado `syntax-ppss`?

Pregunta:

He estado buscando una forma de detectar si el punto está en un comentario observando cómo se fuente el búfer actual.

Smartparens define sp-point-in-comment , que se basa en syntax-ppss . Sin embargo, parece que syntax-ppss y parse-partial-sexp se pueden usar para lenguajes arbitrarios, incluso si no usan expresiones-s.

Por ejemplo, este Python:

x = 1
# I'm a comment
y = 2

Colocar el punto dentro del comentario y evaluar (if (nth 4 (syntax-ppss)) 'comment 'not-comment) funciona correctamente.

¿ syntax-ppss funciona para cualquier modo de programación? ¿Por qué las cadenas de documentos discuten las expresiones-s?

Respuesta:

Bueno, las expresiones-s son esencialmente "sintaxis abstracta", en el sentido de que son simplemente una sintaxis concreta para árboles de sintaxis abstracta y, por lo tanto, cualquier lenguaje puede representarse como expresiones-s y manipularse con comandos de expresión-s. Por lo tanto, syntax-ppss hablando de "Sexps" es simplemente la forma Lisp de hablar sobre árboles de sintaxis abstracta.

Sin embargo, en la práctica, syntax-ppss generalmente no funciona para ningún modo. Está dirigido fundamentalmente a lenguajes similares a Lisp, y si el lenguaje concreto de un lenguaje se desvía demasiado de Sexps, ya no tiene mucho sentido usar comandos de Sexp para manipular el lenguaje. Funcionaría, pero habría una brecha demasiado grande entre la representación abstracta y la sintaxis concreta, lo que haría que la mayoría de los comandos fueran contraintuitivos.

Sin embargo, parte de la infraestructura subyacente de syntax-ppss es bastante genérica. Los modos principales generalmente se esfuerzan por conectarse, porque los hace funcionar bien con muchas características integradas de Emacs y proporciona una interfaz genérica para otros paquetes de terceros como Smartparens.

En particular, syntax-ppss basa en tablas de sintaxis para cadenas y comentarios. Las tablas de sintaxis clasifican los caracteres individuales por su clase sintáctica. Hay clases para delimitadores emparejados, delimitadores de cadena y caracteres de comentario.

La estructura de cadenas y comentarios es bastante similar en casi todos los lenguajes de programación: las cadenas normalmente están encerradas en delimitadores especiales. Los comentarios también pueden tener delimitadores especiales, o comenzar con un carácter determinado y extenderse hasta el final de la línea. Estas estructuras se pueden capturar fácilmente en tablas de sintaxis, y casi todos los modos principales definen tablas de sintaxis apropiadas, aunque solo sea para beneficiarse de la fortificación sintáctica de Emacs.

Por lo tanto, syntax-ppss funciona bien para cadenas y comentarios en casi cualquier idioma, pero el soporte y la “utilidad” de otras características varían.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım