● StrCalc BASIC の実装
5.BASIC プログラムが処理される手順
関数StrCalc_BASIC
が呼び出されると、次のような順序で処理されます。
ソースコード翻訳
BASIC のソースコードを解読し、通常ステートメントの種類の判別の後、中間コードに変換します。
ステートメントに与えられている計算式は、文字列のまま中間コードに持たせます。
ラベルと、それに対応するステートメントは、簡単なリンク情報に置き換えられます。
文法エラーやラベルに関するエラー、プログラムの構造的なエラーは、この段階で検出されます。
ここでの「中間コード」とは、BASIC を内部処理形式に変換したデータの事を表します。
StrCalc BASIC 内部だけのものなので、アプリケーション側からは見えません。
BASIC プログラム実行
ソースコード翻訳でエラーが無かった場合は、この段階で実際に実行されます。
代入式やステートメントに与えられている計算式等は、この段階で実行されます。計算エラーや、サブルーチンの呼び出し関連エラー等、実行して判るエラーは、ここで検出されます。
アプリケーションから渡している3種類のコールバック(ユーザステートメント、代入式のフック、数学関数)は、この段階で処理されます。
なお、実行に必要な情報は全て中間コードに与えられ、実行は中間コードだけに対して行われるため、BASIC 実行中に何らかの形でソースコードを変更しても、動作には影響しません。
ユーザステートメント
ユーザステートメントは、呼び出されたステートメントの種類がソースコード翻訳時に特定され、ステートメント名の後ろに続く文字列が BASIC プログラム実行時に処理されます(後ろの文字列は、中間コード実行時にコールバック関数の引数として渡されます。「
コールバック関数USFUNC
」参照の事)。
翻訳時に処理 ↓
@ステートメント名 文字列
↑ 実行時に処理(呼び出される度に処理)
ステートメント名の部分はソースコード翻訳の段階で処理されてしまうので、実際の処理のパフォーマンスには影響しません。
コールバック関数
で行う文字列の解読・分析処理はパフォーマンスに影響しますが、相当複雑な構文にしない限り無視できる程度の損失です。