2005-03-01から1ヶ月間の記事一覧
T-SQL用に処理を変更しなければいけないのは、 ・「--」〜は単一行コメント ・「'」〜「'」は文字列 ・「"」〜「"」は識別子 ・「[」〜「]」は識別子 などである。 //読み込んだ文字の種類を取得・状態を更新 protected override Token getCurrToken(char cP…
PL/SQL用に処理を変更しなければいけないのは、 ・「--」〜は単一行コメント ・「'」〜「'」は文字列 ・「"」〜「"」は識別子 などである。 //読み込んだ文字の種類を取得・状態を更新 protected override Token getCurrToken(char cPrev, char cCurr, char …
Delphi用に処理を変更しなければいけないのは、 ・「(*」〜「*)」は複数行コメント ・「{」〜「}」は複数行コメント ・「'」〜「'」は文字列 ・「{$」〜「}」はコンパイラ指令 ・8進表記はない ・16進表記は「$」ではじまる ・整数定数を「#」〜であらわす (…
VisualBasic用に処理を変更しなければいけないのは、 ・「'」以降は単一行コメント ・複数行コメントはない ・「"」〜「"」は文字列 ・「#」〜「#」は日付 ・「[」〜「]」は識別子 ・8進表記は「&O」ではじまる ・16進表記は「&H」ではじまる ・「型文字」と…
//******************************************************************************** // Tokenごとに 文字列と その種類を返す ( 大文字・小文字を意識しない 言語用 ) //************************************************************************…
//**************************************************************************** // Tokenごとに 文字列と その種類を返す ( 大文字・小文字を意識する 言語用 ) //**************************************************************************** p…
//********************************************************************* // Tokenごとに 文字列と その種類を返す //********************************************************************* abstract public class TokenReader { //入力用クラス …
「VC++」「C++Builder」「Java」「JavaScript」など、 「中括弧族」と呼ばれる言語は、予約語の定義ファイルを変えるだけで対応できるが、 VisualBasic、Delphi、T-SQL、PL/SQL などは、構文上、文字と文字列の区別をしない、 英字の大文字・小文字を意識し…
//********************************************************************* // Tokenごとに 文字列と その種類を返す //********************************************************************* public class TokenReader { //入力用クラス private R…
これまで、「VC#」のソースを HTML化することを考えてきたが、 「VC++」「C++Builder」「Java」「JavaScript」など、 「中括弧族」と呼ばれる言語は全て、予約語の定義ファイルを 変えるだけで対応できそうである。そこで言語タイプを、実行時引数として、以…
//********************************************************************* // Tokenごとに 種類に応じた色指定タグで挟んで出力する //********************************************************************* public class TokenWriter { //出力用…
//********************************************************************* // Tokenごとに 文字列と その種類を返す //********************************************************************* public class TokenReader { //入力用クラス private R…
Token処理用のクラスを独立させる。 //********************************************************************* // HTML に書式化して出力 //********************************************************************* public void tohtml(Reader reader, Wr…
これまで、「+」「-」を演算子として扱ってきたが、 実数リテラルをあらわす、例えば 「1E-6」という表記の「-」は、演算子ではない。 そこで、「+」「-」が出現した場合、前の文字が「E」か「e」のときは、 この「+」「-」を、数値の一部とみなす。 ただし…
これまで、色の指定を <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>
#region、#if などのプリプロセッサディレクティブの処理を追加する。 少し乱暴だが、「#」から始まる文字列を「ディレクティブ」とみなして まず問題ないだろう。 //読み込んだ文字の種類を取得・状態を更新 private Token getCurrToken(char cPrev, char c…
以前、英数字と「_」からなる文字列を「識別子」と定義したが、 今回は少し改良して、「識別子」のうち、あらかじめ「予約語」として 登録されているものを「予約語」と定義し、それ以外を「識別子」と定義する。 //「予約語」を登録しておく System.Collect…
前回は、「+」「-」「/」「*」「=」など、記号全てを「区切り記号」として 定義したが、今回は少し改良して、あらかじめ「演算子」として登録されているものを 「演算子」として扱い、それ以外の記号を「区切り記号」とする。 //「演算子」として登録 privat…
今回は、「区切り記号」の処理を追加する。 「区切り記号」の定義は、「+」「-」「/」「*」「=」などの記号 全てとする。 //読み込んだ文字の種類を取得・状態を更新 private Token getCurrToken(char cPrev, char cCurr, char cNext) { Token currToken = n…
今回は、数字・識別子を認識できるようにする。「数字」は、「数字から始まり、数字か『.』からなる文字列」、と定義したいところだが、 16進表記だと、「ABCDEFXabcdefx」の英字が使用されるし、 数値リテラルとして「FDMULfdmul」の英字も使用できる。 厳…
前回は、少し本格的に、 「/*」から 「*/」までと、「//」から「\n」までを「コメント」と判定できるようにしたが、 文字列中の、「/*」、 「*/」、 「//」 もコメントの開始・終了と認識してしまう。そこで今回は、文字・文字列を認識する処理を追加して、 …
前回は仮に、英字を「予約語」、数字を「その他」、それ以外を「コメント」として あつかったが、 今回は実際に、「/*」 から 「*/」 までと、「//」から「\n」までを「コメント」として扱う。 それ以外は、「その他」として扱う。 string _state = "その他"…
前回は、getTokenとは名ばかりで、 内部的には、「1文字ずつ読んで1文字ずつ返す」これまでと同じ処理だった。今回は、文字の種類が変わるまでためこんで行き、 文字の種類が変わった時点で、それまでためこんでいた文字列を返す getToken を作成する。た…
これまで、ソースを1文字ずつ返す関数を利用して来たが、 文字列を1区切りごとに、文字列の種類とともに返してくれる関数 getToken があれば便利である。たとえば、「private string s = "a"; //文字列」という文字列を読み込んだ場合、 1private 予約語 2…
TAB文字は、4文字分の幅にするのが、一般的だと思うが、 ブラウザで表示した場合、8文字分の幅で表示されてしまう。そこで、TAB文字を、4文字分になるよう変換する機能を追加する。1文字づつ読むたびに、その文字の文字幅をcolに加算して行き、 TABが出…
前回作成した、最低限機能の「SourceToHTML」では、 コード中の、"<", ">", "&" が間違って解釈されるので、 これらを、"<", ">", "&" に変換する機能を charcopyに追加してtohtmlを作成する。 //ソースファイルを読んで、ソース部を出力する Read…
footer.txt </PRE> </BODY> </HTML>
header.txt <HTML lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> </HEAD> <BODY> <PRE></pre></body></html>
ソースファイルを HTML 形式に書式化するということは、 以下のようなファイルを出力することである。 <HTML lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> </HEAD> <BODY> <PRE> プログラムソース </PRE> </BODY> </HTML>つまり、 1.プログ…
呼ばれるたびに1文字づつ書き込む関数 putChar を作成する。実際の書き込みは行単位で行う。 呼ばれるたびに、渡された文字をwriteBufferに追加して行き、 改行コードが渡されたら、ファイルに書き込む。 //**********************************************…