29

自分が取り組んでいる夏のプロジェクトのために自分のシンタックスハイライトを書きたいと思っていましたが、自分のシンタックスハイライトを書く方法がわかりません。

たくさんの実装があることは知っていますが、正規表現と構文の強調表示がどのように機能するかについて学びたいと思います。

シンタックスハイライトはどのように機能し、シンタックスハイライトを開発するための良い参考資料は何ですか?シンタックスハイライトは、入力時に各文字をスキャンしますか、それとも各文字が入力された後にドキュメント/テキスト領域全体をスキャンしますか?

任意の洞察をいただければ幸いです。

ありがとう。

PS:ActionScriptで書くことを計画していました

4

7 に答える 7

26

シンタックス ハイライターは、2 つの非常に一般的な方法で機能します。1 つ目は、強調表示されている言語の完全なレクサーとパーサーを実装し、各トークンの型 (キーワード、クラス名、インスタンス名、変数の型、プリプロセッサ ディレクティブなど) を正確に識別します。これにより、特定の仕様に従ってコードを正確に強調表示するために必要なすべての情報が提供されます (赤のキーワード、青のクラス名など)。

2 番目の方法は、Google Code Prettifyが採用しているようなもので、言語ごとに 1 つのレクサー/パーサーを実装する代わりに、ほとんどの構文でまともな仕事を行うことができる 2 つの非常に一般的なパーサーが使用されます。たとえば、このハイライターは、そのレクサー/パーサーがこれらの種類の言語の一般的なコンポーネントを識別できるため、C に似た言語を適切に解析および強調表示できます。

これには、結果として、言語を明示的に指定する必要がないという利点もあります。これは、エンジンが、どの汎用パーサーが最適なジョブを実行できるかを独自に判断するためです。もちろん欠点は、強調表示が言語固有のパーサーを使用する場合よりも完全ではないことです。

于 2009-04-30T22:44:20.950 に答える
4

StackOverflow ポッドキャスト 50 番では、Steve Yegge が一般的なハイライト メカニズムを作成するプロジェクトについて少し話しています。完成品ではなく、探しているよりも洗練されているかもしれませんが、何か興味深いものがあるかもしれません.

于 2009-04-30T22:40:17.887 に答える
3

残念ながら、私は Actionscript を使用したことがないので、その部分についてはお手伝いできません。

しかし、それとは別に、シンタックス ハイライターを作成するための良いスタートは、既存のものを調べることです。たとえば、vimには通常のテキスト ファイル形式の構文ファイルがあるため、これらを参照して開始することができます。そこにはたくさんの正規表現があります (正規表現にはいくつかの種類がありますが、それほど違いはありません ...)。

個人的には、Beginning 正規表現が優れたものであることがわかりました。正規表現を習得することは、より高度な科目にも役立ちます。一方、正規表現のポケット リファレンスは、vim の正規表現に関する章も含まれているため、上記のフレーバーの違いを判断するのに適しています。

于 2009-04-30T22:45:07.953 に答える
2

このシンタックス ハイライターの目的を説明していただけると助かります。actionscript で記述している場合、フラッシュ ムービーにテキスト ボックスを配置し、送信ボタンが押された後に構文を強調表示するというアイデアはありますか? または、Web サービスからテキストを読み取り、強調表示された構文を表示しますか? ...あなたが何をしているのか想像するのが難しいので、私が助けるのは難しいです

ただし、構文ハイライターはテキストを読み取り、コード行を正規表現と比較して、構文ハイライターが単語の意味を理解するのに役立ちます。たとえば、「function」または「int」という単語を予約語として読み取り、それらを html テキストに置き換える場合があります。

<span class="reserved">function</span>, <span class="reserved"></span>

css があり、予約語を赤で表示したい場合、

.reserved{
  color: #ff0000;
}

これは基本的な考え方であり、ソースが表示されるので下志からアイデアを得ることができます。

于 2009-04-30T22:36:18.253 に答える
1

少し前にブログに SQL コード カラーリング ツールを投稿しました

ソースを含む sqlcodecoloring.zip へのリンクを見つけることができます。トークナイザーと TextRange クラスを使用して実装されます。

別のリンク、プロトタイプ アプリの一部としての SQL コード カラーリング: http://github.com/radekg/mysqlinterface/tree/master

于 2009-06-17T01:00:45.573 に答える