Modifier le lecteur permettrait d'introduire une nouvelle syntaxe de lecture (comme #(hash table)
et '(quoted)
). De nombreux lisps ont cette capacité, mais aucune telle fonctionnalité ne semble exister pour elisp.
Modifier le lecteur permettrait d'introduire une nouvelle syntaxe de lecture (comme #(hash table)
et '(quoted)
). De nombreux lisps ont cette capacité, mais aucune telle fonctionnalité ne semble exister pour elisp.
Réponses:
Il s'avère que le manuel implique que vous ne pouvez pas réellement faire de macros de lecture.
Selon l' annexe C Porting Common Lisp :
Macros de lecture. Common Lisp comprend un deuxième type de macro qui fonctionne au niveau des caractères individuels. Par exemple, Common Lisp implémente la notation quote par une macro de lecture appelée ', tandis que l'analyseur Emacs Lisp traite simplement quote comme un cas spécial. Certains packages Lisp utilisent des macros de lecture pour se créer des syntaxes spéciales, que l'analyseur Emacs est incapable de lire.
syntax.c
aussi ...
Apparemment, cela peut être fait, mais préparez-vous à beaucoup de travail. (ou pas, car je vais m'y attaquer un week-end ;-).
(defvar *orig-read* (symbol-function 'read))
(defun read (&optional in)
(message "reading from %s" load-file-name)
(funcall *orig-read* in))
(setq load-read-function (symbol-function 'read))
Maintenant, "tout" ce qui reste à faire est d'implémenter un lecteur Lisp complet qui supporte tout ce que fait Elisp et tout ce que vous voulez de plus. Je pense que cela pourrait être utilisé pour fournir defpackage
des symboles internes de type CL et des packages, à titre d'exemple. De plus, une syntaxe spéciale pour les expressions rationnelles est quelque chose que je veux vraiment faire (ou plus exactement, une syntaxe de chaîne qui n'interprète pas les barres obliques inverses).
Edit: voici une implémentation de preuve de concept: https://github.com/mishoo/elisp-reader.el