flexとbisonを使用して独自のスクリプト言語を作成しようとしています。基本的なパーサーがあり、C言語のforステートメントに非常によく似たforステートメントを追加したいと思います。forステートメントに関連付けられたアクションをコーディングする方法がわかりません
'for'ステートメントに対して次のプロダクションがあるとします。
forStatement: FOR '(' expr ';' expr ';' expr ')' statements END; {}
この作品に関連するアクションで何をすべきかは私にはわかりません。
直感的に、前のステートメントに関連付けられたアクションで、次のような何かを行う必要があることを理解しています。
evaluate($3);
while(evaluate($5)) { execute($9); evaluate($7); }
evaluate($7);
ここで、evaluateとexecuteは2つのC関数です。
だから私は2つの質問があります(文法の生成に関連するアクションのCコードを書くと仮定します):
- 「評価」のタスクは何ですか。つまり、式の値がループのすべてのステップで変化する可能性があることを考慮して、すべてのループで式を評価するにはどうすればよいですか?
- 「実行」のタスクは何ですか。つまり、各ステートメントがループのすべてのステップで異なる結果をもたらすことを考慮して、forループ内のステートメントをどのように評価しますか。
3つの式'expr'の値は実行時に変更され、forbody内のステートメントにも同じことが当てはまります。