シェブロテインのレコーディングフェーズとGAST

シェブロテインは、ユーザーのパーザークラスのコンストラクタ内での自己分析実行関数呼び出しにより、GAST〈Grammar AST | ガスト〉を作る。ガストを作るときに、パーザー関数を呼び出す。この作業工程をレコーディングフェーズと呼ぶ。

レコーディングフェーズでは副作用や例外が出るとダメなので、パーザー関数でゴチャゴチャしているときは、フラグ this.RECORDING_PHASE を見て調整する。

// ...
  public calc = this.RULE("calc", () => {
    this.SUBRULE(this.expr);
    if (! this.RECORDING_PHASE) {
      // 計算器の初期化処理
    }
  });
// ...