La modificación del lector permitiría introducir una nueva sintaxis de lectura (como #(hash table)y '(quoted)). Muchos Lisps tienen esta capacidad, pero no parece existir tal facilidad para elisp.
@wasamasa Bueno, eso siempre es una opción :) No portátil , sino una opción.
Sean Allred
Creo que "muchos Lisps tienen esto". No es una pregunta real. Preferiría tener una pregunta real. Sugiero acortar el título y reformularlo en el cuerpo.
YoungFrog
@YoungFrog edita bienvenida. No podría pensar en nada más directo o apropiado sin ser demasiado prolijo. La pregunta es simple; No tiene que ser largo.
Sean Allred
Respuestas:
11
Resulta que el manual implica que no puedes hacer macros de lector.
Lector de macros. Common Lisp incluye un segundo tipo de macro que funciona a nivel de caracteres individuales. Por ejemplo, Common Lisp implementa la notación de citas mediante una macro de lector llamada ', mientras que el analizador de Emacs Lisp solo trata las citas como un caso especial. Algunos paquetes de Lisp usan macros de lector para crear sintaxis especiales para ellos, que el analizador de Emacs no puede leer.
Creo que se trata del software Common Lisp que utiliza macros de lectura especiales, en lugar de Elisp. La página trata sobre portar código CL a Elisp. Y sí, oficialmente el lector no es personalizable, pero vea mi respuesta a continuación ...
mishoo
El otro problema aquí es incluso si usted ha introducido alguna manera nueva sintaxis lector, el resto de Emacs no es consciente de ello, por lo que tendrá que fijar syntax.c, también ...
wasamasa
9
Aparentemente se puede hacer, pero prepárate para mucho trabajo. (o no, porque lo abordaré algún fin de semana ;-).
Ahora "todo" que queda por hacer es implementar un lector Lisp completo que admita todo lo que Elisp hace y lo que quiera más. Creo que esto podría usarse para proporcionar defpackagesímbolos internos tipo CL y de paquete, como un ejemplo. Además, una sintaxis especial para expresiones regulares es algo que realmente quiero hacer (o más exactamente, alguna sintaxis de cadena que no interpreta barras invertidas).
Probablemente sea mejor no publicar esto como respuesta hasta que haya implementado un lector Lisp completo como sugirió (lo cual, supongo, no es una empresa trivial).
Dan
@Dan Es factible, es solo que hacerlo en C es mucho más doloroso ya que apesta para el procesamiento de cadenas.
wasamasa
1
@Dan lo hizo funcionar, edité la respuesta para agregar el enlace a la implementación.
Respuestas:
Resulta que el manual implica que no puedes hacer macros de lector.
De acuerdo con el Apéndice C Porting Common Lisp :
fuente
syntax.c
, también ...Aparentemente se puede hacer, pero prepárate para mucho trabajo. (o no, porque lo abordaré algún fin de semana ;-).
Ahora "todo" que queda por hacer es implementar un lector Lisp completo que admita todo lo que Elisp hace y lo que quiera más. Creo que esto podría usarse para proporcionar
defpackage
símbolos internos tipo CL y de paquete, como un ejemplo. Además, una sintaxis especial para expresiones regulares es algo que realmente quiero hacer (o más exactamente, alguna sintaxis de cadena que no interpreta barras invertidas).Editar: aquí hay una implementación de prueba de concepto: https://github.com/mishoo/elisp-reader.el
fuente