# AiScriptパーサーの全体像

AiScriptのパーサーは2つの段階を経て構文ツリーに変換される。

1. ソースコードをトークン列に分割する
2. トークン列を順番に読み取って構文ツリー(AST)を構築する

ソースコードをトークン列に分割する処理(トークナイズと呼ばれる)は「Scanner」というモジュールが担当する。
トークン列から構文ツリーを構築する処理(パース)は、syntaxesディレクトリ以下にあるパース関数が担当する。名前がparseから始まっている関数がパース関数。

AiScriptのパーサーではトークナイズはまとめて行われない。
パース関数が次のトークンを要求すると、下位モジュールであるScannerが次のトークンを１つだけ読み取る。

Scannerによって現在の読み取り位置(カーソル位置)が保持される。
また、Scannerの各種メソッドで現在のトークンが期待されたものと一致するかどうかの確認やトークンの種類の取得などを行える。
これらの機能を利用することにより、パース関数を簡潔に記述できる。
