新しいメジャーモードの言語文法を書くためのオプションは何ですか?


7

文法が明確なプログラミング言語のメジャーモードを書いています。BNFがあり、いくつかのハッピーファイルで形式化されてます。

私は特に、BNFを一連の順方向/逆方向の正規表現スキャンとして再実装したくはありません(多くの主要モードがそうであるように)。手動または自動で変換することに反対はしません。

私はSMIEを認識しています。Emacslispで使用できる他のオプションを使用して、言語の文法を定義し、顔、sexpコマンド、imenu集団など、可能な限り自動的に生成することができます。

私は主に、生のパフォーマンスではなく、モードの単純さと正確さに関心がありますが、トレードオフが何であるかを大まかに知りたいと思います(明らかに、パフォーマンスが低すぎると、使用できなくなり、したがって、使用するのは適切ではありません)。

Emacs Lispマニュアルの「Major Modes」ですべてをすでに認識しているため、これはメジャーモードの記述に多少関係があります。

更新:私はSemanticの作者と調査して話しましたが、font-locks を生成することはできません。より高いレベルのツールを提供することを目的としており、私が探しているものではありません。


1
CEDET / Wisentに行くつもりですが、自分でやったことはありません。cedet.sourceforge.net/addlang.shtmlを
Stefan

CEDETはかなりメンテナンスされていないように見えましたが、パーサーはクールに聞こえました。
fommil

1
少なくともCEDETのパーサー部分がEmacsの一部になっているようです。gnu.org/software/emacs/manual/html_node/semantic/index.html#Top
Stefan

2
CEDETはEmacsの一部ですが、それが維持されるという意味ではありません。Bug#23792を参照してください。
npostavs 2018年

私は今、セマンティック/ wisentマニュアルの表紙から表紙までを読みましたが、フォントロックまたはインデントエンジンを書くのを避けるのに役立つとは思いません。レクサーは依然として構文テーブルに依存しています。それは私が興味がない多くの高レベルの機能を持っています(私はそれらが私の言語で十分に機能またはスケーリングするとは思わない)が、低レベルのものにはギャップがあるようです。何か不足していますか?@StefanKamphausen
fommil

回答:


4

SMIEパッケージ(実際にBNF文法を使用できますが、通常のLALRスタイルのパーサー用に設計されたBNF文法ではうまく機能しません)の他にwisi、GNU ELPA(http://elpa.gnu)から入手できるパッケージがあります。 .org / packages / wisi.html):

wisiパッケージは、一般化されたLALRパーサーを使用してインデント、フォント化、およびナビゲーションを行うためのユーティリティを提供します。使用例については、ada-modeを参照してください。

私はそれを使った経験がなく、それを使用するada-mode以外のパッケージを知りませんが、ada-modeはかなり機能的であるため、一見の価値があります。また、その作者があなたがそれを利用するのを手伝ってくれることを期待しています。


これはとてもクールに見えますが、非常に密接に結びついておりada-mode、一般化できるかどうかはわかりません。私が主張する1つの懸念は、Semanticの基礎となるパーサー(wisent)はローカライズされるのではなく完全なファイル解析を行うことが多く、構文エラーに対して特に堅牢ではないため、巨大なパフォーマンス低下を引き起こす可能性があることです。明確な答えはないので、見るには概念の証明が必要だと思います。
fommil

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.