新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

2009-01-01から1年間の記事一覧

Eclipse

Eclipse でうまくデプロイできない。理由はわからない。

コンパイラ・コンパイラ

「マイクロコンピュータのためのコンパイラ・コンパイラ―コンパイラ自動生成にむけて 」LL(1) について読みやすく書いていると思う。ただ、高い割には後半(よんでないけど)coco についての話なので「どうでしょう?」という感じだ。 LR については別の本を…

LL(1) と電卓

上記の電卓。言語としては LL(1) のようだ。しかし、これを私の直感的な bnf にしてしまうと、うまく LL(1) でアクセプトできるように書けない、、、 E ::= E + T | T T ::= T * F | F F ::= ( E ) | number見たいになってしまう。あるいは、言語プロセッサ…

reader macro

リーダマクロはこり始めると大変。なんだかわけわからんものができる。例えば、set-macro-character これは各キャラクタにアサインされたマクロ定義を変えることが出来る。get-macro-charater で何がアサインされているか見てみよう。 [2]> (get-macro-chara…

vi with LoL

:set lispwords+=defmacro!,dlambda,aletこうするとdefmacro!のときのインデントが defmacro と同じ場所になり気分が良い。あと、LL(1) は解釈出来たが、その後のアクション(意味解析か、、、)に関して LL のときはどう実行していったらいいのか良くわから…

LL(1) 構文解釈できた

とりあえず解釈できた。やはり (setq change nil) が抜けていたのと iconst が抜けていたというバグがあった。それ以外は問題なし。ついでなので簡単なリードマクロを作った。リードマクロを使うと (setq *rules* '#%END program ::= statlist statlist ::= …

言語プロセッサ(久野靖)with bug

この本の LL(1) の lisp プログラムを打ち込む。ひさびさに”打ち込む”という作業をした。最近では大体ダウンロードできるし正誤表もすぐにみれる。打ち込みなどは死語だ。どうも、本に書いてあるとおりに”打ち込む”でも動かないようだ。プログラムをひっくり…

LL(1) 構文

昨年 Lisp で書いた LL 構文解析のプログラム(といってもたいしたことはしていない)を掘り起こした。言語プロセッサ(久野靖)の本をちょこっと改良しただけのもの。この本、common lisp を使った実際の動作を中心にしていて、 first, follow などの他の構…

verilisp

verilisp なるものを発見した。早速使ってみよう。 http://home.comcast.net/~faulkner612/programming/verilisp/

回路シミュレータ without LoL

結局、LoL の alet や dlambda を使わずに再度書き直した。struct をつかった。これにより SICP の関数を返す関数であったり、クロージャーというのは使わなくなった。いいかどうかわからない。たぶん良い方向に舵を切ったと今の時点では思っている。インタ…

せかいのなべあつ

(defun ahop (n) (let ((n0 (mod n 10))) (cond ((= 3 n0) t) ((<= n 9) nil) (t (ahop (floor n 10)))))) (defun aho3 ( cur end_1 &optional ln ) (if (>= cur end_1) (nreverse ln) (let* ((mf3 (= (mod cur 3) 0)) (ahof (or mf3 (ahop cur)))) (setf ln…

没アイデア

没になったアイデア。複雑すぎるだろう。 (defmacro def-s (var &key force-def-as-variable ) `(flet ((my-func (x) (format t "myfunc ~a~%" x))) (if ,force-def-as-variable (if (fboundp ,var) (error (format nil "var is already defined ~s" ,var)) …

make-XXXXX と def-XXXXX

SICP の場合 (set! x (make-wire)) とするので関数の名称は make でよかった。マクロを使った場合 (make-wire x) これはちょっとおかしい。common lisp でも (setf a (make-array 3)) だ。struct の生成の場合 (defstruct my-d m-v) だ。したがって、この場…

回路シミュレータ完成

おおげさだが、SICP の回路シミュレータが common lisp で動くようになった。SICP にあった reset はあえて入れていない。full-addr まで動いた。さて、LoL の defmacro! 使いどころが難しい。LoL でも必要のないところは defmacro (!がない普通の defmacro)…

せかいのなべあつ

3の倍数のときにあほになって5の倍数のときに犬になります。 3がつくときにあほになるというバリエーションもあるな。 (defun ahowow ( cur end_1 &optional ln ) (if (>= cur end_1) (nreverse ln) (let ((mf3 (= (mod cur 3) 0)) (mf5 (= (mod cur 5) 0…

lysp

lysp なるものを発見した。ものすごく小さい。dlsym を巧妙に使っている。 (define exit (dlsym "exit")) (exit 0) libc にあるものならある程度 mapping できるぞ。 (define printf (dlsym "printf")) printf もこの通り。これでこのサイズ size -x lysp te…

alet もつかう

(defmacro make-wire (var) `(if (fboundp (quote ,var)) (princ "error!!!") (setf (symbol-function (quote ,var)) (alet ((signal-value) (action-procedures)) (dlambda (:get-signal () signal-value) (:set-signal (new-value) (if (not (eq signal-va…

dlambda meets SICP

SICP のディジタル回路のシミュレータってのを common lisp 上にポーティングしようと試みている。まずは make-wire からだ。LoL を読んだ直後だったので dlambda が使えると直感的に思い試して見る。 (let ((signal-value) (action-procedures)) (dlambda (…

一発ではないが

多少小さくなった。ハードコーディング気味。なぜ?おそらく foreach という発想から抜け出さないとうまくかけないのだろう。私は抜け出せていない。 (asdf:oos 'asdf:load-op 'cl-ppcre) (defun my-file-input () (with-open-stream (stream (open "yanau_c…

yaneu.lisp

できました。cl-ppcre つかったら一発だったりして。 (asdf:oos 'asdf:load-op 'cl-ppcre) (defvar xoutput 'nil) (defvar youtput 'nil) (defvar all-output 'nil) ;(setf wq (string #\")) ;(setf wq (coerce wq 'string)) (defun |#%-reader| (stream sub…

直積を求める

foreach 的な発想がやっぱりミスリード。直積を求めるのが先決だ。 (setf pt0 '("XXX" ("x_A" "x_B" "x_C"))) (setf pt1 '("YYY" ("y_A" "y_B" "y_C"))) (defun make-pair (pt) (let ((src (car pt)) (ln-dst (cadr pt))) (mapcar (lambda (x) (list src x))…

といいつつ

システム側で最適化は断念、、、(あきらめがはやいな)しかし、scheme のソースを最適化すると、87572 あった alloc 回数が 22053 に激減。よーく考えてみると、単に自分の scheme がださいだけだが。

GC 完成

もうチョイテストしなきゃならんが GC 完成。割と省メモリですんだと思う。GC の閾値を 0.3(low_water) と 0.6(high_water) にした。low_water を越したら同じメモリサイズで Copying GC。high_water をこしたら倍のメモリをとる。100% とになったら、ちょっ…

テニス

手首をいためたので一週スキップして久々にラケットを握る。やっぱだめじゃん。痛い。っていうかキーボード入力にも響く。しばらくやすまんとなぁ〜〜。

GC

やっと完成も SICP にあるようにコピーで(Copying GCで)つくってしまったので、特定のタイミングでしか GC 出来ないじゃん。いまさらだが、、、mark & sweep に変えるか?vx-scheme は調べたら mark & sweep だった。

Spartan6

SP605 というボードが売り出された。LX45T をつかっている。メモリが DDR3 で1GB?ずいぶんとふんだんについているなぁ。PCIe がついているのが特徴だ。とりあえずニューホライズンで注文してみる。

PCIe

PCIeX じゃなくなったのか?PCIe と略すようになった。大きな X がなくなった。以前、PCIeX 用の検査ソフトを作ったことがある。これを復活させようかと思う。以前のは非常に特殊なハードを必要としついでに書くとそのハードが普通じゃなかった。専用の Wind…

scheme

やっと GC がまともに動き出した。最初の設計が悪かったので大幅な書き直しを余儀なくされてしまった。その上、与えられたシンボルの検索を線形で行うのでめちゃくちゃ効率が悪い。ハッシュを持てばいいのだろうが、ハッシュの内部形式はどうしたらよいのだ…

似非 RTP とマルチキャスト

苦労するぜ。結局こんな感じになった。 #define IP_ADDR "239.192.0.1" InetAddress multicast(IP_ADDR); uint32_t ip_addr; ip_addr = multicast.ip_addr; struct ip_mreq maddr; memset(&maddr, 0, sizeof(maddr)); maddr.imr_multiaddr.s_addr = ip_addr;…

vpi のテスト

iverilog で vpi をつかってみた。基本的には wiki にある通りにやっていけばよい。http://iverilog.wikia.com/wiki/Main_Page http://iverilog.wikia.com/wiki/Using_VPIVPI の資料が少ないが、、、こんな感じで改造した。 static int hello_calltf(char *u…