3

私はマゾヒスティックに Mac 用のオープンソースのテキスト エディターを作成しており、最終的にシンタックス ハイライトを追加したいところまで来ました。私は過去数日間、さまざまな解決策を行ったり来たりしてきましたが、最終的に、この質問をより多くの聴衆に公開することにしました。

ここに私が見るオプションがあります:

  • 基本的に一連の正規表現パターン マッチングを使用して言語を定義します (TextMate が言語を定義する方法と同様)。
  • BNF や PEG などの正式な文法で言語を定義する

正規表現パターン マッチングを使用することは、正式な文法とほぼ同じくらい言語を正式に表すことができないため、理想的とは言えません。ただし、形式的でない言語の中には、BNF に適合するのに苦労するものもあります (つまり、Markdown - ただし、優れたPEG 実装があることは知っています)。

ライブ構文強調表示のパフォーマンスのトレードオフは何ですか? 幅広い言語に対する柔軟性はどうですか?

私が BNF ルートに行くとすれば、Todd Ditchendorf が素晴らしいParseKitフレームワークを作成しました。PEGに似たものを知っている人はいますか?

4

2 に答える 2

10

処理したいすべての言語 (またはさらに悪いことに、処理したい言語のすべての方言) に対して完全に正しい完全な文脈のない (またはさらに悪いことに、完全な文脈依存の) 文法を取得するための戦いを戦いたくない場合を除きます.. . C++ には何種類ありますか?)、構文を強調表示するためには、完全な正確さをあきらめて、時々間違ってしまうことを受け入れる方がよいでしょう。その場合、正規表現は非常に良い答えのようです。また、非常に高速であるため、編集を行っている人の邪魔になりません。

完全な構文チェック/補完を行うことを主張する場合 (そうではないと思います)、その完全な文法が必要になります。また、実際の言語用のエディターを作成するのに非常に長い時間を費やすことになります。

あまり深刻にならない方が良い場合もあります。得られる 98% の解決策は、実現しない 100% の解決策よりも優れています。

于 2010-11-13T16:44:29.460 に答える
3

自分でエディタを書いているので、必要なものではないかもしれませんが、Xtext と呼ばれる素晴らしいフレームワークがあります.あなたの言語: http://eclipse.org/Xtext

于 2010-11-13T00:55:59.120 に答える