2005-03-01から1ヶ月間の記事一覧

T-SQL に対応する

T-SQL に対応する T-SQL用に処理を変更しなければいけないのは、 ・「--」〜は単一行コメント ・「'」〜「'」は文字列 ・「"」〜「"」は識別子 ・「[」〜「]」は識別子 などである。 //読み込んだ文字の種類を取得・状態を更新 protected override Token get…

PL/SQL に対応する

PL/SQL に対応する PL/SQL用に処理を変更しなければいけないのは、 ・「--」〜は単一行コメント ・「'」〜「'」は文字列 ・「"」〜「"」は識別子 などである。 //読み込んだ文字の種類を取得・状態を更新 protected override Token getCurrToken(char cPrev,…

Delphi に対応する

Delphi に対応する Delphi用に処理を変更しなければいけないのは、 ・「(*」〜「*)」は複数行コメント ・「{」〜「}」は複数行コメント ・「'」〜「'」は文字列 ・「{$」〜「}」はコンパイラ指令 ・8進表記はない ・16進表記は「$」ではじまる ・整数定数を…

VisualBasic に対応する

VisualBasic に対応する VisualBasic用に処理を変更しなければいけないのは、 ・「'」以降は単一行コメント ・複数行コメントはない ・「"」〜「"」は文字列 ・「#」〜「#」は日付 ・「[」〜「]」は識別子 ・8進表記は「&O」ではじまる ・16進表記は「&H」で…

他言語に対応する

他言語に対応する 「VC++」「C++Builder」「Java」「JavaScript」など、 「中括弧族」と呼ばれる言語は、予約語の定義ファイルを変えるだけで対応できるが、 VisualBasic、Delphi、T-SQL、PL/SQL などは、構文上、文字と文字列の区別をしない、 英字の大文字…

他言語に対応する (VC++, C++Builder, Java, JavaScript)

他言語に対応する (VC++, C++Builder, Java, JavaScript) これまで、「VC#」のソースを HTML化することを考えてきたが、 「VC++」「C++Builder」「Java」「JavaScript」など、 「中括弧族」と呼ばれる言語は全て、予約語の定義ファイルを 変えるだけで対応で…

Token の読み込み用・書き込み用のクラスを分ける

Token の読み込み用・書き込み用のクラスを分ける Token処理用のクラスを独立させる。 //********************************************************************* // HTML に書式化して出力 //***********************************************************…

Token の種類を判定する (実数リテラル)

Token の種類を判定する (実数リテラル) これまで、「+」「-」を演算子として扱ってきたが、 実数リテラルをあらわす、例えば 「1E-6」という表記の「-」は、演算子ではない。 そこで、「+」「-」が出現した場合、前の文字が「E」か「e」のときは、 この「+…

色をCSSで指定する

色をCSSで指定する これまで、色の指定を <FONT COLOR="xxx">AAA</FONT>という形で行ってきたが、CSSで以下のように定義しておき <HTML lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> <style type="text/css"> </meta></head></html>

Token の種類を判定する (ディレクティブ)

Token の種類を判定する (ディレクティブ) #region、#if などのプリプロセッサディレクティブの処理を追加する。 少し乱暴だが、「#」から始まる文字列を「ディレクティブ」とみなして まず問題ないだろう。 //読み込んだ文字の種類を取得・状態を更新 priva…

Token の種類を判定する (識別子・予約語)

Token の種類を判定する (識別子・予約語) 以前、英数字と「_」からなる文字列を「識別子」と定義したが、 今回は少し改良して、「識別子」のうち、あらかじめ「予約語」として 登録されているものを「予約語」と定義し、それ以外を「識別子」と定義する。 /…

Token の種類を判定する (演算子・区切り記号)

Token の種類を判定する (演算子・区切り記号) 前回は、「+」「-」「/」「*」「=」など、記号全てを「区切り記号」として 定義したが、今回は少し改良して、あらかじめ「演算子」として登録されているものを 「演算子」として扱い、それ以外の記号を「区切り…

Token の種類を判定する (区切り記号)

Token の種類を判定する (区切り記号) 今回は、「区切り記号」の処理を追加する。 「区切り記号」の定義は、「+」「-」「/」「*」「=」などの記号 全てとする。 //読み込んだ文字の種類を取得・状態を更新 private Token getCurrToken(char cPrev, char cCur…

Token の種類を判定する (数字・識別子)

Token の種類を判定する (数字・識別子) 今回は、数字・識別子を認識できるようにする。「数字」は、「数字から始まり、数字か『.』からなる文字列」、と定義したいところだが、 16進表記だと、「ABCDEFXabcdefx」の英字が使用されるし、 数値リテラルとして…

Token の種類を判定する (文字・文字列)

Token の種類を判定する (文字・文字列) 前回は、少し本格的に、 「/*」から 「*/」までと、「//」から「\n」までを「コメント」と判定できるようにしたが、 文字列中の、「/*」、 「*/」、 「//」 もコメントの開始・終了と認識してしまう。そこで今回は、…

Token の種類を判定する (コメント)

Token の種類を判定する (コメント) 前回は仮に、英字を「予約語」、数字を「その他」、それ以外を「コメント」として あつかったが、 今回は実際に、「/*」 から 「*/」 までと、「//」から「\n」までを「コメント」として扱う。 それ以外は、「その他」と…

Token ごとに処理する その2

Token ごとに処理する その2 前回は、getTokenとは名ばかりで、 内部的には、「1文字ずつ読んで1文字ずつ返す」これまでと同じ処理だった。今回は、文字の種類が変わるまでためこんで行き、 文字の種類が変わった時点で、それまでためこんでいた文字列を…

Token ごとに処理する

Token ごとに処理する これまで、ソースを1文字ずつ返す関数を利用して来たが、 文字列を1区切りごとに、文字列の種類とともに返してくれる関数 getToken があれば便利である。たとえば、「private string s = "a"; //文字列」という文字列を読み込んだ場…

TAB を 空白に変換

TAB を 空白に変換 TAB文字は、4文字分の幅にするのが、一般的だと思うが、 ブラウザで表示した場合、8文字分の幅で表示されてしまう。そこで、TAB文字を、4文字分になるよう変換する機能を追加する。1文字づつ読むたびに、その文字の文字幅をcolに加算…

"", "&" を変換

"<", ">", "&" を変換 前回作成した、最低限機能の「SourceToHTML」では、 コード中の、"<", ">", "&" が間違って解釈されるので、 これらを、"&lt;", "&gt;", "&amp;" に変換する機能を charcopyに追加してtohtmlを作成する。 //ソースファイルを読んで、ソ…

ソースファイルを HTML 形式に書式化

ソースファイルを HTML 形式に書式化 ソースファイルを HTML 形式に書式化するということは、 以下のようなファイルを出力することである。 <HTML lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> </HEAD> <BODY> <PRE> プログラムソース </PRE> </body></html>

ファイルのコピー

ファイルのコピー C# のソースファイルを読んで、 HTMLファイルに変換するツールを C# で作成する。最初は、単純にファイルを読んで書くだけのプログラムを作成し、 段階的に機能を拡張していく。まず、呼ばれるたびに1文字づつ読み込んで返す関数 getChar…