Esiste una documentazione SMIE chiara?


18

Ho trascorso molte, molte ore ora cercando di far funzionare qualsiasi tipo di regola / grammatica / cosa di rientro SMIE.

Ci sono esempi di una piccola modalità basata su SMIE basata su un giocattolo o uno scheletro con la documentazione su come funziona effettivamente o qualsiasi discussione su come usarla? Qualcosa che, per esempio, definisce un'espressione come una stringa di token che termina in punto e virgola e un blocco come espressione tra parentesi e nient'altro. Davvero semplice?

Domande specifiche: quando si usa smie-config-show-indent il 90% delle volte ottengo la risposta ': list-intro "" -> nil'. Su cosa si basa l'introduzione della lista sulla base della sua definizione di espressione o di un elenco di espressioni? Perché dice zero e indenta ancora le seguenti righe? Come lo cambio?

Secondo: c'è qualche relazione tra la mia grammatica e le mie regole di smie? Presumo che ci sia perché sono entrambi passati a smie-setup, ma non riesco a trovare alcun modo per dire "quando vedi un" blocco ", indenta il contenuto", ad esempio, basato su una grammatica che identifica un blocco .

In terzo luogo, SMIE sembra avere molte regole "cotte". Il calcio d'inizio dà una gestione generale di parentesi, parentesi graffe e parentesi per esempio. C'è un modo per vedere queste regole o modificarle? O è che la tabella di sintassi sta facendo tutto questo e SMIE non sta letteralmente facendo nulla (cosa che sto iniziando a sospettare).

Infine, quando provo a eseguire il debug di SMIE, provo a fare un "modifica, eval mode buffer, vai al codice di esempio in altro buffer, MX <my mode>, test" ciclo ma sembra che ogni giro in giro non cancelli le regole da il ciclo precedente. Come posso essere sicuro che la modalità definita derivata inizi da un foglio pulito? Ho (kill-all-local-variabili) lì dentro ma non sembra essere abbastanza e finisco per chiudere emacs.

Non sto pubblicando alcun esempio di ciò che ho perché non ho nulla che funzioni vagamente, a parte l'evidenziazione (usando i font-lock-default, quindi non è nemmeno SMIE, immagino). Ho bisogno di alcuni veri piccoli passi.


1
Prova a chiedere la documentazione all'autore SMIE?
Estratto il

4
@drew Ha dichiarato pubblicamente di non essere un buon documentatore (e avendo letto la sua documentazione non posso discutere), quindi sembra inutile.
Nagora,

1
Si, lo so. Ha anche detto che il codice dovrebbe essere sufficiente come doc. Oh, ho dimenticato di mettere un " ;-) " dopo il mio suggerimento? ;-)
Estratto il

1
Ho dato un'occhiata a questo un po 'di tempo fa e ho notato che lisp/progmodes/sh-script.elsembrano usare smie.elpiuttosto ampiamente. Sembrano anche documentare il loro uso, quindi forse potrebbe essere un esempio un po 'migliore?
Xaldew,

2
La modalità SML e la modalità Modula2 utilizzano entrambe SMIE. IIRC SMIE è stato estratto originariamente dalla modalità SML. Devo ammetterlo, l'ho trovato anche particolarmente difficile.
ocodo,

Risposte:



1

Potresti iniziare con qualcosa del genere

(defconst foo-smie-grammar
    (smie-prec2->grammar
     (smie-bnf->prec2
      '((exp ("begin" insts "end"))
        (insts (exp) (insts ";" insts))))))

  ...
  (smie-setup foo-smie-grammar #'ignore)
  ...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.