5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

「コンパイラ・スクリプトエンジン」相談室4

1 :デフォルトの名無しさん:04/11/10 23:30:50
言語仕様や処理系の話題に関するスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換,CPS変換,
レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化,それに
VM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。

前スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち)
3 http://pc5.2ch.net/test/read.cgi/tech/1070089173/ (前スレ)

関連リンクは多分 >>2-10 あたり

2 :デフォルトの名無しさん:04/11/10 23:30:59
いらん。

3 :デフォルトの名無しさん:04/11/10 23:31:40
くそスレ立てる子もいらん。

4 :デフォルトの名無しさん:04/11/10 23:32:27
コンパイラ等を扱ったドキュメント

色々なツールの紹介
http://catalog.compilertools.net/

コンパイラ関連のリンク集
http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml

スクリプティング言語資料室(仮) (リンク)
http://www.kt.rim.or.jp/~kbk/

Compiler Construction
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html

Compiler Construction (1997)
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html

情報システム工学実験 III コンパイラ・コンパイラ
http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html

OS/Programming 簡単な C コンパイラ
http://www.csg.is.titech.ac.jp/~chiba/lecture/os/

正規表現
http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm

コンパイラ研究・開発情報の一集積所
http://compilers.cs.uec.ac.jp/

Links and Selected Readings
http://www.gnu.org/software/gcc/readings.html

5 :デフォルトの名無しさん:04/11/10 23:33:05
Lex(Flex) Yacc(Bison) 構文解析

UNIX板
yacc & lex
http://pc.2ch.net/test/read.cgi/unix/1031801314/

Lex and YACC primer/HOWTO (邦訳)
http://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html

Turbo Pascal Lex/Yacc
http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html

Jim Roskind's LALR(1) C++ Grammar
http://www.empathy.com/pccts/roskind.html

Flexと Bisonを同時に使う
http://guppy.eng.kagawa-u.ac.jp/~kagawa/1999/SysProg/both.html

KITE_ASM (yacc,lex)
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/yacc/
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/lex/

Cygwin
http://www.cygwin.com/

GNU utilities for Win32
http://unxutils.sourceforge.net/

6 :デフォルトの名無しさん:04/11/10 23:33:32
その他のパーサジェネレータ等

ANTLR(非yaccのパーサジェネレータ)
http://www.antlr.org/

JavaCC(Java Compiler Compiler)
https://javacc.dev.java.net/
http://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html

CUP & JLEX or CUP & JFlex
CUP http://www.cs.princeton.edu/~appel/modern/java/CUP/why.html
JLEX http://www.cs.princeton.edu/~appel/modern/java/JLex/
JFlex http://www.jflex.de/

SableCC
http://www.sablecc.org/

¬<><∪∪ (notavacc)LALR(1)
http://ne.cs.uec.ac.jp/~koto/notavacc/

JavaCCはLL(k)だけど、上のはANTLR以外はLALR(1)
でもANTLRはC++なんかにも対応。

boost::spirit(C++のテンプレートでEBNFの構文を模倣)
http://spirit.sourceforge.net/
http://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
http://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html

7 :デフォルトの名無しさん:04/11/10 23:33:52
ガベコレ

GC FAQ -- draft
http://www.iecc.com/gclist/GC-faq.html

A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

一般教養としての Garbage Collection
http://www.is.s.u-tokyo.ac.jp/~vu/01/jugyo/processor/process/soft/compilerresume/gc/gc.html

Garbage Collection : Algorithms for Automatic Dynamic Memory Management
http://www.amazon.com/exec/obidos/ASIN/0471941484/

8 :デフォルトの名無しさん:04/11/10 23:34:15
参考書籍

●コンパイラ 原理・技法・ツール 1&2
http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
http://www.amazon.co.jp/exec/obidos/ASIN/4781905862/
通称ドラゴンブック。バイブル。

●コンパイラ構成法 原田 賢一
http://www.amazon.co.jp/exec/obidos/ASIN/4320029224/
http://www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード)

●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
http://www.amazon.co.jp/exec/obidos/ASIN/4000103458/
一冊で済ませたい人へ。

●コンパイラの構成と最適化 中田 育男
http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/
最適化がメイン。

●コンパイラの仕組み 渡邊 坦
http://www.amazon.co.jp/exec/obidos/ASIN/4254127081/
薄い奴(185p)を読みたい人に。

●21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
ペーパーバック版: http://www.amazon.co.jp/exec/obidos/ASIN/0321210913/
ハードカバー版: http://www.amazon.co.jp/exec/obidos/ASIN/0321131436/

●スモールコンパイラの制作で学ぶプログラムのしくみ
http://www.cbook24.com/bm_detail.asp?sku=4774121770

9 :デフォルトの名無しさん:04/11/10 23:41:19
処理系,スクリプト

kikyou.info (吉里吉里というゲームのスクリプト)
http://kikyou.info/

tiny C コンパイラ (C)
http://www.watalab.cs.uec.ac.jp/tinyCabs.html

6809用 Micro C コンパイラ
http://www.axe-inc.co.jp/pds/mc09.html

Portable Object Compiler (Obj-C >> C のトランスレータ?)
http://users.pandora.be/stes/compiler.html

自作コンパイラの部屋(PL/1, Pascal等)
http://www.tokumaru.org/

『Rubyソースコード完全解説』サポートページ
http://i.loveruby.net/ja/rhg/

『やさしい Lisp の作り方』と『やさしい Java インタプリタ の作り方』見つけた。
Java と C# で実装。
ttp://www.okisoft.co.jp/esc/go.html
ttp://www.okisoft.co.jp/esc/go2.html
ttp://www.okisoft.co.jp/esc/go3.html
ttp://www.okisoft.co.jp/esc/go4.html

MSによるPEフォーマット仕様書(日本語)
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html

10 :デフォルトの名無しさん:04/11/10 23:49:54
LISP?はぁ?
負け組言語は不要w



11 :M.B.:04/11/11 00:01:58
>>10
馬鹿め、Lisp と Forth はどこにでもいるのだぞ。
侮ってはイカン。

12 :デフォルトの名無しさん:04/11/11 01:54:49
LISPはCと同じ速度、Javaよりも省メモリ、AI関係に使用しやすい
とかの理由でボーイング777の製造とかYahooStoreのシステムに
フレームワークとして利用されてるよね。。

LISPがコンパイルして実行できて、同じAI向けのPrologができへんのなんで?
(LISPはS式で、Prologの方は実行時に述語を受理したりすんのと関係ある?)

Prologもコンパイルできる…とか、法律家気取りの言語マニアな
意見は抜きにして簡単に教えて。

13 :sage:04/11/11 02:00:12
コンパイラとバーチャルマシン
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13308-7

14 :デフォルトの名無しさん:04/11/11 02:04:25
漏れはいつも構文解析まではフンフンって読めるけど、
意味解析やコード生成以降はホント、チンプンカンプン。

CPUとかアセンブラとかの勉強、やっぱ必要か(笑)?

15 :デフォルトの名無しさん:04/11/11 02:33:02
>>12
LispとPrologを同列視してる時点で何もわかっちゃいないのが丸わかりだが、ま、
WAMをキーワードにぐぐってみれ。


16 :デフォルトの名無しさん:04/11/11 07:00:09
リスパーとか来ると嫌だなあ。

17 :デフォルトの名無しさん:04/11/11 09:13:53
LisperでもSmalltelkerでもコアな言語をゴリゴリ使ってて自分コンパイラをその上で作っちゃう人もかなり
居るらしいからいいんでね?

でもLispとかSmalltalkの話を聞くとかなり初期段階で他の言語の処理系を作ってるね。
あれはなんでだ?(w

18 :デフォルトの名無しさん:04/11/11 09:29:14
>>15
うほっ

19 :デフォルトの名無しさん:04/11/11 10:04:06
後半何がいいたいのかよくわからん……

20 :デフォルトの名無しさん:04/11/11 10:18:52
>>17
Java で Lisp のインタプリタ書くのは簡単。
けどハマりそうでイヤ。

21 :デフォルトの名無しさん:04/11/11 12:05:25
>>9 にも『やさしい Lisp の作り方』とかあるけど、それとは別に
「JAVAでLISPを作るのはCなどで作るよりも3倍は楽でないかと思われます。」
とか言いながらJavaLispをつくるサイトがここにもあたよ。

http://www.cobalt.co.jp/writing/index.html

書かれてある理由のとおりJavaでのLispは卑怯なぐらい簡単。

22 :デフォルトの名無しさん:04/11/11 14:23:12
いつもはじめからS式で書けば字句解析も構文解析も
いらないじゃんと思う。面白いのはそっから先だよな。


23 :デフォルトの名無しさん:04/11/11 15:00:24
全く同感。>>14みたいのを見るたびそう思う。
Cみたいな言語の構文解析をやって、そっから先に進みがたかったら
Lispのコンパイルを理解すればいい。
後からその両者を真中でつなげれば楽ちん。


24 :デフォルトの名無しさん:04/11/11 15:44:21
> Lispのコンパイルを理解すればいい。

わかった。Lispのコンパイルを自作を目指して勉強する。
お勧めの情報源があれば教えてチン子。

25 :デフォルトの名無しさん:04/11/11 17:48:57
コンパイラ研究・開発情報の一集積所
ttp://compilers.cs.uec.ac.jp/

26 :デフォルトの名無しさん:04/11/11 18:17:03
http://v.isp.2ch.net/up/1ed9c2013b91.jpg

27 :デフォルトの名無しさん:04/11/11 20:02:33
なんか>>1のスレッド紹介がバージョンアップしてるな。
羊頭狗肉になりそうな気もするが…

28 :M.B.:04/11/11 22:39:12
M.B.==20
いきなりコアな話だが、変数スコープの扱いにだけは気をつけれ。
「funarg問題」でググると出てくる。

29 :デフォルトの名無しさん:04/11/11 23:58:08
LISPってかなり、マニアックな言語だと思うんだけど(学術的に)
LISPを勉強するメリットって何かありますか?


30 :デフォルトの名無しさん:04/11/11 23:59:31
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Lisp

31 :デフォルトの名無しさん:04/11/11 23:59:49
実装が楽なので最初はいいかもね>LISP

32 :デフォルトの名無しさん:04/11/12 00:22:34
インタプリタのLISPはイー−ッパイあるけど
LSIPコンパイラについてはソースやら情報やらは見つけきらなかったですよ。

LISPじゃないけどSchemeのシステムで前に面白そうなのあったよ
http://tanaka-www.cs.titech.ac.jp/sinpro/Japanese/minutes/010425/okumura.pdf
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=Scheme%E3%80%80%E5%82%80%E5%84%A1

Rubyとくらべてどうするんべさぁ(笑

33 :デフォルトの名無しさん:04/11/12 00:35:22
25歳、LISPを勉強するまでは金無し君だったけど(ry


34 :デフォルトの名無しさん:04/11/12 00:42:41
素人丸出しで悪いが
インタプリンタとかって結局
int * code_ptr

Func_CPU{
swithc{
// add byte
case 0x0000:
*code_ptr+1 += *codo_ptr +2;
codde_ptr+=2;
break;
// sub byte
case 0x0001
*code_ptr)+1 -= *codo_ptr +2;
codde_ptr+=2;
break;
 ・・・

とかして命令とその後ろデータを置いといて
CPUが実際に演算するような関数を作ればと
思ったんですが実装では遅くなりそうですが
もっと良い実装方法はありませんか?

35 :M.B.:04/11/12 00:43:04
>>29
LOGO と同じくらい簡単。本当に、小学生でも大丈夫。
いろんなオマジナイを書かなくても、
電卓なみに簡単に使える。こういう言語でメジャーな言語は
Lisp と FORTH くらい。
OR や AND が制御文っつーのも目からウロコ。
教育用には Pascal と Lisp と FORTH はかなり向いているので、
Java でインタプリタ書いておくといいかも。
ちなみに FORTH インタプリタは、正味一日あれば書ける。

36 :デフォルトの名無しさん:04/11/12 00:46:03
>>32
lisp ていうか scheme のコンパイラネタはここから辿ってみるのはどうでしょ。
知ってたらごめんね。
ttp://library.readscheme.org/page8.html

37 :デフォルトの名無しさん:04/11/12 00:48:57
連投すまないけどコードが間違ってたので

int * code_ptr

Func_CPU{
swithc(*code_ptr){
// add byte
case 0x0000:
*code_ptr+1 += *code_ptr +2;
code_ptr+=2;
break;
// sub byte
case 0x0001
*code_ptr+1 -= *code_ptr +2;
code_ptr+=2;
break;
 ・・・


です。
こうやって命令とデータを配置してCPUの演算のような
関数を作って、そこで計算さえる方法だと実際に
他の関数内で演算をさせるより実装が遅くなりそうなんですが
もっと速い実装方法がありますか?


38 :M.B.:04/11/12 00:49:42
>>34
Java の「中間コード+仮想マシン」方式が、
なんだかんだいっても一番実際的。
USCD の p-System とか、BCPL の IntCode とか。
とりあえずこの方式で動かしてみて、
「遅い」と思ったら javaCC なり BISON なりに
乗り換えるのが実際的。
何より移植が楽だしな。

39 :デフォルトの名無しさん:04/11/12 00:53:00
byte * code_ptr

Func_CPU(){
swithc(*code_ptr){
// add byte
case 0x0000:
*code_ptr+1 += *code_ptr +2;
code_ptr+=3;  // 3byteだけポインターを動かす
break;
// sub byte
case 0x0001
*code_ptr+1 -= *code_ptr +2;
code_ptr+=3;
break;
 ・・・


>>USCD の p-System とか、BCPL の IntCode とか。
これは知らないので調べてみます

JAVAの実装方法が載ってる本でもあるのでしょうか?
自分もそういった本が欲しかったので探したのですが
見つからなかったので・・・

40 :デフォルトの名無しさん:04/11/12 00:53:25
LISPのlambda知っとくだけでかなり変わるよなあ
Cでコールバック関数別途用意するとかがアホらしくなる
JavaScriptはその辺のLISPの良い所をうまく抽出した言語

41 :デフォルトの名無しさん:04/11/12 00:59:56
忘れてるよ

以下未整理とネタ

shuJIT (JITについて)
http://www.shudo.net/jit/index-j.html

ギコBASIC
C言語版
http://page.freett.com/gikob/gikobw00047.zip
C++版
http://page.freett.com/gikob/gbtl-beta3.zip

計算機能論ホームページ
(消えているので、どうしても見たければarchive.org等を利用する事)
http://buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/index.html

YACC link
http://www2.dewa.or.jp/rock/camp/yacc/whatyacc.htm

42 :デフォルトの名無しさん:04/11/12 01:00:51
>>39
switch使うと1命令毎のジャンプが2回発生するし、
関数テーブルにすると関数呼び出しで時間が掛かる。
C言語で書こうとすると効率はあまり良くならない。

こういった技術にdirect threaded codeというのがあって、
gnu forthの実装などで使われているらしい。
gccにはこのために用意したとしか思えないラベルを変数に格納できる
という拡張機能があって、うまく使うとswitchや関数より効率が良いVMが作れる。

VM() {
static void *op[] = {&&op1, &&op2, &&op3} ;
goto *op[pc++];
op1:
//・・・
goto *op[pc++];
op2:
//・・・
goto *op[pc++];
op3:
//・・・
goto *op[pc++];
}

これでswitchの倍程度は速くなる。

43 :デフォルトの名無しさん:04/11/12 01:04:23
あ、上はindirectだった
directの場合は↓

VM() {
static void *op[] = {&&op1, &&op2, &&op3} ;
void *pc = op;
goto *pc++;
op1:
//・・・
goto *pc++;
op2:
//・・・
goto *pc++;
op3:
//・・・
goto *pc++;
}

これでindirectよりも数割ぐらい効率がよくなる。
実際使う時はopの中身を実行する順に並べればいい。


44 :デフォルトの名無しさん:04/11/12 01:08:41
>>42
なるほど、VM(CPU部分)を呼び出さずに、
命令コード毎、関数内でGotoを使って飛ばしていけばいいのですね

確かにこっちの方が速いですね。

45 :デフォルトの名無しさん:04/11/12 01:08:52
>>36
   彡´⌒ヽミ
   (´・ω・`)   知らなかったでし。
    (つ甘と)    親切にどうも。
    `u―u´

46 :デフォルトの名無しさん:04/11/12 01:13:17
>>41
ギゴBASICみる限り、自分が考えた設計と同じですね

来週から1週間掛けて、スクリプトを作るつもりです。


47 :デフォルトの名無しさん:04/11/12 01:16:16
>>42
これ他の言語にも欲しいよね、インタプリタ作るにはもってこいの機能で、
アセンブラで書けば一発なのに、高級言語では全く書けない。

48 :デフォルトの名無しさん:04/11/12 03:58:44
>>42
gccにテーブルジャンプ書く機能あるなんてしらんかった。
自分のVMを書き換えてみるよ、ありがとん。


49 :M.B.:04/11/12 08:40:20
>>39
×USCD
○UCSD (カリフォルニア州立大学サンディエゴ校)

BCPL については
リチャーズ&スティーヴンズ
『BCPL 言語とそのコンパイラ』共立出版

50 :デフォルトの名無しさん:04/11/12 21:50:40
>>42のようなのはVCではできんのかぇ?

51 :M.B.:04/11/12 22:25:59
>>50
VCでできるかどうかはワカランけど、
BASIC では定跡とのこと。

52 :デフォルトの名無しさん:04/11/12 22:52:52
はぁ?

53 :デフォルトの名無しさん:04/11/12 23:06:16
26歳、VMを覚えるまでは金無し君だったけど(ry


54 :デフォルトの名無しさん:04/11/12 23:36:08
マジお勧め。

55 :デフォルトの名無しさん:04/11/12 23:42:35
bignumのライブラリでよさげなのないですか?
ライセンスとか面倒なのは避けたいので
DLL形式で使えるとうれしい。

56 :デフォルトの名無しさん:04/11/13 00:23:10
アフォ?
ライブラリでもライセンスは関係する罠w


57 :デフォルトの名無しさん:04/11/13 00:35:36
M.B. age sugi

58 :M.B.:04/11/13 00:39:06
>>57
sage ?

59 :M.B.:04/11/13 09:37:42
いま Java で Lisp を書こうとして、禿死苦悩んでいる。
atom や car や cdr は List クラスのメソッドにするとして、
read/write や eval って何のメソッドにするんだ?
入出力ストリームを extend して List を扱えるようにするのか?
ListProcceser とかいうクラスを定義して eval メソッドを実装するのか?
なんやらオブジェクト同士のつかみ合いみたいになって、
設計が綺麗くなんないんだが。

60 :デフォルトの名無しさん:04/11/13 10:28:53
つまんないことで悩んでるな。
Lispとしての関数と、それを実装するJavaでの話は全く関係ないよ。

簡単なLisp処理系のソースを読んでみることを勧める。
そうすればシンボルテーブルの概念も掴めるだろう。


61 :60:04/11/13 10:47:54
殴り書き。

class LispObject { ...}
class LispCons extends LispObject {...}
class LispSymbol extends LispObject {...}
class LispNumber extends LispObject {...}
class LispString extends LispObject {...}
class LispFunction extends LispObject {...}

class LispInterpreter {
Hashtable obarray;

public LispObject eval(LispObject form) throws LispError {
if (form.isAtom()) {
return (form.isSymbol() ? ((Symbol)form).getValue() : form);
} else if (isList(form)) {
func = ((LispCons)form).getCar();
if (func.isSymbol()) {
func = func.getFunction();
if (function == null || !function.isFunction()) {
throw LispError(略);
}
} else {
func = createLambdaFunction(func);
}
return callFunction((LispFunction)func, form.getCdr());
} else {
throw LispError("form is not a list.", form);
}
}


62 :60:04/11/13 10:50:11
殴り書きその2。

LispObject callFunction(LispFunction func, LispObject args) throws LispError {
int len = getListLength(args);
if (len < func.getMinArgs() || (func.getMaxArgs() != null && len > func.getMaxArgs())) {
throw LispError(略);
}
argsarray = new LispObject[len];
// コード略。引数をargsarrayにコピー。maxargsに足りなきゃnullで埋める。
func.call(argsarray);
}

void initialize () {
defineFunction("car", new LispFunction_car());
defineFunction("eval", new LispFunction(1,1) {
LispObject call(args) { return eval(args[0]); }
});
// ...
}
void defineFunction(String name, LispFunction func) {
LispSymbol sym = intern(name);
sym.setFunction(func);
}


63 :60:04/11/13 10:51:23
その2訂正: s/nullで埋める/nilで埋める/
その3。

LispSymbol intern(String name) {
Obj s = obarray.get(name);
if (s == null) {
LispSymbol sym = new LispSymbol(name); obarray.put(name, sym); return sym;
} else {
return (LispSymbol)sym;
}
}

class LispFunction_car extends LispFunction {
LispFunction_car() { super(1,1); } // minargs, maxargs
LispObject call(LispObject[] args) throws LispError {
if (args[0].isCons()) { return ((LispCons)args[0]).getCar(); }
else { throw LispError(略); }
}
}


64 :60:04/11/13 10:55:09
しまった、関数かマクロかで判別して、関数のときは先に引数を評価するんだった。
直すのマンドクセ。


65 :デフォルトの名無しさん:04/11/13 12:08:03
ここはお前の日記帳じゃねえんだ(ry

66 :60:04/11/13 14:32:11
いやなに、59の参考にでもなればと思って。


67 :デフォルトの名無しさん:04/11/13 19:14:06
SICPの「メタサーキュラ・インタプリタ」の章を嫁.
あそこのコードは素のSchemeでなくOOPLだったらもっと簡潔に書ける.

68 :デフォルトの名無しさん:04/11/13 19:44:06
> メタサーキュラ・インタプリタ
関係ないが、この言葉を見るとprologスレの論争を思い出す。
結局誰が正しかったのかな。

69 :デフォルトの名無しさん:04/11/13 19:56:15
>>68
論争って何?

70 :デフォルトの名無しさん:04/11/13 20:54:20
記録自体はもぅ何年も前のものなのに
そのまま生々しく残ってて痛々しいよね。

71 :デフォルトの名無しさん:04/11/13 21:07:36
まぁ、プロログ、リスプと言ってる時点で
実用的なプログラムを書いていない証拠だなw


72 :デフォルトの名無しさん:04/11/13 21:11:15
>>71
煽りならよそへ池

73 :M.B.:04/11/13 21:32:01
設計で悩んでたら、eval 以外の関数だけで半日潰れちまった

甘かった _| ̄|○

74 :デフォルトの名無しさん:04/11/13 21:44:00
今週は>>21
http://www.laplata.ne.jp/javalisp/
でも読んで、雰囲気つかんだ後、
来週の週末あたりに携帯Lispでも開発したら・・?

75 :M.B.:04/11/13 22:21:45
あれは邪道。LinkedList なんぞ使っちゃイカン。
結局 eq と equal の区別ができなくなって詰まってる。
現在、
中西正和『Lisp入門 システムとプログラミング』近代科学社
黒川利明『LISP入門』培風館
竹内郁雄『初めての人のためのLISP』サイエンス社
を読みながら悪戦苦闘中。

76 :M.B.:04/11/13 22:28:36
>>71
> まぁ、プロログ、リスプと言ってる時点で
> 実用的なプログラムを書いていない証拠だなw
まぁ、tsv や XML で間に合う仕事をしてる香具師には
無縁な話なのだがね。それが悪い訳ではまったくないが。

77 :デフォルトの名無しさん:04/11/13 22:29:07
なんかキチッとしたもの作り込んでるみたいなんで
完成したらサイトも作ってアップして下さい。

78 :デフォルトの名無しさん:04/11/13 22:30:53
>>75
まあ本人の自由だろうけど、そういうレベルの人が言語処理系について
知ったような口をきくのはどうかと思う(>>35とかね)。

79 :デフォルトの名無しさん:04/11/13 22:37:23
>>78
象牙の塔の中で言語論争してるわけじゃないからイイでし。
ここは78さんのために用意された花園でも、まして法廷でもないし。

そういうことをPrologスレを眺めてオモタ。

80 :デフォルトの名無しさん:04/11/13 22:38:32
>>78
お前何様だよ(^^;

81 :M.B.:04/11/13 22:53:41
>>78
前回 Lisp を書いたときは、
言語が FORTRAN (「大文字のフォートラン」、つまり60)で、
しかも再帰呼び出しが使えないので
(なにせ関数呼び出し用のスタックがなく、レジスタに直接
割り当てていたので、7層までしか使えない)、
プリプロセッサの皮を被せて「再帰呼び出し可能なFORTRAN」を
実現し(RATFOR みたいなもんだ)、その上で LISP を書いて、
その上に機械翻訳システムを実現したもんだ。

とはいえ N88 BASIC 上に LISP も PROLOG も実装したことがあるのだが
内部構成が全然思い出せない _| ̄|○

82 :M.B.:04/11/13 23:00:18
なんか思い出してきたぞ。
あのころはメモリが少なくて実用的なプログラムが書けるような環境が
立てられなかったのと、LISP はあくまで数式処理なんかに使う
ツールでしかなかったので、動いたところで「こんなん使えねーや」
っつーんで捨てちゃったんだ。
今なら Java で Lisp インタプリタ書いて、その上で Prolog の処理系
(Lisp で六百行くらい)を動かしても十分実用になる。
いい時代になったもんだ。

83 :デフォルトの名無しさん:04/11/13 23:11:49
だからさあ
ここはお前の日記帳じゃねえんだ>MB
つーかRATFOR出てくるなんていつの時代の人間だよ
>>75の文献も古すぎだぞ
古い本見ながら中途半端なLISP作るより
R5RSでも読んでScheme覚えたほうがいい

84 :デフォルトの名無しさん:04/11/13 23:22:57
>>83
別にいいじゃん、興味ないから読んでないけど(汗
まあ内容はここに一応ふさわしい。
極めてスレ違いな言語論争で埋め尽くされるよりマシ。


85 :デフォルトの名無しさん:04/11/13 23:24:27
スモールコムパイラを作ろうのねーちゃんは何歳だ?

86 :デフォルトの名無しさん:04/11/13 23:26:11
10さい

87 :M.B.:04/11/13 23:27:01
>>83
> つーかRATFOR出てくるなんていつの時代の人間だよ
知ってんじゃねーか。

88 :デフォルトの名無しさん:04/11/13 23:33:31
>>57 プンスカプー。

89 :デフォルトの名無しさん:04/11/13 23:35:10
コンパイラ

コンバイナ

コンバンワ
の区別が出来ない人がいるのですが、どうしたらいいですか。

90 :デフォルトの名無しさん:04/11/13 23:35:25
そういえば某スレにこんなのがあったなぁ
#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char*p,l[103][80],c[80],*q,*r,x;S(){for(;*p==32;++p);}T(){
for(r="GET \0OTO \0PUT \0RUN\0 QUIT\0IF"+5*n++;*r&&*r==*p;++r)++p;return!*r&&(S
()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets(p=l[i
=100]);while(i<101){n=0;S();g=atoi(p);if(*(q=p)==48||g)for(p=l[g],q+=3;*p++=*q
++;)i=101;else p=!*q?l[++i]:T()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i
]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T()?l[i=l[100][0]=0]:T()?exit(0),0
:T()?I()?p+3:l[++i]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g=I(),b[*(
short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g
:f-g:f+g),l[++i]);}puts("OK");}}

91 :デフォルトの名無しさん:04/11/13 23:36:51
ネタはマ板でやると喜ばれます

92 :デフォルトの名無しさん:04/11/13 23:49:01
まぁ、LISPなんぞ哲学みたいなものだ。

つまり、概念なりを学には大変よい言語だが、
実用的な価値は、ほぼゼロに近いw


93 :デフォルトの名無しさん:04/11/13 23:52:10
>>92
言語論争は死滅スレでやると喜ばれます、死ね


94 :デフォルトの名無しさん:04/11/13 23:52:49
hai hai

95 :M.B.:04/11/14 00:21:32
>>88
正直スマンカッタ orz

96 :デフォルトの名無しさん:04/11/14 00:33:20
>>94 > >>92 でしョ。

>>95
あんた熱くなると八兵衛(ry

MBのFortran話で
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=%E4%BC%8A%E7%90%86%E6%AD%A3%E5%A4%AB%E3%80%80%E9%AB%98%E9%80%9F%E8%87%AA%E5%8B%95%E5%BE%AE%E5%88%86%E6%B3%95
を思い出した。 哲学とも高尚な抽象概念とも関係ない使い道の例だお。







97 :M.B.:04/11/14 00:46:20
>>96
「親分! てぇへんだ!」
「おいおい、どうしたんだ八」
「まぁまぁ八兵衛さん、朝御飯はお済みになったの?」
「すんませんお内儀さん、ってそれどころじゃ無ぇんで。
大川にお六字が……」

98 :M.B.:04/11/14 00:48:35
>>97
……ってこんだけネタ振っといて八兵衛じゃなくて八五郎だ

またやっちまった _| ̄|○

99 :デフォルトの名無しさん:04/11/14 01:11:08
コテハンってどうしてこんな(ry

100 :デフォルトの名無しさん:04/11/14 01:12:52
100get!!!!!

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)