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.
źródło
lisp/progmodes/sh-script.el
wydaje się, że używa się gosmie.el
dość intensywnie. Wydaje się również, że dokumentują ich użycie, więc może to może być nieco lepszy przykład?Odpowiedzi:
Tryb, który intensywnie wykorzystuje SMIE, to https://github.com/elixir-lang/emacs-elixir Nie jestem pewien, czy to naprawdę działa - zobacz listę błędów związanych z wcięciami.
źródło
Możesz zacząć od czegoś takiego
źródło