日付け越え前に帰着。
フロー制御の方法を研究。基本はラベルを返すトークンに対して
ブランチするというのが良いらしい。
: : | LEX_WHILE '(' while_cond ')' '{' statement_list '}' { printf("--->end while(goto label=%d).\n",$3) ; } ; while_cond : expr { printf("while_cond(gen label(%d))\n",labelID) ; $$=labelID++ ; } ;
昼少し前に起床。ちょっこり作業をして休出勤。
ppcsim-0.83を置きました御参考まで。何気にテストをしていて気づいたのですが、
gccの性能テストに使用したppcバイナリを使用したところ、ページに置いて
ある結果と微妙に命令数が異なりました。一つは時間取得をtime()システム
コールで行っているため、値によってほんの少し使用する命令が変わる事
が考えられますが、浮動小数点系命令の数が変わるのが少し解せない感じ
があります。実行時間表示で秒単位部分はprintf()の %f フォーマット
なのでその辺で若干の違いがあるのかも知れませんが.......
整数系命令については命令数が変わる事は無さそうです。ただし、Cygwin以外
のOSでシステムコールエミュレーションコードに若干手を入れる必要が
ある場合、システムコールによって得られる構造体データの違いなどに
よりプログラム実行という点からは完全一致にはならないことが考え
られます。
コミッカーズを買ってふにゃふにゃ眺めていたら、「タチカワ新ペン先」
という名前のサインペンというか万年筆もどきというかの文房具の
事が書かれていたので買ってみました。商品名が誤解を招く気が
しなくもありませんが 「ペン先だけ」ではなくて「新しいペン先を使用した
サインペン」です。ペン軸もインクも不要で、これ一本買えば使えます。
さておき、ペンの感覚はつっかかりの無いスクールペン
といった感じ。線はかなり細いです。力を入れれば入りと抜きが付くので、
細い線が好みの人には良い感じかも知れません。インクはカートリッジ式
なので交換は可能な模様です。ペン先の耐久力(というか寿命)はどの程度
かまでは判りませんが、細いのが好みの人ならばそれほど力を込めない
と思いますので、意外と長持ちする予感がします。
そういや、連休は微妙にあるような無いような。5/4はフェスタらしい
のですが、せりかさんの動いているのを一度見てみたいので、そちらに
行くつもり。と言いつつ夕方まで寝て、起きるとすっかり終ってる時間
とかになってそう(ぉぃ;
また昼過ぎに起きたり。そして休出。
ちょっと調べたい事があったので「プログラミング言語C 二版」を
捜したのですが、部屋中捜してもみつからず。平積みになっている本
の山の中に紛れ込んだ模様。片付けないと見つからないっぽい。うーむ。
中間コード生成のテスト。といっても式だけ。基本的にはyacc/lexの
教科書と同じ。
$val5= ($val4+($val3+($val2+($val0+$val1)))) ; $val5= (((($val0+$val1)+$val2)+$val3)+$val4) ;という式に対して
push val[4] push val[3] push val[2] push val[0] push val[1] add /* s = val0 + val1 */ add /* s = s + val2 */ add /* s = s + val3 */ add /* s = s + val4 */ pop val[5] push val[0] push val[1] add /* s= val0 + val1 */ push val[2] add /* s= val2 + s */ push val[3] add /* s= val3 + s */ push val[4] add /* s= val4 + s */ pop val[5]
昼過ぎに起きたり。そして休出。
インタープリタの続き。中間コードの生成を考えてみたり。
起きたらえらい時間に!毎週やってるけどそろそろ悔い改めないとまずい。
switch()文を追加してみたり、文法エラーの検出を考えてみたり。
そういやppcクロスgccの測定結果が出てたのをすっかり忘れていました。
でも、命令毎のカウント数が出るようになってから、いまいち見づらく
なってしまったので、「プロ遊」の下に読み物としてページを起こして
みました。ppcsimは最新バージョン一つで測定し、実行バイナリだけが違う
という比較条件なので、今までのを総合した測定という点では、日記に
出てきたものをひっくり返して見るよりは少しマシな比較になっていると
思います。御参考まで。
日付越え少し前に帰着。
bisonでの構文解釈順序を見るために、取りあえず通ったアクションの順序
が判るようにコード書き。そして、for文などを追加していたのですが、
すっかり夢中(笑 なにがどうって説明できないのですが、なんか面白い
ですよ。
先日bisonでfatalエラーになる話ですが、なんとなくメカニズムが判りました。
冷静に考えてみれば当たり前なのですが、自己参照時に初期値の設定が無い
のがまずいということのようです。
------- %% start : program ; program : program rule ; -------
foo() { int i ; return i++ ; }
------- %% /** 二つ以上のruleが必要な文法を表現. 空と一つしかruleがなければエラー **/ /** 空をデフォルトにしてしまうと 全ての文法で省略が常に可能になってしまうハズ **/ start : program ; program : rule rule | program rule ; -------
日付越え前に帰着。
++や--のような特殊な演算子をbisonで表現しようと思った所、はて、
どうすれば良いのか判らなくなりました(^^; というので整理。C言語の
場合、
if( i++ == j || i++ == k || i++ == l ) ... ; とか return( i++ ) ;
int main() { int i,j ; i=1 ; j=1 ; i=i++ + i++ + i++ ; j=++j + ++j + ++j ; printf("%d %d\n",i,j) ; return(0) ; }
test> ./a.exe 6 10
風邪引いたみたい。少し早めに帰着。
何もせずに死亡
少し早めに帰着。
bisonプログラム書き。取りあえずbison的文法チェックを通すようにした
所、以下のような例で思いっきりはまってみたり(^^;
------- %% start : program ; program : program rule ; ------- parse.y contains 4 useless nonterminals and 29 useless rules parse.y:214: fatal error: Start symbol start does not derive any sentence
%% start : program ; program : /* empty */ : program rule ;
parse.y contains 144 shift/reduce conflicts.
起きたら昼過ぎ。うーむ。
雨が降っていたので、だらだらと過ごす。
なにげにサイバリア(μの方)をやっていたのですが、全HARD(ただし
コンティニューしまくり)ルートで進めていくと、いつもより
1ステージ多くなって、それをクリアするとエンディングに変化が!
なんだかよく判りませんが、sakura diesellとかいう女キャラのCGが
エンディングロールのBGに表示されたりして。うーむ、微妙(何が?)。
先日cvs updateしたgccをppcクロスコンパイルしてみました。
MegaPOVをコンパイルしてppcsim上で実行してみた結果は以下の通り。
megapovdemo/photons/threelens.pov Statistics, Resolution 320 x 240 ---------------------------------------------------------------------------- Pixels: 77120 Samples: 107168 Smpls/Pxl: 1.39 Rays: 871792 Saved: 30 Max Level: 5/5 ---------------------------------------------------------------------------- Ray->Shape Intersection Tests Succeeded Percentage ---------------------------------------------------------------------------- Box 4138368 803343 19.41 CSG Intersection 4138368 521142 12.59 Sphere 8276736 1471875 17.78 ---------------------------------------------------------------------------- Calls to Noise: 0 Calls to DNoise: 1671794 ---------------------------------------------------------------------------- Shadow Ray Tests: 3046164 Succeeded: 222438 Reflected Rays: 180596 Total Internal: 17714 Refracted Rays: 157762 Number of photons shot: 426266 Surface photons stored: 261137 Priority queue insert: 2851189 Priority queue remove: 820296 Gather function called: 209890 Gather radius expanded: 170734 ---------------------------------------------------------------------------- Smallest Alloc: 12 bytes Largest: 327688 Peak memory used: 5360261 bytes ---------------------------------------------------------------------------- Time For Parse: 0 hours 0 minutes 10.0 seconds (10 seconds) Time For Photon: 3 hours 16 minutes 27.0 seconds (11787 seconds) Time For Trace: 6 hours 51 minutes 43.0 seconds (24703 seconds) Total Time: 10 hours 8 minutes 20.0 seconds (36500 seconds) Total cache size: 16720 called exit. =========== 実行命令サマリ =========== sum mulli = 102119668 subfic = 168897600 cmpli = 18666992 cmpi = 530154560 addic = 3533545 addic. = 188696 addi = 3046542553 addis = 908652502 bc = 6846282068 sc = 5554 b = 723151578 rlwinmi = 8353314020 ori = 16312218 oris = 47489379 xori = 79307550 xoris = 20665714 andi. = 105344105 andis. = 16315731 lwz = 1998044580 lwzu = 311910457 lbz = 61083473 lbzu = 2086050 stw = 1552480181 stwu = 616163873 stb = 4299959 stbu = 77173 lhz = 6693179 lhzu = 393216 lha = 1278371 sth = 754867 lmw = 42607739 stmw = 42607739 lfs = 194423360 lfsu = 1725592 lfd = 1532251857 lfdu = 26748704 stfs = 67071311 stfd = 653279886 stfdu = 4374 mcrf = 310401 bclrx = 337332460 crnor = 3 crxor = 6821097 creqv = 14 cror = 33093757 bcctrx = 25578509 cmp = 3415448059 subfcx = 2403471455 mulhwu = 6811 mfcr = 1281672999 lwzx = 154580334 slw = 674548 cntlzw = 101780 and = 4487529540 cmpl = 11721353 subf = 2434113065 andc = 786990 mulhw = 426267 lbzx = 4179152 neg = 1304089455 nor = 261341 subfe = 1206107832 adde = 1203550553 mtcrf = 6419693 stwx = 39130933 subfze = 351 addze = 166039154 stbx = 460205 addme = 3560 mullw = 1703689 add = 8793808816 lhzx = 17443979 xor = 21558801 mfspr = 183237966 lhax = 10094961 sthx = 596553 or = 2452626249 divwu = 203566 mtspr = 250286884 nand = 15 divw = 2001 lfsx = 160724891 srw = 152674 lfdx = 172718838 stfsx = 721010 stfdx = 96858799 sraw = 938301 srawi = 231253289 extshx = 12610 fdivs = 35682 fsubs = 3622375 fadds = 3683129 fmuls = 9989119 fmadds = 4019915 fcmpu = 430453283 frsp = 42052379 fctiwz = 9855598 fneg = 4242874 fmr = 395726292 fdiv = 66386552 fsub = 256615039 fadd = 108146114 fmul = 364910314 fmsub = 4565095 fmadd = 470852912 fnmadd = 801809 Total_count = 61197744018
10:00頃に目が覚めたので、早く寝ると健康的だなぁなどと思いながら
も布団から出ずにそのままうだうだしていたらいつの間にやら夕方(汗;
結局不健康ってことかよ!ヲレわ!などと思ってしまった。
ども、
遅レスで申し訳ないっす(^^; 仮に動的な入力に対してハッシュ
サイズを決めるとすると普通はどうするものなのでしょうか?
DBとしてのサイズが大きくなるとうっかりハッシュの再計算を行う
訳にもいかなくなりそうなので、実はハッシュのサイズは適度に
大きく取っておけばOKで、どちらかというとハッシュが衝突して
いる要素の高速検索の方が重要だったりするのでしょうかね?
全然関係ありませんが、唐突に「プロ遊」のCygwinについてのページを
更新しました。情報自体が大分古くなっていたのと、時間の経過と
共に解決したものもありましたので更新したという感じ(^^;
今日は早めに帰着。
金曜ロードショーで「ノートルダムの鐘」をやってました。
ダイナミックな画面構成とか流石だと思いましたが、どうもストーリー
の方が肌に合わなかったといいますか。なんだ最後はやっぱり見た目
かよって感じがしたのは私だけでしょうか。それでいて続編のIIを
作るってのはどうかと思いました。
「美女と野獣」の最後にも同じような感想を持った気がするのですが、
「ハイ!ベル!(見たのが字幕版だったので英語)」とか野獣から人間の
姿に戻る辺りで、それまで積み上げてきた感動が吹き飛ぶくらい冷めた
(むしろ退いた)記憶があります。あれは最初に張った伏線の回収と
いう感じだったのでしかたが無くもありませんが、見た目でなく
心に惚れたというストーリーにするのなら最後に余計な事は
しなくても良かったのでは?とか思いました。
コーディングの続き。前に作ったHash関数のDBを組み込んで
キーワードチェックをしたり変数登録のテストをしたり。
猛烈に眠くなって死亡。普通の時間に帰ると色々やってもこの時間って
感じで余裕があって良いですなぁ。
起きたらまたえらい時間に!って大丈夫かヲレ?!
ワード切り出し関数(字句解析機ともいう)のコーディング続き。
==とか++とかの一文字じゃない演算子の切りだしが面倒でした。
というかなんかベタベタになってしまってカッコ悪いって感じ。
次はこれをbisonインターフェースで繋いでやっと文法解析を実際に
行うって感じ?
ダウンタウンDXを見てたら山咲トオルが出てた。笑う犬の発見
だかで、色からモノを連想するゲームに出てたのを見たのが最初だった
のですが、その時はおかまっぽいしゃべりで職業がマンガ家(らしい)で
TVに出ているって何者?って感じでした。しかも、連想したものが
白→白波、青→宇宙ってきたもんですから、なんだコイツわ?!と
非常にインパクトがあったのを覚えてました。さておき、このときは
マンガ家だけどどんなマンガを描いているのか判りませんでしたが、
DXの方でそのことにちょろっと触れてて、挙がった代表作が
「戦慄!!タコ少女」ってホラーマンガかよっ!?
(本人曰く、体がタコになった少女が恋をしたり冒険したりな物語
だそうな)って、これまた強烈なインパクトに驚き。あまりに強力な
キャラに興味が湧き、思わずgooで検索した所
http://www.yamazakitoru.com/
なる(これまたすげーURL)ページが見つかったので、見てみた
のですが、見ればみるほど訳がわからなくなってきたって感じです。
調べる事自体、ムダな時間を過ごした気がしなくもない山咲ワールド
にみんなもれっつだーいぶ!(ぉぃ;
いつもより一時間ほど早く帰着。
何気に思いついたので、彩フォーマットのSAVEコマンドをlaymanに追加
してみたり。X68kの頃にマスクにノイズを混ぜ込んでおいて、それを
ベースに描くとつるっとした感じが無くなってちょっと良い感じに
なったのですが、いかんせん猛烈に重くて結構辛かったことを思い
出します。で、同じ事をWin版でやるとどうなるでしょうか?という
実験です。結果、かなり快適に描けて良い感じでした。
ノイズをぼかしで潰しただけなので、独特の模様がCG臭く感じなくも
ありませんが、うまく作ればもっと色々な味が出るかと思われます。
そんな感じ。
起きたらどひーな時間。ダメ過ぎ。いきなり休業。
コーディングもせずで、なんだか何もせずに一日終了。
ラクガキやら物書きやらに使っている中性ボールペンのインクが切れた
ので、代わりの書くものとして鉛筆を探し出した所、削る必要があった
ので、確か見える所にあったハズの鉛筆削りを探したのですが、すぐ
見つからず結局 ゴミ溜めになっているテーブルを片付けてやっと
発掘できたので、ついでに散らかったゴミを片付けた後にふと気づく
と探したハズの鉛筆削りをどこに置いたのか判らなくなって、また探し
まわったりとムダな時間を過ごしているうちに、そもそも何故
書くものを欲していたのかまで忘れてしまっているダメっぷり。
今日はダメだ。
日付け越え。
ワード切り出し関数をコーディングしてみたり。ふむー。
あんだけ早く寝たのに起きたのは夕方(滝汗;; ちょっこり出社。
線形リストを生成する部分で色々はまったり(汗; リスト処理は
何度やっても慣れません。ちゅうか修行が足りないだけか(^^;
こんなので良いかなぁという感じで完成。本当はインタープリタの
予約ワード検索や出現変数のチェックなどを行う為に使うのが
目的だったので、本題はこれからって感じなのですが。
この前KOJIさん達と飲みに行ったときに、KOJIさんが撮影した
写真を送ってもらっていたのですが、そのままになっていたのを
すっかり忘れていたので、やっとこさ絵日記を
補完しました(^^;
だいたい写真通りっしょ?(<大分違います)
昼頃起床。
先日のコーディングの続き。ハッシュキーが衝突した場合、衝突した
キーのグループは線形リストなどを使用して繋いで、検索時に順次
キーの一致を取るようなのですが、多段でハッシュテーブルを用意
して引きなおせば良いのでは?と思いコーディングしていたのですが、
何故かキーを生成する時点でどんな素数を選んでもぶつかる場合が
意外と多い事に気づいて、多段ハッシュはやっぱヤメ。
これマジスペシャル。宇宙人や月着陸疑惑より、気功の達人が良い
と思った。気で人を倒すって、倒される人は思いっきり力抜いた
状態で、且つ気のやり取りができる人限定で、しかも倒すのに時間が
かかるってのが、色々変身ポーズを繰り出しているうちに倒され
そうな特撮ヒーローのようで、世の中の平和を感じます。
何故かとても眠くて日付け越える前に死亡。
日付け越え。
何気にhash関数のコーディングをしてみたり。アルゴリズムの教科書を
見てみますに、h(k)=k mod m で、mは素数を選べという事のようですが、
その場合mがそのままハッシュテーブルのサイズとなってしまいます。
このmのサイズって何を基準にサイズを決定するものなのかイマイチ
よく判らず。
日付け越え。明日は山場その1って予感。
yacc/bison プログラム(?)書き。と言ってもルールを書いただけ。
昨日GIMPの新しいのが出ていたのでダウンロードしていたのを
インストール。起動がやけに速くなっています。フィルタを
いくつか試してみましたが、やはり少し不安定な感じ。フィルタの種類が
少し増えたような気分?
日付け越え。
GAMEWAVEを見ながら下ごしらえの続き。まさか残留するとは思いません
でした。
日付け越え。うぃー、連日1:00前では死ぬかも。
トークン切り出しの下ごしらえをしながらちょびっつを見たり。
って死ぬのなら寝ろってか?(苦笑;
日付け越え。眠いっす。
飯食べながらテレビのチャンネル回してたらあずまんが大王をやって
ました。
あぁ、眠くて死亡。
いいとも増刊号時間に目が覚めてしばらくしたらいつの間にかまた寝てて、
起きたらすっかり日が落ちてしまってました(汗;
特に何をするでもなく、だらだらとテレビを見て過ごす。うーむ。
先日の続き。gawkとrubyとperlのパーサーを見てみたのですが、いずれも
lex/flexは使用せずトークン切り出しは自前で行っているようです。
また、gawkやperlの方は自前でステートメントキーワードの切り出しを
行っていますが、rubyの方はgperfで生成した静的ハッシュで
キーワード切りだしを行っているようです。gccの方もc_lex()と
いうこれもまた自前切りだし関数で行っている感じです。ふむ。
lexを使用しない理由はいまいち良くわかりませんが、単に同じような
宣言を二箇所で行わなくてはならないのが面倒だからなのでしょうか?
flexはGNUウェアではないというのは関係ないとは思いますが......
そういやperlのソースを探していたら、perl6のことが書いてあった
のですが、実行部を仮想マシンとして実装するような旨が書いてある
ような気がしました(勘で英文翻訳(-_-;)。どのようなものになるかは
よく判りませんでしたが、JavaのVMみたいにグラフィックが使えるとか
だと面白いかも。組み込み系デバイスの様に高級なOSを乗せるまでの
必要が無いのであれば、VMを直接動かす様にする事でクロス環境や
シミュレータといった大げさな開発環境など無くても、どこでも同じ様
に動作するプログラムが書けて、幸せって感じぃみたいなぁ(ぉぃ。
JavaVMみたいにライセンスの都合で好きにそこらへんのアーキテクチャの
ハード上で動かせないのはつまらないので、そこんところは是非
うまくやっていただけると良いなぁと思いました。
ラクガキ王国で少し遊んだり。ゴールドに換金したせいで色が全然
無くてしくり。
昼頃起きて休出。
突然思い出したようにyacc/lexのお勉強。gawkがどのように書いているのか
観察。でも眠くなって死亡(ぉぃ;
日付け越え。1:00に近いと流石に眠いです。
ラクガキ王国を進める。100万ゴールド達成!帝国の敵キャラと対戦できる
ようになりました。ってちょっとガッカリ。というのは、ゴールドはラクガキを
買う事にしか使えないのですが、売っているラクガキは値段の割にあまり強く
ない気のする私にしてみれば、ゴールドを持つ事には全く意味が無いのです。
しかも購入したラクガキには部品の追加はできますが、既にある部品を削る
事はできないので、買ったラクガキを「全て戻す」でカラー石変換する
ような裏技は無いのです。したがって、100万ゴールドはただ貯めただけ。
ヘコリ。それならカラー石を使って色々描いた方がよかったよ.......
どもども(^^)。こちらこそ今更でなんですが(汗;、
御怪我が無かったのは幸いでしたね(^^;。最後の「TECH GIAN」が
大丈夫さ加減を醸し出しているようです(笑
日付け越え。
ラクガキ王国を少し。70万ゴールド。今日これだけ。眠くて死亡。
日付け越え。
風呂に入っていたら雨と共に雷の音が。春の嵐か?
RenderMan関連資料探索。簡単なシーンファイルのソースがあったので
ダウンロードして眺めてみる。なんとなく判るようなイマイチよくわからない
ような。全てはシェーダー次第という感じのようなので、shaders下を色々
眺めて適当に差し替えてみるのが良さそうな感じ。
今日は眠いのでラクガキ王国はお休み。
起きたらまた偉い時間に......最近、疲れているとなかなか復帰ができない
臭い。
BMRTいじり。つーか、資料探索。RIB形式で直接書く感じではない気分。
Postscriptに近い感覚か?C言語でRIB形式を自動生成する方法の方が良い
感じみたいなのですが、それだとコンパイル方法しか判らず。うーむ、
なんだかむずいっす(^^; そういやレンダリング中にプレビューのグラフィック
ウインドを出せるようなのですが、レンダリング中はそのウインドは
動かせないようです。ますます以前のppcsimのような感じ(笑
なにげに電子英和辞典であるらしいところの「英辞郎」なるものを購入。
以前から辞書を引くのが面倒だったので、CD-ROMの辞書が欲しいと思っていた
のですが、値段があまり手ごろでなかったので買うのを躊躇していました。
この辞書、登録単語数が多いのも良いのですが、付属の検索ソフトで
コピーバッファ(クリップボード?)を監視して更新されたら、コピーバッファに
入った文字列から自動的に辞書検索を行う事ができるのが便利です。なので、
例えばMeadowで英文テキストを開いて、意味の知りたい単語をマウスの
ダブルクリック(やドラッグセレクト)でワードをコピーバッファに入れると
検索結果ウインドが開く感じになります。結果、辞書付きテキストエディタ
みたいな感じになったりして良い感じです(^_^)。
他にもCygwinのrxvtを使っていれば、
ダブルクリック(やドラッグセレクト)でワードをコピーバッファに入れられ
ますので、manページの閲覧でも使用することができます。自動辞書検索の
OFF/ONはキーバインド可能なので、実際のテキスト編集などで邪魔になる
場合は、その場でOFFにしてしまうという感じでバッチリでした。
ただ、単語が見つからなかったときの検索結果がヘンなのがタマに傷って
感じです。
因みに、この辞書(ソフト部分が?)、書籍で買わない場合はシェアウェアで
1000円だそうです。
そういやMetasequoiaにRIB形式でセーブする機能がなかったかと、
お試し版を久々に起動。シェア版だとできそうな雰囲気なのですが、
それでもせいぜい形状を持って行ける程度らしいです。うーむ。
ラクガキ王国を少し進める。60万ゴールド。
日付越え。
たぼさんのKOJIさんところの書き込みより、3Dレンダリングソフトウェアで
あるところの
BMRT(Blue Moon Rendering Tools)をダウンロードしてみました。
Windows版はCygwinをベースに動作するようで、cygwin.dllが同梱だったり
するようです(^^; examplesをテストで実行してみたりいろいろ。なんか
見かけのユーザインターフェースがppcsim+GraphicDeviceみたいです(^^; しかも、
Cntl-Cが受け付けられなかったりするあたり昔のppcsimっぽい(汗;
ちょこっとサンプルを触っただけではイマイチ記述のルールがよく
判らなかったり。もちっとドキュメントを眺めてみます。
ところで、ソースは公開されていないのでしょうかね?いや、PPC対応に
コンパイルできないかなぁと少しだけ思ったもので。
ラクガキ王国を少し進める。50万ゴールド。あと半分。
gsl-1.1.1をコンパイルしたのですが、相変わらずmake checkで
テストモジュールのコンパイルに失敗したり。手で叩くとうまく
いくのですが、元のMakefileのどのへんをちょっと直せば良いか
まではよく判らず。コンパイル自体にかかる時間も強烈です(^^;