字句解析
よし、大体できた。と。
var line = 0; var table = [ // 基本は ["パターン" : 値] のペア // マッチしたら next_token関数は // [値:マッチデータ] というペアを返してくる。 ["[a-zA-Z_][0-9a-zA-Z_]+":2], ["=":4], ["\\[":5], ["\\]":6], ["\"[^\"]*\"":7], ["[0-9]+":8], ["[;:]":9], [",":10], // null を指定すると無視してマッチングを続ける ["[ \t]+":null], // 値に関数を指定するとマッチしたときに呼ばれるようになる // 値を返せば、それがnext_tokenの戻り値になる。 // nullを返せば、無視してマッチングを続ける ["\n": function(){ line = line+1; return null; } ] ]; var lexer = Lex.generate_lexer( table ); var f = file.open_rstream("file.ilog"); for ( var i=0; i<20; i=i+1 ) { print( (lexer.next_token(f)).chain[0] ); print( "\n" ); } print( "\n\nline = " ); print( line ); print("\n");
で、これで自分自身を字句解析した結果が、
var line = 0 ; var table = [ [ "[a-zA-Z_][0-9a-zA-Z_]+" : 2 ] , [ "[ \t]+" : null ] line = 4
こうなる。
このくらいやっておけば、定型処理は殆ど必要なくなるはず。
次はmatch文の類いだな。これができれば、字句解析〜構文解析〜機械語生成 までの一連の流れが実装できるようになるはずだ。それができたら、バージョン6.626E-34をリリースでいいか。
ここまでのソース
訂正: コンマの位置間違えてた。