甲州記法で書かれたデータと計算式は、 区 section という単位にまとめられます。 このノートでは、ファイルのような計算資源から読まれた区を 資源区 RS: resource section とよぶことにします。 複数の区をひとつの区に合併することもでき、 それを 合併区 MS: merged section、 区に含まれる計算式を実行した結果も区になり、 それを 結果区 CS: calculated section とよぶことにします。 (註: 資源区、合併区、結果区という用語は、甲州記法の正式の用語ではありません)
例として、つぎのようなコマンドで甲州計算機を実行したときの 処理の流れを区の変換に注目して説明してみます。
koshu AAA.k BBB.k CCC.k
複数のファイルを読み出し、それらを合併して計算し、 その結果を判断集合として書き出すという処理は、 以下の 4 つに分けて説明できます。
ファイル F ... を資源区 RS ... として読み出します
ファイルの内容 String
は、まず、行番号をつけて、
行ごとに区切られます [(Int, String)]
。
その後、各行をトークン化し [B.TokenLine]
、
継続行をトークン節にまとめます [B.TokenClause]
。
トークン節の種類を判定して節集合 [C.Clause]
に変換し、
節集合を区 C.Section
として整理します。
ここで、B
は Base
モジュールを、
C
は Core
モジュールをあらわします。
資源区 RS ... を合併して、合併区 MS をつくります
複数のファイルから得られた区 C.Section
を合併して、
ひとつの区をつくります。合併区も C.Section
であり、
もとの区の判断集合や計算式をすべてもちます。
こうすることで、データと計算式を別々に書いたり、
固定のデータと可変のデータを別々に書いたり、
複数のデータソースを簡単にまとめられるようになります。
合併区 MS に含まれる計算式を実行して、結果区 CS をつくります
合併区に含まれる計算式をつなぎあわせ、
違反判断計算 |=V
と肯定判断計算 |==
と否定判断計算 |=X
の結果の判断集合をもつ新しい区をつくります。
この判断集合は、計算済みである必要はなく、
計算の予約となっていれば十分です。
結果区 CS に含まれる判断 CJ ... を書き出します
違反判断計算の結果が空でなければ、 その違反判断を書き出し、ステータス 1 で終了します。 違反判断が空ならば、否定判断と肯定判断を標準出力に書き出し、 ステータス 0 で終了します。
このノートはバージョン 0.40 に対して記述されました。