Maestumプログラミング、囲碁、読書の話題この広告は、90日以上更新していないブログに表示しています。繰り返し処理を実装する。CR上記のコードは1以上11未満の整数をループ足し合わせて55を出力して改行する。コードgithub.comIF-ELSE-THENと同じようにcompilerとinterpreterに変更を加える。compiler.pyコンパイラにDO、LOOP、Iトークンに対応する関数を追加する。state['codes'].append('DO')codesにはDOだけ載せ、branchスタックにそのあとの位置を載せる。do_pos))DOのコンパイルでbranchスタックに載せられた「ジャンプ先」をとり、LOOPコードと一緒にcodesに載せる。state['codes'].append('I')Iはそのままcodesに載せるだけ。このとおり、compilerへの変更は非常に簡単。ループ条件はメインスタック上で管理されるので、処理のロジックはinterpreter側で実装されている。}IF-ELSE-THENの時にコンパイラには追加したが、今回はインタプリタにも必要。ループカウンタの現在の値と終了値を保持するために使う。この二つをメインスタックにいれておくと、ループ中にスタックに値を追加するなどの処理と競合してしまう恐れがある。1スタックから二つの数字を取り、片方を開始時のループカウンタ、もう片方をループの終了値としてbranchスタックに入れる。2branchスタックからループカウンタと終了値をとり、ループカウンタをインクリメントしてから比較。1branchスタックにあるループカウンタをメインスタックにも載せる(branchスタック側の値は載せたままで消費しない)。これでカウンタの値を利用した計算などができる。.の部分が一回実行されているのがわかる。CR55ループカウンタの値がちゃんと計算に使われている。CRはループカウンタが0からはじまり10未満までループするなか、カウンタの値Iをインクリメントしてからこれまでの合計に足し合わせている。IF-ELSE-THEN)条件分岐を実装する。その5(Read-Eval-Print-Loop)REPL機能を実装する。その2(実装する機能)処理系で実装する機能を列挙してみる。Countingやはり以前もブログに記事を書いた問題。)はてなブログをはじめよう!zehnpaardさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。