« Android 版のα1 リリース | メイン | メモリ管理とinvalidateスレッドの問題 »

2012年05月23日

吉里吉里Java:: KAG3 スクリプト文法まとめ

    

パーサーを書き直すにあたりまとめておく。
以下の認識で作るが、もしかしたら間違っているかも。
作っている途中に間違いに気付いたら修正する。

----

行頭のTABによるインデントはすべて無視され、ないものとして扱われる。
行頭に特定の文字がある場合に、先に TAB が入っていても、それは無視される。

行頭に以下の文字がある場合
';' : この行はコメントとして扱われ無視される。
'@' : この行はコマンド行として扱われる。この行には一つのタグのみを書くことができる。コマンド行では終端文字は改行かEOFとなる。
'*' : この行はラベルとして扱われる。ラベルは、'|'まで、もしくは'|'がない場合は行末までラベル名。'|'以降が見出しとなる。

上述のもの以外の場合、タグもしくは通常の文字列として扱われる。
ここでのタグとは'['と']'で囲まれた範囲を挿す。
同じく通常の文字列とはタグ以外の文字列を挿す。
ここでのタグは、'['によって開始されるが、"[["と中かっこが2つ連続する場合は、通常文字の'['であるとみなされ、タグ開始文字とは認識せず、タグにはならない(いわゆるエスケープ)。
ここでのタグは、']'を終端文字とする。
通常の文字列では TAB は無視される。

タグ名は、行頭の'@'もしくは、エスケープされていない'['で始まる文字列で、開始文字('@' or '[')とそこに続くスペース(' 'かタブ)を除いた文字から開始され、改行かスペース、終端文字以外が連続した文字列で表される。
タグ名は大文字と小文字は区別されず、すべて小文字として扱われる。
タグ名の後、スペースを除いても終端文字に達していない時、以降の文字列は属性として処理される。
タグ名後のスペースを除き、改行かスペース、終端文字、'='以外の連続した文字列で表されるものが属性名。
属性名後のスペースを除き、'='がある場合で、'='以降のスペースを除き、改行かスペース、終端文字以外の連続した文字列で表されるものが属性値。
もし、属性値が「"」か「'」で開始されていた場合は、次に「"」か「'」(最初の文字と同一のもの)が出現するまでが属性値となる
属性名と属性値は終端文字までの間繰り返し出現する可能性がある。
属性値中の'`'があった場合、直後の文字を問わずに属性値の文字列に含める。('`'がエスケープ文字となる)ただし、改行コードとEOFはエスケープできずエラーとなる。

属性名が来るところに'*'があった場合、マクロ引数の属性が展開されるが、本パーサーでは属性名が'*'であると解釈する。

iscript と endscript で囲まれた部分は TJS2 スクリプトとしてそのまま出力する。
iscript タグは、[iscript] か [iscript]\ 、 @iscript のみが記述された行である必要がある。
endscript タグは、[endscript] か [endscript]\ 、 @endscript のみが記述された行である必要がある。

以上のようにパーサーを作るが、マクロでのデフォルト値やTJS2式の指定などは意味解釈側での役割として、パーサーでは気にせず処理する。



投稿者 Takenori : 2012年05月23日 23:20




comments powered by Disqus
Total : Today : Yesterday : なかのひと