Modificar o leitor permitiria introduzir nova sintaxe de leitura (como #(hash table)
e '(quoted)
). Muitos Lisps têm essa capacidade, mas parece que esse recurso não existe para o elisp.
Modificar o leitor permitiria introduzir nova sintaxe de leitura (como #(hash table)
e '(quoted)
). Muitos Lisps têm essa capacidade, mas parece que esse recurso não existe para o elisp.
Respostas:
Acontece que o manual implica que você não pode realmente executar macros de leitor.
De acordo com o Apêndice C Portando Common Lisp :
Macros do leitor. O Lisp comum inclui um segundo tipo de macro que funciona no nível de caracteres individuais. Por exemplo, Common Lisp implementa a notação de citação por uma macro de leitor chamada ', enquanto o analisador do Emacs Lisp apenas trata citação como um caso especial. Alguns pacotes Lisp usam macros de leitor para criar sintaxes especiais para si mesmos, que o analisador do Emacs é incapaz de ler.
syntax.c
, também ...
Aparentemente, isso pode ser feito, mas prepare-se para muito trabalho. (ou não, porque eu vou lidar com isso algum fim de semana ;-).
(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))
Agora, "tudo" que resta a fazer é implementar um leitor Lisp completo que suporte tudo o que o Elisp faz e o que você quiser mais. Eu acho que isso poderia ser usado para fornecer defpackage
símbolos internos do tipo CL e empacotar, como um exemplo. Além disso, uma sintaxe especial para regexps é algo que eu quero muito fazer (ou mais exatamente, alguma sintaxe de string que não interpreta barras invertidas).
Edit: aqui está uma implementação de prova de conceito: https://github.com/mishoo/elisp-reader.el