Ich schreibe einen Hauptmodus für eine Programmiersprache mit einer genau definierten Grammatik: Sie hat eine BNF, die in einigen glücklichen Dateien formalisiert ist .
Ich möchte das BNF nicht besonders als eine Reihe von Vorwärts- / Rückwärts-Regex-Scans erneut implementieren (wie es viele Hauptmodi tun), obwohl ich nicht dagegen wäre, es entweder manuell oder automatisch zu übersetzen.
Mir ist SMIE bekannt. Gibt es in Emacs lisp noch andere Optionen, mit denen ich die Grammatik der Sprache definieren und so viel wie möglich automatisch generieren kann, z. B. Gesichter, Sexp-Befehle, Imenu-Population?
Ich befasse mich hauptsächlich mit der Einfachheit und Korrektheit des Modus und nicht mit seiner rohen Leistung, aber ich würde sicherlich gerne eine ungefähre Vorstellung davon haben, was die Kompromisse sind (offensichtlich wäre es unbrauchbar und unbrauchbar, wenn die Leistung zu niedrig wäre daher nicht geeignet zu verwenden).
Dies hängt etwas mit dem Schreiben eines Hauptmodus zusammen, obwohl es weiter fortgeschritten ist, da mir bereits alles unter "Hauptmodi" im Emacs Lisp-Handbuch bekannt ist.
UPDATE : Ich habe mit dem Autor von Semantic studiert und gesprochen und es ist nicht in der Lage, das font-lock
s zu generieren . Es zielt eher darauf ab, übergeordnete Tools bereitzustellen, und es ist nicht etwas, wonach ich suche.
quelle
Antworten:
Neben dem SMIE-Paket (das zwar eine BNF-Grammatik verwenden kann, aber normalerweise nicht gut mit einer BNF-Grammatik funktioniert, die für den üblichen Parser im LALR-Stil entwickelt wurde) gibt es das
wisi
Paket von GNU ELPA ( http: //elpa.gnu) .org / packages / wisi.html ):Ich habe keine Erfahrung damit und kenne kein anderes Paket als den Ada-Modus, der es verwendet, aber der Ada-Modus ist sehr nützlich, daher lohnt es sich, einen Blick darauf zu werfen. Ich würde auch erwarten, dass der Autor Ihnen gerne dabei hilft, davon Gebrauch zu machen.
quelle
ada-mode
und ich nicht sicher bin, wie verallgemeinerbar es ist. Eine Sorge, die ich äußern würde, ist, dass der zugrunde liegende Parser, der von Semantic weise ist, häufig eine vollständige Dateianalyse durchführt und nicht lokalisiert ist und nicht besonders robust gegenüber Syntaxfehlern ist, so dass dies zu einer enormen Perf-Regression führen kann. Ich denke, man würde einen Proof of Concept brauchen, um zu sehen, da es keine eindeutigen Antworten gibt.Ich habe gerade einen GNU Emacs-Hauptmodus zum Bearbeiten von BNF-Grammatiken erstellt .
Bietet derzeit grundlegende Syntax und Schriftsperrung für BNF-Dateien. EBNF und ABNF sind in meinen Plänen für die nahe Zukunft.
quelle