Czy jest jakaś przejrzysta dokumentacja SMIE?

18

Spędziłem wiele, wiele godzin, teraz próbując uzyskać jakąkolwiek regułę / gramatykę wg SMIE.

Czy są jakieś przykłady małego, zabawkowego lub szkieletowego trybu opartego na SMIE z dokumentacją tego, jak to naprawdę działa, lub jakakolwiek dyskusja na temat korzystania z niego? Coś, co, powiedzmy, definiuje wyrażenie jako ciąg tokenów kończących się średnikiem, a blok jako pewne wyrażenia między nawiasami i niczym innym. Naprawdę bardzo proste?

Konkretne pytania: podczas używania smie-config-show-indent w 90% przypadków otrzymuję odpowiedź „: list-intro” „-> zero”. Na czym polega wprowadzenie list-intro do definicji wyrażenia lub listy wyrażeń? Dlaczego mówi zero i nadal wcina następujące linie? Jak to zmienić?

Po drugie: czy istnieje związek między moją gramatyką a moimi regułami smie? Zakładam, że dzieje się tak, ponieważ oba są przekazywane do smie-setup, ale nie mogę znaleźć żadnego sposobu na powiedzenie „kiedy zobaczysz„ blok ”, wcięcie zawartości”, na przykład, na podstawie gramatyki, która identyfikuje blok .

Po trzecie, wydaje się, że „SMIE” ma wiele zasad. Już samo rozpoczęcie pracy daje na przykład ogólną obsługę nawiasów, nawiasów klamrowych i nawiasów. Czy jest jakiś sposób, aby zobaczyć te reguły lub je zmodyfikować? A może tabela składni robi to wszystko, a SMIE dosłownie nic nie robi (co zaczynam podejrzewać).

Wreszcie, kiedy próbuję debugować SMIE, próbuję wykonać „edycję bufora trybu ewaluacji, przejść do przykładowego kodu w innym buforze, cyklu MX <mój tryb>, test”, ale wydaje się, że każda podróż dookoła nie usuwa reguł z poprzedni cykl. Jak mogę się upewnić, że tryb definiowania pochodnych rozpoczyna się od czystego arkusza? Mam tam (zabij-wszystkie-lokalne-zmienne), ale wydaje się, że to nie wystarcza i muszę zakończyć emacsa.

Nie publikuję żadnych przykładów tego, co mam, ponieważ nie mam nic, co nawet niejasno działa, oprócz podświetlania (za pomocą domyślnych ustawień blokowania czcionek, więc chyba nie jest to tak naprawdę SMIE). Potrzebuję prawdziwych dziecięcych kroków.

Nagora
źródło
1
Spróbuj poprosić autora SMIE o dokumentację?
Drew
4
@ drew Publicznie stwierdził, że nie jest dobrym dokumentatorem (po przeczytaniu jego dokumentacji nie mogę się kłócić), więc wydaje się to bezcelowe.
Nagora
1
Tak, wiem. Powiedział nawet, że kod powinien wystarczyć jako dokument. Och, czy zapomniałem wstawić „ ;-) ” po mojej sugestii? ;-)
Drew
1
Spojrzałem na to jakiś czas temu i zauważyłem, że lisp/progmodes/sh-script.elwydaje się, że używa się go smie.eldość intensywnie. Wydaje się również, że dokumentują ich użycie, więc może to może być nieco lepszy przykład?
Xaldew,
2
Tryb SML i tryb Modula2 używają SMIE. IIRC SMIE został pierwotnie wyodrębniony z trybu SML. Muszę przyznać, że było to dla mnie szczególnie trudne.
ocodo

Odpowiedzi:

1

Możesz zacząć od czegoś takiego

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

  ...
  (smie-setup foo-smie-grammar #'ignore)
  ...
Stefan
źródło