テキストエディターの文法を定義する最良の方法は何ですか?
質問
私はMacのオープンソーステキストエディターをマゾヒスト的に書いており、最終的に構文の強調表示を追加したいポイントに到達しました。私は過去数日間、さまざまなソリューションに行き来してきましたが、ついにより多くの聴衆に質問を開くことにしました。
ここに私が見るオプションは次のとおりです。
- 基本的に一連の言語を定義します 正規表現パターンマッチング (テキストメイトがその言語を定義する方法と同様)
- で言語を定義します 正式な文法 BNFやPEGのように
正式な文法とほぼ同様に言語を正式に表すことはできないため、正規表現パターンのマッチングを使用することは理想的ではないようです。ただし、一部のフォーマルではない言語はBNFに収まるのに苦労します(つまり、マークダウン - 素晴らしいことがわかっていますが PEG実装).
ライブ構文の強調表示のパフォーマンストレードオフは何ですか?幅広い言語の柔軟性はどうですか?
BNFルートに行くと、Todd Ditchendorfが素晴らしいものを作成しました Parsekit すぐに機能するフレームワーク。ペグに似たことを知っている人はいますか?
解決
フルコンテキストを無料で(またはさらに悪い、完全なコンテキストに敏感な)文法を完全に正しい(またはさらに悪いことに)、すべての言語に対して完全に正しいという戦いと戦いたい場合を除きます 方言 処理したい言語の... C ++の種類はいくつありますか?) 構文強調表示 あなたはおそらく完全な正しさをあきらめ、時にはそれを間違えることを受け入れるほうがよいでしょう。その場合、正規表現は非常に良い答えのように見えます。また、非常に速くなる可能性があるため、編集を行っている人と干渉しません。
完全な構文のチェック/完了を行うことを主張する場合(私はあなたがそうだとは思わない)、その完全な文法が必要です。また、実際の言語の編集者をプロデュースするのに非常に長い時間がかかります。
深刻すぎない方が良い場合があります。取得できる98%のソリューションは、具体化されない100%ソリューションよりも優れています。
他のヒント
エディターを自分で書いているので、まさに必要なものではないかもしれませんが、Xtextと呼ばれる素晴らしいフレームワークがあり、実際に構文の着色、カスタマイズ可能なアウトラインビュー、自動完了などを備えた完全なエディターを生成します。あなたの言語: http://eclipse.org/xtext
文法を言語のために機能させる問題に加えて、編集中にあるコードのためにそれを機能させようとするという複雑さが追加されています。