コンパイラ

勢いでレポート提出2

コンパイラも終わった。ふーーーーー 動くものを作るのは楽しいものだ。でももうこの先に足を踏み入れたら・・・ var val,num,result,count; procedure POWER; if count > 1 then begin result := result * val; count := count - 1; call POWER end; begin …

あとは考察

ウッカリ後回しにしてハードコーディングしていた箇所も、IMでアドバイスを受けつつ書き直して無事クリア。規則部のアクションで参照するにあたって%typeで明示しておかないとuntypedといって怒られていた。 オプション演習も微妙に気になって、少しやってみ…

yaccによるコード生成演習

昨夜から着手。まずはテキストのpdfから提示されたひな形をコピペ。書かれていない構造体や変数の宣言を追加してコンパイル通るところまでできた。構文解析のアクションで記号表を作っていったのと同様にコード生成も埋めていく感じ。どの文法でどのようなコ…

実装完了

とりあえず設問のテストデータでコード生成&インタプリタ実行確認までできた。考察書いて終わりにしたいところだが、一箇所飛ばしたところを思い出した。いかんいかん。せっかく作ったので何パターンか動作確認とかして考察書くことにして、何となくコンパ…

yaccによる記号表演習

構文解析時に記号表を作る演習の部分が出来た。今日はここまでかな。明日の準備に戻ろう。 [macintosh:susi/compiler/ex3] quwaji% cat testdata2a const m=7,n=8; var x,y,z procedure MULTIPLY; var aa,bb begin aa := x; bb:=y; z:=0; while (bb > 0 do b…

ねた:スタックマシーンのビジュアルトレース

コンパイラ思い出すのに一苦労。yaccの使い方とか規則部に書く生成規則とか。だんだんよみがえってきた。コンパイラのうち、字句解析後の構文解析でブロックを意識しつつ記号表を作って行く演習。まずはここからスタートな最終課題。 ブロックやスタックの変…

やっと勉強。終わらせられるのか!?

なんだかんだ今日までずれこんだものの、もうやれるところは心配無いくらいに片付いて、あとすることは心配することくらい(なんのこっちゃ) 連絡が入ったら対応することにして、無事DNSが伝搬してることも祈りつつ、課題のコンパイルにたどり着くまではnsl…

静かに課題3出現

課題3が出ていた。今日掲載されたようだ(pdfの日付によると)。問題とテストデータをダウンロードして、問題と演習資料だけプリントアウト。勉強会mlに通報。テーマはコード生成で、とうとうコンパイラを作る。はてさて。

なんとか終わりそう

起きたら11時。よく眠るとスッキリ。短くてもエラーになる入力からチェックして行く。−1.がエラーになるのは、状態遷移が抜けていた。幸い状態が増えたりしなかったので、シフト動作と状態遷移を補うと通った。’)’で閉じる際のエラーは見当がつかなかっ…

終わった。

誤り生成規則もerrorトークンを使って何通りか試してみた。3つの課題を提出できる1つずつのソースにマージ(手で#include)し、コメントを書き入れ、ビルドできることを確認して提出準備OK。 明日はCG。

構文解析表やりなおし

課題2-3はプログラミングが大体完了。yydebugの出力や科目のページに用意されたオンライン体験コーナーの出力を参考に動作をトレースするデバッグ機能を書きながら作った。簡単な数式は解析できたが、−1とか(2)とかが入るとだめ。出力を見ながら書いた構…

CLOSURE(I)とGOTO(I,X)

今日から仕事始め。職場に入るとすっかり現実に引き戻された。 その前に、電車の中で誤り生成規則のぶぶん資料を読み、構文解析表の作成シミュレーションもやってみた。なんとなくわかった。手で書けそうな気がしてきた。よしよし。あとは還元動作を理解すれ…

エラー処理

http://www.cc.nao.ac.jp/vppman/HTML/japan/ansi/ansi10/ansi0285.htm エラーが発見されたからといってすべての処理を中止してよい場合はめったにありません。入力の操作を続けてそれ以上の構文エラーを発見する方が有益です。 終わろうと思ってた時にIMで…

構文解析表ができた

手でまとめるとかくも大変なものかと。ロジックがアタマのキャッシュにいるうちに要領よくリズミカルにやってけばサクサク書けるのかもしれないが、そんなこともないだろう。最後はスプレッドシート上で整理した。これが一番。でもこのテクを外化しておかな…

誤り生成規則

課題2-2も また,適宜,誤り生成規則も入れてみよ を残して動いた。ふーーーーーーー。こちらは、ひょっとしたら課題2-1より簡単かも。yydebug大活躍。 [macintosh:susi/compiler/ex2] quwaji% lex ex2-2.l [macintosh:susi/compiler/ex2] quwaji% yacc -d e…

yydebug

くろねこさんの掲示板が年末年始、熱い。一言二言参加したいが、目の前の課題にめど立てないと・・・ 昨夜どこまでやったか、今日も起きてから昼間課題2-1に取り組んだ。lexもyaccもデバッグのテクを知っていた方がよさそう。 http://www.linux.or.jp/JF/JFd…

yaccん

TVではジャニーズが東京ドームで年越しライブ。ずいぶん懐かしい曲もたくさん。 CGがめど立ったのでコンパイラ再開。pdfをざっと落としてあたまから目を通し始めた。全部理解しようと思うと大変。演習問題からやってみるのが良さそうとの情報もあり、年が変…

課題1すべりこみ提出

参観日&懇談会。たまに小学校を覗くのも楽しい。先生が教える様子も観察しているといろいろ興味深い。今日は「総合」という枠で算数。「平行四辺形の面積を考えよう」というお題。もう公式以外浮かばない大人と違っていろんなことを考えるし意見を主張する…

寝ても覚めても

なんとか課題1はクリアできそうだ。昨晩、Cで同じことするやつを、風呂あがって深夜から書き始め、ついつい調子に乗って新聞屋さんが来る時間まで書いていた。簡単な字句解析はできるようになったので半分くらいできたのかなというところで終了。 lex版のは…

lexがなんとなくあがり

課題1のlexでやる部分ができた感じ。lexは、これまで触った範囲では、字句解析してバラバラにばらすためのプロセッサ。のCソースコードを生成するジェネレータ。 定義部 %% 規則部 %% ルーチン部 こんな中身のlexソースをlexに食わせると、lex.yy.cってソー…

困憊らー

開講時点で期限がすごいことになっていたのだが、これはすぐに声が届いて期限が変更になった。その変更された期限が今度の金曜12/10。期限がいつであれ、期限が近づかないとやらないのは困った習性と言うか先延ばししてもあまり解決にはならないということか…

開講したはいいが・・・

最後の未開講科目が開講した。そして閉口。IT生は提出期限について調整が必要なら相談可能とのことだが、リアルの講義に連動して課題も順次提示されるという。社会人の学習ペースとしては、あるまとまった期間に一気に履修してしまうのがやりやすいのだが…