Lily (Source) (Ver 0.1.0) | 2015-05-12 22:42 |
Lily本体のソースコードにおけるTokenクラスについて記します。Lilyソースファイル・定数と主な変数の一覧も参照。
このクラスは、トークン機能を提供します。
トークンとは、プログラムにおける「単語」です。
例えば「空をちょうちょがとんでいる」という日本語は、以下のように分割できます。
空 | 名詞 |
を | 助詞 |
ちょうちょ | 名詞 |
が | 助詞 |
とん | 動詞 |
で | 助動詞 |
いる | 動詞 |
Lilyのプログラムも、以上のように文章を分割します。違うところは、単語ではなくトークン、品詞ではなく型情報を付加するところです。例えば「「こんにちは」と表示。」というLilyプログラムは、以下のように分割できます。
こんにちは | 文字列 |
と | 助詞 |
表示 | 不明(未判別) |
。 | 命令終端記号 |
文字列など一部のトークンには、カギカッコといった前後の記号が含まれていないことに留意して下さい。
不明な単語が出現した場合、このTokenクラスでは、それが変数なのかメソッドなのかの判別は行いません。ひとます「不明な単語」として処理し、Generateクラスにおいてコードを出力する際、はじめて変数なのかメソッドなのかを判別します。このようにすることで、関数やメソッドをプログラムのどこに定義しても利用できるようにします。
Tokenクラスでは、特殊な場合を除きエラー処理を行いません。ただ無機質にLilyソースコードを分割するだけです。エラー処理は、トークンを反復処理するクラス(Generateクラス、PreProcessorクラスなど)においてなされます。
[0] 型情報 [1-n] トークンの中身 [n+1] NULL文字
トークンの型情報をあらわす定数群です。これらはプレフィックスとして「TOKEN_」をもちます。以下によく使われるものを紹介します。全ての定数は、token.hを参照して下さい。
TOKEN_UNKNOWN | 不明なトークンです。関数名・変数名なども、いったんこの型情報が付加されます。出力直前までにこのトークンが解決できなかった場合は、エラーを出力します。 |
TOKEN_YN | 改行をあらわすトークンです。行番号を数えるため、このトークンが連続しても省略することはできません。 |
TOKEN_ENDFILE | ファイルの終端を表すトークンです。 |
TOKEN_ENDINST | 命令終端を表すトークンです。Generateクラスにおいては、このトークン・改行トークンの検出をもって、Javaコードを出力します。改行をもって命令終端とする場合、それを判別するのはTokenクラスではなくトークンを反復処理するクラス内で行います。 |
TOKEN_NUM | 数値リテラルを表すトークンです。 |
TOKEN_STR | 文字列リテラルを表すトークンです。 |
TOKEN_JOSHI | 助詞を表すトークンです。この型情報において、トークン部分には文字列ではなくJoshiType型の定数が格納されます。 |
TOKEN_INDENT | インデントを表すトークンです。改行トークンの直後にこのトークンが現れなかった場合、インデントは0となりますが、この判別はTokenクラスではなくトークンを反復処理するクラス内で行います。 |
TOKEN_SYMBOL | 記号を表すトークンです。この型情報において、トークン部分には記号の文字コードではなくSymbolType型の定数が格納されます |
TOKEN_JAVA_SRC | Javaコードのリテラルを表すトークンです。このトークン内容は、そのままjavaファイルに出力されます。 |
TOKEN_JAVA_PARAM | Javaコードに出力する変数名を表すトークンです。ここに指定されたLilyの変数名をJavaの変数名に置換したものがjavaファイルに出力されます。 |
TOKEN_S_MACRO | マクロ定義の前につける記号(▲)を表すトークンです。 |
型情報にTOKEN_SYMBOLがセットされたトークンに保存される助詞を表す記号定数群です。これらはプレフィックスとして「JOSHI_」をもちます。原則として、1つの助詞を表す定数は「JOSHI_」のあとに訓令式ローマ字が接続されます。以下に助詞定数の一部を紹介します。全ての定数は、token.hを参照して下さい。
JOSHI_UNDEF | 定義されていない助詞です。(通常使われることはありません) |
JOSHI_TO | 「と」 |
JOSHI_HA | 「は」 |
JOSHI_TOHA | 「とは」 |
JOSHI_WO | 「を」 |
JOSHI_NARA | 「なら」 |
JOSHI_NARABA | 「ならば」 |
型情報にTOKEN_SYMBOLがセットされたトークンに保存される記号を表す記号定数群です。これらはプレフィックスとして「SYMBOL_」をもちます。以下に主な記号定数を紹介します。なお、半角・全角は同一の記号としてカウントされます。全ての定数は、token.hを参照して下さい。
SYMBOL_DAINARI | < |
SYMBOL_SYOUNARI | > |
SYMBOL_QUES | ? |
SYMBOL_JAVA_START | <? |
SYMBOL_JAVA_END | ?> |
SYMBOL_MKAKKOS | ( |
SYMBOL_MKAKKOE | ) |
Lilyのソースコードをトークンに分割します。呼び出し側は、分割され型情報を付加されたデータを得ることができます。主なメソッドに、トークン分割処理本体、分割済のトークンリストを取得するものが用意されています。
あるトークンのポインタをわたすと、そのトークンの型情報やトークンの中身をコンソール画面上に表示します。これは、デバッグの際に便利です。また、トークンリストを渡し、全てのトークンについて処理を行うことも可能です。