今回しているのは、本家さんの拡張子クラスとは?の補足みたいなものです
分かる人には釈迦に説法なんですが、正直、自分でソース書いて試してみないとなかなか理解できなかったので、そのときの方法の要約みたいなものです
一応、コレを読む人の程度としては、「何か一つ言語が打てる、有る程度」と言う人となっています。(できれば、オブジェクト指向のある言語がいいな)
とりあえず作る
今回は実験と言うことで、拡張子(*.foo)というテキストを拡張する、fooクラスオブジェクトを作成してみましょう
まずは、foo拡張子クラスの最低限記述すべきところはたったこれだけ
/** 拡張子クラス説明用プロトタイプクラス。 */
/** foo拡張子クラス。見た目は何のことはない関数ですが、萌ディタに登録されることで拡張子クラスの親となります */
function class_foo() {
this.name = 'foo'; // この拡張子クラスの名前
this.parent = 'srcfile'; // 親クラスの名前
this.ext = '\\.(foo)$'; // 対応する拡張子の正規表現
}
addClass( new class_foo() ); // addClassは萌ディタ本体が持っている関数。関数を拡張子クラスとして登録します。
これで、他の拡張子クラスと同じで
で登録してやればいっちょあがりです
実はこの項目に関しては本家の方がきちんとしているので、あまり説明すべき所というのが無かったりします
というわけで、さっさと飛ばして次の色分け部分の解説に移りましょう
色分け
というわけで、萌ディタの特徴の一つとなっている強力な色分け機能ですが、若干解説しておかないといけない単語があるので、追記
- Lexerって何?
-
日本語に訳すと字句解析機。非決定有限オートマトンで出来ている言語処理プログラムです
正直な話、一般的なプログラムでお世話になる事って少ないんですが、コンパイラ作成ツールのコンパイラ-コンパイラなんかを使うときにお世話になります
基本的にプログラミング言語等の、機械に合わせた規則の厳しい文法を扱うときに効果を発揮しており、ここからLexerを色分け用の文法解析に使用しています
- 非決定有限オートマトン
-
オートマトン(自動人形)の名前の通り、順序よくデータを読み出しては。処理していくプログラムの事を指しています。 あ、非決定とか有限とかは無視して良いです。ココでは余り意味がありませんから。ちなみに基本の理論はチューリングマシンそのものです。
これを利用して「文字を読み出す>処理していく>処理したデータを基にさらに進んでいく」を繰り返していけば言語処理が出来るじゃないか、という事で非決定有限オートマトンはもっぱら応用の言語解析分野のお話で使われます。
と言っても、そんな順序良い方法で自然言語が解析できるわけが無く、コンピューターで解析しやすい文法ということで、正規表現やプログラム言語の文法の分野の基礎技術となっています