前回、IF文の分ができたので、繰り返しのFOR~NEXT文の実装について
IF文では、ざっくり書くと
(1)数式左辺の値を計算するコード
(2)数式右辺の値を計算するコード
(3)2つの値を比較して結果をBool値で得るコード (条件式の示す値)
(4)条件式の示す値(Bool値)が真ならば THENの部分のラベルにジャンプ
(5)偽ならば ELSEの部分にジャンプ
(6)THEN部分のコードとENDIFへのジャンプ
(7)ELSE部分のコードとENDIFへのジャンプ
(8)ENDIFのラベル
というコードが生成される。
FOR~NEXT文についてもほとんど同様だ。
(1)ループ変数への代入文のコード
(2)ループ変数からSTEP値を引く
(3)FOR文先頭ラベル
(4)ループ変数にSTEP値を足す (初回は、引いてから足すのでプラスマイナスゼロになる)
(5)ループの中のコード (行をまたいでもよい)
(6)ループ変数とTO値との比較をして、結果をBool値で得るコード
(7)Bool値が真ならば FOR文先頭ラベルへジャンプ
というコードを生成する。
(1)~(2)が初期化処理で、(3)~(4)がFOR文の処理、(6)~(7)がNEXT文の処理となる。
FOR~NEXT文以外にもWHILE文みたいなのも作ることはできるのだけど、面倒なのでTinyBasicの簡略化のためということにして省略した。