http://sakura.nanika.jp/diary/nicky.cgi?DT=20060426A#20060426A
全体をざっくりBNFで書くとこんな感じですかね。
RFCで使われてるEBNFちっくですが。
SVGdeffile = versionline CRLF definition versionline = string definition = svg-token *(svg-separator svg-token) svg-separator = CRLF | "," svg-token = "/EOF" | key "=" value key = empty | "sakura" | "unyu" | "craftman" | "url" | "hpname" | "surfacefile" | "update" | "ghostname" | "supported" | "sakura-action" | "surface" value = empty | string | surface-token surface-token = surface-no ":" sprite-no surface-no = number | number "-" number sprite-no = number | "*" | "+" | "-1" | "-2" empty : 空文字列トークン number : [0-9]+ トークン string : 任意の文字列トークン 注1:トークン間の空白文字は読み飛ばす 但し""で囲まれたものは1つのトークンとして扱う 注2:keyには必須のものとオプショナルなものがあることに注意せよ 注3:emptyなkeyは、"surface"と同等に扱う 注4:key に対して許される value の値には制限があることに注意せよ。 ・"surface" key に対しては surface-token value しか許されない ・"update" key に対しては、yyyy/mm/dd 形式の文字列しか許されない 注5:versionline の先頭3文字がバージョン判別のために用いられる
本当は日本語で書いてる部分とかを、もっときちっと定義しないといけないのだけど
えらい長くなるのでパス。
プログラム屋さんには、日本語でずらずらと説明するよりも、なんちゃってBNFで
書いてあげた方が理解が早いand/or正確なことがよくあります。
というか、完全に正確に(トークン定義つきで)書かれたBNFは、
そのまま実際に動くプログラムに変換できるわけで。
最も、拙作のツールなんかではBNF→BISONなんてしてないで、
さくらスクリプトでもSVGでも適当にごりごり読んでますが。