Flex2でソースコードをブログに貼り付けるツールを作る(2) - ソースコードをブログに貼り付けるツールを拡張しよう
- ブログに美しいソースコードを貼り付けよう
- ソースコードをブログに貼り付けるツールを拡張しよう
新たなプログラミング言語に対応する
それでは、実際に、BASIC言語(VB.NET/VB/Excel VBA)などのパーサークラスを作る過程を紹介します。これにより、自分で好きな言語に対応するパーサーを作る際の参考になるでしょう。
はじめに、BASIC言語をパース(解析)するクラス「SParserBASIC」を作ります。Flex Builderを使っているなら、メニューより、「新規 - ActionScriptクラス」をクリックすると、新規 ActionScript クラス の作成ダイアログが表示されます。
そこで、クラスの名前に「SParserBASIC」、スーパークラスに「SParser」を指定して、[終了]ボタンをクリックします。すると以下のような雛形ができますのでこれに手を加えていきます。
package { public class SParserBASIC extends SParser { public function SParserBASIC(source:String) { super(source); } } }
そして、次に作るのは、予約語やキーワードなどのテーブルを指定する「initTable()」メソッドです。BASIC言語では、この「initTable()」メソッドを以下のように定義しました。(※他に、JavaScript を定義した「SParserJS」クラスなど、「SParserXXX」というクラスの「initTable()」メソッドなどが参考になります。)
protected override function initTable():void { this.ignore_case = true; table = [ // comment new SParserTableItem(/^\’[^\r\n]*/, STYLE_REM, null), // number new SParserTableItem(/^(\d+\.\d+|\d+)/, STYLE_NUMBER, null), new SParserTableItem(/^\&[hH](\d+\.\d+|\d+)/, STYLE_NUMBER, null), // string new SParserTableItem(/^\”/, STYLE_STRING, readStringDQ), // word new SParserTableItem(/^[\w\_][\w\d\_]*\$*/, “”, checkReserveWord), ]; reserve_word = [ // BASIC "If","Then","Else","For","Next","Do","While","Each","As","To","Step", "Dim","Let","Using","In","Select", "Case", "Mod","Or","And","Xor", // VB.NET, VB6 "Namespace","Public","Enum","String","Int16","Int32","Single", "Double","Decimal","Long", "End","Class","Private","Public","As","Type", "Get","Property","Return","Sub","Function","Set","Me", "Trace","ByVal","ByRef","Integer", "False","True","Debug","Declare","Lib","Error", // VBA "Application","Worksheets","Cells","Range","", // OLD STYLE "PRINT","LPRINT","READ","Read","DATA", "Input","INPUT","Poke","POKE","VAL","RND","Rnd","PEEK", "CHR$","CHR","MID$","MID","INPUT$","INPUT", "GOSUB","GOTO","ON" ]; } }
クラス変数の「table」には、正規表現で字句解析ルールとキーワードを指定し、「reserve_word」には、予約語を指定します。それで、字句解析ルールの指定では、クラス「SParserTableItem」の生成を行っています。1つ目の引数が解析に使う正規表現、2つ目が設定するCSSのクラス名、そして、3つ目の引数は、正規表現でうまく表現ができない場合、解析用のカスタム関数を指定することができます。
BASIC言語では、文字列の解析に解析用のカスタム関数「readStringDQ」を、そして予約語の登録に「checkReserveWord」を指定しています。これらの関数は、スーパークラスの SParser で定義されているので、サブクラスで定義しなくても良くなっています。
最後に、UIのソースコードの選択コンボボックスに、BASICの項目を追加すれば、追加完了です。
<!– script type –> <mx:Array id="script_type"> <mx:Object label="BASIC(VBA/VB.NET)" parser="{SParserBASIC}"/> <mx:Object label="JS/AS2/AS3" parser="{SParserJS}"/> .. 省略 .. </mx:Array>
まとめ
今回は、プログラムを公開してから寄せられた改善点への対応の様子、それから、実際に新たなプログラミング言語(BASIC言語)を追加する方法を紹介しました。ソースコードのHTML化だけでなく、ちょっとした文字列の解析処理などの参考になりましたら幸いです。
なお、本ソフトウェアのライセンスは、GPLとしますので、自由に改良しても構いません。もし、新たに言語など追加されましたら、本家の方でも対応しますので、気軽にご連絡ください。
1 2
TrackBack URL :

初めまして。
八角研究所社員の佐々木と申します。
前回の記事でクジラ飛行机さんが、「プログラミングで困ったときに、・・・」という内容の記述がありましたが、私も同じような経験をしたことがります。(自分自身のブログで解決したわけではないですが;)
まだまだ勉強不足ですが、クジラ飛行机さんの記事を理解できるだけの知識を身につけられたらと思っています。
Posted by Sasaking | 2007年10月05日 15:05
ブログに AS3 のソースを載せる方法…
おはようございます。
JC です。
さて皆さん。 AS3 のソースをブログに乗せる時ってどうしてますか?
そのまま?
それとも何か工夫はあるでしょうか?
(more…)
Posted by 馬鹿全 | 2007年12月12日 08:56
[…] 八角研究所 : Flex2でソースコードをブログに貼り付けるツールを作る(1) - ブログに美しいソースコードを貼り付けよう 八角研究所 : Flex2でソースコードをブログに貼り付けるツールを作る(2) … […]
Posted by [Flex][Ruby]Ruby唐辛子 : blog Boreal Kiss | 2008年08月15日 02:37