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

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

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

1 :デフォルトの名無しさん:2009/01/28(水) 20:49:02
プログラミング言語処理系の開発に興味のある人達のスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

過去スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/
3 http://pc5.2ch.net/test/read.cgi/tech/1070089173/
4 http://pc5.2ch.net/test/read.cgi/tech/1100097050/
5 http://pc8.2ch.net/test/read.cgi/tech/1106129164/
6 http://pc8.2ch.net/test/read.cgi/tech/1115335709/
7 http://pc8.2ch.net/test/read.cgi/tech/1129287390/
8 http://pc8.2ch.net/test/read.cgi/tech/1131273918/
9 http://pc8.2ch.net/test/read.cgi/tech/1135082582/
10 http://pc8.2ch.net/test/read.cgi/tech/1146844753/
11 http://pc11.2ch.net/test/read.cgi/tech/1160879890/
12 http://pc11.2ch.net/test/read.cgi/tech/1188688416/
関連リンクは多分 >>2-10 あたり

2 :デフォルトの名無しさん:2009/01/28(水) 20:49:29
Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/

★コンパイラ一般

・色々なツールの紹介
 http://catalog.compilertools.net/
・コンパイラ関連のリンク集
 http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml
・スクリプティング言語資料室(仮) (リンク集)
 http://www.kt.rim.or.jp/~kbk/
・Compiler Construction
 http://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/
・情報システム工学実験 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
・国産のコンパイラ共通インフラストラクチャCOINS
 http://www.coins-project.org/

3 :デフォルトの名無しさん:2009/01/28(水) 20:49:56
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 ttp://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
 ttp://www.empathy.com/pccts/roskind.html
・Flexと Bisonを同時に使う
 http://guppy.eng.kagawa-u.ac.jp/2005/SysProg/both.html
・KITE_ASM (yacc,lex)
 http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/
・bison用のC++ LALR skeleton
 ttp://www.bj-ig.de/software/bison/
・ANTLR(非yaccのパーサジェネレータ)
 ttp://www.antlr.org/
・JavaCC(Java Compiler Compiler)
 ttps://javacc.dev.java.net/
 ttp://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
 ttp://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html
・CUP, JLex, JFlex
 http://www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP)
 ttp://www.jflex.de/
・SableCC
 ttp://www.sablecc.org/
・¬<><∪∪ (notavacc)LALR(1)
 http://ne.cs.uec.ac.jp/~koto/notavacc/
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 http://spirit.sourceforge.net/
 ttp://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
 ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html

4 :デフォルトの名無しさん:2009/01/28(水) 20:50:53
★ごみ集め

・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/jugyo/processor/process/soft/compilerresume/gc/gc.html
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
 http://www.amazon.com/exec/obidos/ASIN/0471941484/

★処理系,スクリプト

・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 インタプリタ の作り方』
 http://www.okisoft.co.jp/esc/go.html
・MSによるPEフォーマット仕様書(日本語)
 http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html

5 :デフォルトの名無しさん:2009/01/28(水) 20:51:26
★学会

・PLDI
 http://research.microsoft.com/conferences/pldi06/
 コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL
 http://www.cs.princeton.edu/~dpw/popl/06/
 PLDIよりは理論寄りだが大いに参考になる。
・ICFP
 http://icfp06.cs.uchicago.edu/
 関数型言語に関する学会。とても難しい。
・OOPSLA
 http://www.oopsla.org/
 オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC
 http://www.st.cs.uni-sb.de/cc/
 ヨーロッパ系。派手さはないが堅実。

6 :デフォルトの名無しさん:2009/01/28(水) 20:53:35
★参考書籍

・コンパイラ 原理・技法・ツール 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/0321131436/
 まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
 http://www.cbook24.com/bm_detail.asp?sku=4774121770
 初心者向けの優しい解説本。


以上

7 :デフォルトの名無しさん:2009/01/28(水) 21:07:26
>>1

8 :デフォルトの名無しさん:2009/01/29(木) 12:12:16
>>1 乙これはポニーテールだからなんとかかんとか

テンプレ追加

PEG(解析表現文法),Packrat Parser
http://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E8%A1%A8%E7%8F%BE%E6%96%87%E6%B3%95

9 :デフォルトの名無しさん:2009/01/29(木) 20:21:44
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

10 :デフォルトの名無しさん:2009/01/30(金) 22:49:04
スクリプトエンジン作ってみたい。
お勧めのサイト教えて

11 :デフォルトの名無しさん:2009/01/30(金) 23:13:10
>>10
数レス前も読めないのか…

12 :デフォルトの名無しさん:2009/01/30(金) 23:35:19
やっぱいいや

13 :デフォルトの名無しさん:2009/01/31(土) 12:13:29
@wiki 更新しときました。

14 :デフォルトの名無しさん:2009/02/02(月) 23:15:27
「★字句・構文解析」に追加。

caper
http://naoyuki.hirayama.googlepages.com/caper.html



15 :デフォルトの名無しさん:2009/02/03(火) 04:46:47
>>10
サイトでないけど
http://www.amazon.co.jp/スクリプトエンジン-プログラミング-坂本-千尋/dp/4797347627/ref=sr_1_1?ie=UTF8&s=books&qid=1233603981&sr=8-1

これで最低限の知識は得られると思う

16 :デフォルトの名無しさん:2009/02/06(金) 17:32:19
パーサジェネレータは検索すれば山ほどひっかかるけど、
スキャナージェネレータは少ないね。
すぐに見つかるのはLex, Flex, JLex, JFlexくらいか。

UINTVAL = "[0-9]+";

のように書けばスキャナークラスを生成してくれる、
お手軽スキャナージェネレータは無いのかな?



17 :デフォルトの名無しさん:2009/02/07(土) 01:05:33
>>16
つ「正規表現」

18 :デフォルトの名無しさん:2009/02/07(土) 15:58:49
各コードジェネレーターが生成したコードの処理速度を比較結果を掲載しているサイトってないの?

19 :デフォルトの名無しさん:2009/02/07(土) 16:22:18
ここで聞いていいのかわからんけど、ActionScriptのDSL処理系ってない?
ActionScriptっていちいちコンパイルせなあかんやん?
面倒なんよね
オンザフライで処理してくれるDSLあると便利何やけど、emebedded向けなライブラリないかな?

検索してるんだけど、全然でてこないんだ

20 :デフォルトの名無しさん:2009/02/07(土) 21:19:58
>19
むかしActionScriptで書かれたJavaScript実装で、fiberみたいなこともできるのがあったけど、
ググッたら出てこなかったorz...


21 :デフォルトの名無しさん:2009/02/07(土) 21:21:40
>>16
マイ・オートマトンブームを起こすしかない。


22 :デフォルトの名無しさん:2009/02/07(土) 22:54:30
>>16
PEGでいいじゃん

23 :19:2009/02/08(日) 01:06:23
みなさん、ありがとう。

wonderfl関係あさってたらいろいろ発見しますた。

wonderflでポケコンでシューティング | wonderfl build flash online
http://wonderfl.kayac.com/code/338bb2c5f0058713460610b8794d4efa4f80309a

2009-01-08 - Simple Inspiration
http://d.hatena.ne.jp/keim_at_Si/20090108

Cannon macro language
http://www.yomogi.sakura.ne.jp/~si/SolidImage/cml/index.html

ゲーム用のちっこいDSLがあればなーと思ってたので調度よかった・・・
wonderflのはまあコンパイルはしないといけないけど、文字列を外部にだせばどんだけでもいけるよね

24 :デフォルトの名無しさん:2009/02/10(火) 22:34:36
Xtalの作者ってバンダイナムコゲームスで活動してるんだな…

25 :デフォルトの名無しさん:2009/02/24(火) 02:01:57
保守

26 :デフォルトの名無しさん:2009/03/07(土) 14:16:19
jp.ne.cappuccino.keisuken.lex
が字句解析してくれるみたいです。
http://cappuccino.jp/keisuken/java/lex/docs/specification.html

27 :16:2009/03/25(水) 05:11:37
>>17
>>21
>>22
>>26
何気なく書いただけなのに、暖かいレスさんくす。

他にもJavaの場合には、標準ライブラリのStreamTokenizerを使っても
字句解析らしきことができるようです。

http://www5b.biglobe.ne.jp/~psoft/lesson/StreamTokenizer.html



28 :デフォルトの名無しさん:2009/04/03(金) 20:03:50
XtalのPEG採用って、言語仕様側じゃなくて、アプリ側だったのか。

言語仕様側だったらセミナーにはぜひ行ったところだったんだが。

29 :デフォルトの名無しさん:2009/04/03(金) 20:31:43
Xtalスクリプトのコンパイラ自体はC++でがりがり書いてるからな。
PEGパーサを組み込みライブラリとして持つとのことようだが(詳しくはソースコード参照)

30 :デフォルトの名無しさん:2009/04/03(金) 22:05:00
コンパイラつーか、パーサね。

パーサジェネレータ使わずにがりがり書いてるね。腕力のある人はうらやましいわ。

31 :転載:2009/04/05(日) 09:38:58
IGDA Japan chapter - ニュース
http://www.igda.jp/modules/news/article.php?storyid=1622
13:10 - 14:00
「ごく簡単な並列処理スクリプトシステムの設計と実装」
□講師
小久保啓三(HAL東京)
(株)スクウェアでの代表作「ロマンシング・サガ」「FF5」「クロノトリガー」「FF7」。クロノトリガーとFF7では、スクリプトシステムの設計と実装に携わる。

14:00 - 14:50
「『サクラ大戦X』でのスクリプト運用事例」
□講師
秋葉晴樹(セガ)
株式会社セガ 第三CS研究開発部 リードプログラマ。
代表作は、サクラ大戦シリーズ、のび太の新魔界大冒険、ブレイザードライブ。
サクラ大戦シリーズは3から参加、主にADVパートのプログラムを担当。

15:20 - 16:10
「汎用スクリプト言語Xtal 設計と実装」
□講師
石橋立宣(バンダイナムコゲームス)
NBGI プログラマ。
PSP塊魂のエンディングミニゲームやシステム周り担当。
PSP太鼓のADV部分やシステム周り担当。
趣味で、C++組み込み用スクリプト「Xtal」を開発。

16:10 - 17:00
「Squirrelスクリプトを使った実装と活用」
□講師
神尾隆司(スクウェア・エニックス)
Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル の開発に関わる。
北出智(スクウェア・エニックス)
PS2 聖剣伝説4、Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル 等の開発に関わる。

32 :デフォルトの名無しさん:2009/04/07(火) 12:55:27
誘導されてきました。よろしくお願いします。

自作ソフトで使うマクロの文法を、拡張しようと思い、
lexやらyaccやらbisonやら調べ始めたのですが・・・難しい・・・

例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。

・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
 を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
 では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
 任せ一発という形に出来ればと思っています。
 (プラグイン辞書の関数ポインタ呼び出しみたいな形)

・マクロの中で関数マクロの定義が出来るようにといいのですが、
function hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
 こういうのを実現しているサンプルなどありましたら教えてください。


33 :デフォルトの名無しさん:2009/04/07(火) 13:20:14
現状、どういう風に構文解析とかしていて、どういう風にマクロを実行したり
プラグインを呼び出したりしてるわけ?

34 :デフォルトの名無しさん:2009/04/07(火) 14:32:15
今の時点の文法はシンプルです。プラグイン名と引数、セミコロンのみ。
 hoge[(...)]; [...]
プラグイン名を配列に積み上げて、一括でマクロ構文を読み込み、
セミコロンで分割して、参照の配列に積み直し。
動かすときに、それぞれのインターフェースを順に呼び出す形です。

これだと代入操作ひとつ出来ないので、何か良い方法を探しています。

35 :デフォルトの名無しさん:2009/04/07(火) 15:06:31
関数名だろうが変数名だろうが,言語組み込みじゃないトークンは
トークン化の時点では何も考えず全部「識別子」一括りでおk

36 :デフォルトの名無しさん:2009/04/07(火) 15:21:59
そもそも、「変数」といったものをどうやって実現したらいいのか、とか、
スクリプトを読み込んで、関数定義があったら何をして、関数の呼び出しが
あったら何をするのか、とか、そういうことがそもそも全くわかってないのでは?

なんか配列って言ってるけど、リストとか木とかをポインタで操るコードは
書ける? それができないと本格的な処理系は無理。

37 :デフォルトの名無しさん:2009/04/07(火) 15:35:53
目先にとらわれて本質が見えてない感じがする
高レベルな言語を触ったりしてみてもいいんじゃない

38 :デフォルトの名無しさん:2009/04/07(火) 16:24:26
>>35
なるほど。最後にまとめてチェックすればいいという考え方ですね。

>>36
その通りです。yaccやbisonのサンプルを探してみても、文書を
解析するところまでで、その先を実際にどうやっているかの例が
なかなか・・・。

唯一良さそうな例を見つけました。
>ttp://www.ibm.com/developerworks/jp/linux/library/l-pirates4/index.html
生のソースもとれるようですし、これで勉強してみます。
ホントはもう少しシンプルな例があればいいのですが・・・

39 :デフォルトの名無しさん:2009/04/07(火) 16:53:02
yacc 電卓、で検索すれば簡単な電卓の例がいくつも出てくると思うが...

40 :デフォルトの名無しさん:2009/04/07(火) 17:02:05
yacc/lexを自作するところから始めるのがお勧め。

41 :デフォルトの名無しさん:2009/04/09(木) 07:11:35
LLVMの簡単な使い方ってどこ見ればいいのですかね?

42 :デフォルトの名無しさん:2009/04/09(木) 08:21:46
>>41
http://llvm.org/

43 :デフォルトの名無しさん:2009/04/09(木) 13:17:44
これはワクテカじゃないか?

InfoQ: LLVMおよびRubyの総まとめ:llvmruby、yarv2llvmおよびregexpllvm、Rubinius
http://www.infoq.com/jp/news/2008/10/llvmruby-roundup-yarv2llvm
InfoQ: MacRuby 0.5にLLVMをベースにした高速VMが搭載される
http://www.infoq.com/jp/news/2009/04/macruby-llvm-speed

44 :デフォルトの名無しさん:2009/04/12(日) 03:35:20
おー、世の中にはこんな便利なものがあるのか。
たとえ苦労してでも勉強して使いこなしたいところだな。

45 :デフォルトの名無しさん:2009/04/13(月) 18:14:29
>>38
コンドーさんの「yaccによるCコンパイラ」がおすすめ
・・・なんだけど、プレミアがついちゃって高いんだよなあ

46 :デフォルトの名無しさん:2009/04/25(土) 12:04:35
>>38
yaccやbisonでないと駄目なのかい?
古くさくて使いにくいから、今からパーサを書くなら
他にいいジェネレータがありそうだけど。

C++、C#、Javaならばcaperがお薦め。
(Javaジェネレータはまだレポジトリから落としてビルドする必要がある)

ttp://naoyuki.hirayama.googlepages.com/caper.html
ttp://code.google.com/p/caper/updates/list

どうしてもyaccやbisonがいいなら、以下を読めばいいよ。

ttp://guppy.eng.kagawa-u.ac.jp/2006/ProgLang/bison-1.2.8/bison-ja_toc.html

47 :デフォルトの名無しさん:2009/04/25(土) 14:37:19
>>46
日本語の文書!!

いや実は挫折してました。ごめんなさい。がんばります。

48 :デフォルトの名無しさん:2009/04/26(日) 18:29:20
紙メディアで出てるGNUのBison解説とかどうかな?

49 :デフォルトの名無しさん:2009/04/28(火) 22:46:38
>>48
以下のことですな。

http://www.amazon.co.jp/Bison入門-チャールズ-ドネリー/dp/4756130658

内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。
紙媒体だと電車の中などで読めるのがいいんだけどね。


50 :デフォルトの名無しさん:2009/04/28(火) 23:31:19
そういえばこんなのが出るとか

Flex & Bison - by J Levine (2009/8/31)
http://www.amazon.co.jp/dp/0596155972

51 :デフォルトの名無しさん:2009/04/29(水) 08:10:34
> 内容は>>46の一番下と同じなのだけど、絶版で値段が高騰しているのが問題かな。

うわわわ。絶版してたのか。

52 :46=49:2009/04/29(水) 10:37:05
>>47
> yaccやbisonのサンプルを探してみても、
> 文書を解析するところまでで、
> その先を実際にどうやっているかの例がなかなか・・・。
>
> 日本語の文書!!

日本語で書かれていて意味解析以降も
全部載っているドキュメントを探してきた。

http://ecs.kuis.kyoto-u.ac.jp/isle/le3b/siryo.ps

Flexの解説 (GNU公式ドキュメントの日本語訳) もあった。

Flex入門
http://ascii.asciimw.jp/pb/bookmart/pdf/47561/4756130976.pdf



53 :52の続き:2009/04/29(水) 10:41:59
読みやすいように、要点だけ説明しておこう。
まずは字句解析から。

まずはソースファイルを読み込み、字句解析にかける。
字句解析では文字列を切って、種類を表すタグを付ける。
(タグはenumなどの定数)

例えば、

int main(void) {return 0;}

ならば、字句解析の結果は
elem(INT, "int");
elem(ID, "main");
elem(PAREN_L, "(");
elem(VOID, "void");
elem(PAREN_R, ")");
elem(BRACE_L, "{");
elem(RETURN, "return");
elem(INTLITERAL, "0");
elem(SEMICOLON, ";");
elem(BRACE_R, "}");
のようになる。
(elemはC++のクラスのつもり)

引数は左がenum定数で右は文字列ね。
一行を1つの構造体 (またはクラスやタプル) に入れると便利。
(Flexだと種類と文字列を別々に取得するんだったかな?)



54 :52の続き:2009/04/29(水) 10:55:29
字句解析の結果を構文解析にかける。
上の例だと、ベタに書くと以下のようになる。

Program
: INT ID PAREN_L VOID PAREN_R BRACE_L RETURN INTLITERAL SEMICOLON BRACE_R
;

「=」の右側には、どういう種類の文字列がどういう順で並んでいるかを書く。
これだと本当に上の例しか読めなくなるので、
例えばVOID型で中身の無い関数も定義できるようにすると、以下のようになる。
(「|」は「または」という意味, 複数のパターンのどれでもいい場合に使う)

Program
: INT ID PAREN_L VOID PAREN_R BRACE_L RETURN INTLITERAL SEMICOLON BRACE_R
| VOID ID PAREN_L VOID PAREN_R BRACE_L BRACE_R
;

これで、以下のコードも読めるようになった。

void main(void) {}



55 :52の続き:2009/04/29(水) 10:58:05
しかし、こうやって全部のパターンを網羅していくときりが無いよね。
だから、部分的に抜きだして共通化する。
上の例だと、

Program
: ReturnType ID PAREN_L VOID PAREN_R BRACE_L Body BRACE_R
;

ReturnType
: INT
| VOID
;

Body
: // 空の場合は何も書かない
| RETURN INTLITERAL SEMICOLON
;

こんな具合に、共通でない部分を追い出してやるわけだ。
# void型なのにreturnしている関数や
# int型なのにreturnしていない関数も読めるようになったことに注意。

構文解析では、一度に完璧な定義を書こうとせずに、
少しずつ解析できるパターンを増やしていくとやりやすいと思う。


56 :デフォルトの名無しさん:2009/05/02(土) 17:46:16
>>30
LLVMもbisonパーサから手書きのパーサにかえたんだっけ。
案外、手書きの方が開発しやすいのかな?

57 :デフォルトの名無しさん:2009/05/05(火) 15:51:13
構文の規模や性質や、頻繁に規則をいじるかどうか、などなどによる。

58 :デフォルトの名無しさん:2009/05/19(火) 01:30:41
FlashのActionScriptで自作言語を作ろうとして
ttp://www.hakkaku.net/articles/20080226-154
ttp://www.hakkaku.net/articles/20080307-158
を先日から見ているんだが、字句解析の部分がさっぱりわからん。
構文解析のkmyaccの部分は良く分かるんだが、lexにあたる部分を
手書きしているらしく、なんか自力でトークンを探して分割したり
クラスをゴリゴリ作ったりしている。正直ムリポ。

その辺に落ちてるlex/flexで代用したいんだが、どうやればいいんだろう?
もしそれがムチャなことなら、「kmlex」的なものはないだろうか?

59 :デフォルトの名無しさん:2009/05/19(火) 04:26:19
このレベルがわからないんじゃ
言語なんて作るの無理

60 :デフォルトの名無しさん:2009/05/19(火) 07:28:20
AS3.0以降はRegExpあるから、自作してもすぐ出来るだろ

61 :デフォルトの名無しさん:2009/05/19(火) 07:50:10
RegExpで字句解析するの?

62 :デフォルトの名無しさん:2009/05/19(火) 08:10:18
RegExpで字句解析しないの?

63 :デフォルトの名無しさん:2009/05/19(火) 08:23:56
な・・・RegExpで字句解析しただと!?

64 :デフォルトの名無しさん:2009/05/19(火) 09:11:48
パース、構文木生成、式解釈、ニーモニック生成、コード出力をやるだけだ。
慣れたらゼロからでも数日で実装できる。

65 :デフォルトの名無しさん:2009/05/26(火) 01:25:57
LLVMを勉強したいです
書籍ってありますか?

66 :デフォルトの名無しさん:2009/05/26(火) 02:14:25
本家のドキュメントがよい。

67 :デフォルトの名無しさん:2009/05/26(火) 09:20:42
本家にkaleidoscopeっていう処理系を作りながらllvmを憶えるチュートリアルがあるよ。

68 :デフォルトの名無しさん:2009/05/26(火) 23:32:34
>>61
「文字列の先頭からアルファベットに引き続く、空白までの連続部分のマッチ」に
該当すれば、それを予約語として認識し、文字列からその部分を取り除いて
再度先頭から…を繰り返しているんだろう。

>>62
getChr()で一文字づつ文字を読み込んで、「空白の次にアルファベットだから
このトークンは予約語」というアタリの付けかたをしているんだろう。

69 :デフォルトの名無しさん:2009/05/28(木) 17:16:46
ドラゴンブック二版の邦訳買ってきたよ。すごい紙薄い。

70 :デフォルトの名無しさん:2009/05/28(木) 18:16:41
いい紙なのかな。TAOCPみたいな?

71 :デフォルトの名無しさん:2009/05/29(金) 00:45:48
バラシテスキャンしないと

72 :デフォルトの名無しさん:2009/05/29(金) 22:22:08
http://up2.viploader.net/pic2/src/viploaderf159403.jpg

バーコード邪魔

73 :デフォルトの名無しさん:2009/05/29(金) 22:49:06
[これはひどい]

絵本とかでバーコードがシールになってて、買ったらはがせるのあるけど、
そうしてほしいところだな。技術書だから無理に決まってるけど。

74 :デフォルトの名無しさん:2009/05/29(金) 22:53:56
なんか本当に剣と魔法の挿絵になってね?

75 :デフォルトの名無しさん:2009/05/29(金) 23:01:57
楯が Syntax Directed Translation
剣が LALR Parser Generation
鎧が……読めにゃい
竜が Complexity of Compiler Design かな?

76 :デフォルトの名無しさん:2009/05/29(金) 23:24:16
拡大
http://up2.viploader.net/pic2/src/viploaderf159408.jpg

77 :デフォルトの名無しさん:2009/05/29(金) 23:32:24
Data Flow Analysis か

78 :デフォルトの名無しさん:2009/05/30(土) 00:32:32
コンパイラ第2版ってどこ改訂されたの?

79 :デフォルトの名無しさん:2009/05/30(土) 02:55:37
全面的に

80 :デフォルトの名無しさん:2009/05/30(土) 03:02:46
読みやすくなってる?

81 :デフォルトの名無しさん:2009/05/30(土) 16:40:02
>>75
もう画像流れてるわ
第一版と同じで鎧は syntax directed translation じゃなかろうか

default を「省略時解釈」とか、そういうのが無くなってるといいんだが

82 :デフォルトの名無しさん:2009/05/30(土) 18:24:48
> 第一版と同じで鎧は syntax directed translation じゃなかろうか
それは盾だって>>75

> default を「省略時解釈」とか、そういうのが無くなってるといいんだが
往年の教科書では定番だったよねそういう訳

83 :デフォルトの名無しさん:2009/05/30(土) 19:28:33
最近の本は「既定の…」になるの?w

84 :デフォルトの名無しさん:2009/05/30(土) 21:09:37
ごめん、data flow analysis だな

85 :デフォルトの名無しさん:2009/06/06(土) 01:03:33
検索でここまで辿り着きました。
宜しくお願いします。

現在、オブジェクト指向のクラスの実装などが、
コンパイラでどのように実現されているのかに興味を持ち、勉強中です。

コンパイラの本も何冊か買い、簡単に目を通しましたが、
殆どが手続き型言語のコンパイラの解説で終わっており、資料の少なさに困っています。

自分で探した範囲で、オブジェクト指向型言語のクラスの実装等に触れられている本は、
『コンパイラの構成と最適化』(朝倉出版)しか見つけることが出来ませんでした。

『コンパイラ―原理・技法・ツール』の第2版版が最近出版されたようなので、
書店で立ち読みをして見ましたが、オブジェクト指向言語に関しては、
余り記述がされていないようです(短時間立ち読みをした程度なので、見落としてるだけなのかもしれませんが…)。

上で記述した以外に、オブジェクト指向言語の具体的な実装について書かれたコンパイラ等の書籍などがご存知の方がいらっしゃいましたら、本の題名等をご教示頂けると幸いです。

86 :デフォルトの名無しさん:2009/06/06(土) 01:21:19
なぜそんなにオブジェクト指向にこだわるのか理由がよく分からないな。
まあ、単純にオブジェクト指向を特徴としている言語の実装が知りたいなら、
ソースコードを入手して眺めるのが一番早いだろう。
RubyやPythonなんかでどうだ?

87 :デフォルトの名無しさん:2009/06/06(土) 01:24:05
>>85
gcc読んでここでその成果全部書けよ
そしたら教えてやるから

88 :デフォルトの名無しさん:2009/06/06(土) 01:40:21
>>85
"Rubyソースコード完全解説"

89 :デフォルトの名無しさん:2009/06/06(土) 01:43:11
『いまどきのプログラミング言語の作り方』に、ちょっとだけ載ってたかなあ

90 :デフォルトの名無しさん:2009/06/06(土) 03:16:32
>>86
OOPにこだわる切欠は、自分で作ったCのプログラムを逆アセンブルして、アセンブリ言語の勉強をしていた時、JavaなどのOOP言語では、どのようにソースコードがバイトコードなどに置き換えられ、クラス等がどの様に実装されているのかに興味を惹かれたためです。

PythonやRudyに関しては、恥ずかしながら名前しか知りませんでした。
ソースコードもダウンロードしてみました。
再度の質問になり恐縮ですが、これはコンパイラのソースコードではないかと考えていますが、その様な理解で良いのでしょうか?
どちらにせよ、自分の勉強不足は明らかなので御指摘を元に、勉強してみます。
アドバイスをありがとう御座います。

>>87
まだ勉強を始めたばかりで、恥ずかしながらgccについては、知りませんでした。
gccについて、これから勉強してみたいと思います。

>>88
検索して見つけることが出来ました。
Amazonで買おうかとも思いましたが、プレミアが付いているようで、とても高いですね。

Webで本文が見られるみたいなので、それを見させていただきます。

ご教示ありがとうございます。

>>89

Amazonでも今は取り扱っていないようですね。
評判の良い本のようなので、購入を検討してみます。

ありがとうございました

91 :デフォルトの名無しさん:2009/06/06(土) 03:31:26
>>90
RubyやPythonは、オブジェクト指向のスクリプト言語だ。
現代のスクリプト言語はいったんバイトコードにコンパイルされてから実行される形式が一般的で、
従ってコンパイラと呼びうるすべての要素がソースコード内に含まれている。

そしてそこから先(バイトコードをどのように動かすかの仮想マシンの実装)もあるわけだ。
いい教材になるわけで。

92 :90:2009/06/06(土) 10:21:50
>>91

そうなんですか。
その事については、知りませんでした。
コンパイラの動作をソースコードを読むことで確認出来るというのは、
私のように学習を目的としている者にはありがたい話です。

Rudyは書籍やWebでの資料が充実しているようなので、これから調べてみます。

ご教示、ありがとう御座いました。

93 :デフォルトの名無しさん:2009/06/06(土) 11:25:22
>>92
Rubyソースコード完全解説という神書籍があってだな、絶版だが、初版が無料公開されているのでオススメ

Rubyソースコード完全解説
http://i.loveruby.net/ja/rhg/book/

94 :デフォルトの名無しさん:2009/06/07(日) 19:53:04
>>90
参考までに、Javaのバイトコード仕様はSunのサイトで閲覧できる (英語)。
SunのJDKに付属しているjavapとかで逆アセンブルできるよ。
他にEclipse用のプラグイン「Bytecode Outline plugin for Eclipse」とかでも。
Eclipse用だと「Classfile Inspector」(有料 99Euro)ってのもあったけど、いまググったら
サイトが消滅したようだ。

95 :デフォルトの名無しさん:2009/06/08(月) 07:45:39
速攻MinCamlコンパイラ概説

ttp://min-caml.sourceforge.net/



96 :デフォルトの名無しさん:2009/06/08(月) 10:54:28
>>85
英語は読めますか?

97 :デフォルトの名無しさん:2009/06/08(月) 11:07:20
あんまり道を示しすぎてもパンクすると思うんだが。
85とは関係なしに紹介したいサイトがあるなら、俺が消化するから構わず続けてくれ。

98 :デフォルトの名無しさん:2009/06/08(月) 11:54:40
http://www.amazon.com/Advanced-Compiler-Design-Implementation-Muchnick/dp/1558603204/
http://www.amazon.com/Modern-Compiler-Design-D-Grune/dp/0471976970
この辺りの概説書にはOOの実装のこと"も"解説してる。
http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/
はOO関連のコンセプトの整理がうまい。実装についても書いてある。

全般的な概説書はやはり記述がプアになるので、C++に限れば一番詳しいのは、訳書の
http://www.amazon.co.jp/dp/4810181014
これだけど、今は絶版なので、
http://www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545
原書を読めばいい。
ARM(注解 C++リファレンスマニュアル)も詳しく説明している。これも絶版なので、
http://www.amazon.com/Annotated-C-Reference-Manual/dp/0201514591

Objectのslot accessでC++と全く異なるアプローチで有名なのが、
http://code.google.com/intl/ja-JP/apis/v8/design.html#prop_access
Selfの元の論文が、
http://research.sun.com/self/papers/implementation.html
にある。JITと相性がよい。

もちろんaccessが遅くていいなら他にも幾らでもやりかたはある。
Objective-Cなんかはhash引いている。


99 :デフォルトの名無しさん:2009/06/08(月) 13:07:35
普段はレキサ・パーサレベルの話しか出ないのに、堰を切ったようにいろいろ出てくるな
実はみんな、教えることに飢えてたのか?

100 :デフォルトの名無しさん:2009/06/08(月) 19:40:03
lexerかparserより先に進んだ質問者がなかなかいないからじゃないかな

101 :デフォルトの名無しさん:2009/06/08(月) 23:19:24
じゃあ俺がお前らの意見を聞いて
万人が理解できるlexerとparserの
サンプル書いてやる

ということでまず何をすればいいぉ?

102 :デフォルトの名無しさん:2009/06/09(火) 00:00:12
文法決めれ

103 :デフォルトの名無しさん:2009/06/09(火) 00:09:06
>>101
かっこに対応した四則演算とかどうだ

104 :デフォルトの名無しさん:2009/06/09(火) 19:58:23
四則演算はネット上にゴロゴロしてるからイラネ

105 :デフォルトの名無しさん:2009/06/09(火) 20:18:37
forループとif-else-endifの構文サンプル

106 :90:2009/06/09(火) 22:05:49
>>93

教えて頂いて、ありがとう御座います。
絶版の資料が無料で公開されているのは、ありがたいですね。

>>94

Javaのバイトコードにも、興味があります。
Java仮想マシン仕様は、日本語の書籍でも出版されているので、今度読むつもりでした。
仮想マシンの概念は、コンピュータのアーキテクチャとも密接に関わってくる事項なので、興味深いですね。

>>96

正直、英語はまともには読めません。
日本語の資料で勉強するのに限界を感じているので、
英語の勉強をやり直そうと思ってます。

>>98

今まで知らなかった資料が多いので、参考になります。
英語の資料が多いですね。
コンパイラの勉強の前に、英語をやり直して、
資料をまともに読めるようになってから、勉強をし直すべきかもしれません。


コンパイラの勉強は、思っていたよりもしんどそうですが、
今まで知らなかった資料を紹介していただいたので、今後の勉強の指針が見えた気がします。
教えていただいた資料を参考に、頑張ってみます。

107 :デフォルトの名無しさん:2009/06/09(火) 22:28:05
>>105
それだッッッ
ブロックの扱いがどうやればいいのか
悩みまくっている俺にはおいしいです ^q^
^


108 :デフォルトの名無しさん:2009/06/09(火) 22:57:09
>>101 lexer parser 何てどうとでもなるから
cps とか ssa あたりの内部表現の評価手法を,
最適化方法に合わせた一覧として提示してくれ


109 :デフォルトの名無しさん:2009/06/10(水) 00:05:45
>>108
どうとでもならない人のための相談室スレだと思うんだ。
だから、出来る人は我慢して、ここはレベルを下げて欲しいんだ。

110 :デフォルトの名無しさん:2009/06/10(水) 00:11:32
平行すりゃいいじゃん
誰か一人のためのスレってわけでもないんだし。

111 :デフォルトの名無しさん:2009/06/10(水) 00:32:56
>>108
オレは専門家じゃないのでCPSもSSAもどちらの用語も知らなかったが、
これってLLVMで全部実装されてるんじゃね?
やはりLLVMの包括的な解説記事が欲しいところだな。

112 :デフォルトの名無しさん:2009/06/10(水) 00:43:18
>>107
Pascalのone pass compiler読め。
http://homepages.cwi.nl/~steven/pascal/book/7statements.html

113 :デフォルトの名無しさん:2009/06/10(水) 01:19:43
>>111
LLVMは既に提出されているものをうまくつなぎ合わせてるだけ
つなぎ合わせ方法はいくらでもある
各要素項目を網羅的に解説したものがほしい

つか、現場にいるとそっち系をゆっくり、みてる暇がない


114 :デフォルトの名無しさん:2009/06/10(水) 01:43:17
>>113
実務者としては、実装されてない方法より
既に実装されているものの解説のほうが遥かに役に立つ。

>各要素項目を網羅的に解説したものがほしい
この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね?

115 :デフォルトの名無しさん:2009/06/10(水) 01:45:38
>>108
Tiger Bookや"Practical Improvements to the Construction
and Destruction of Static Single Assignment Form."は読んだの?

116 :デフォルトの名無しさん:2009/06/10(水) 01:48:23
>>114
> 実務者としては、実装されてない方法より
> 既に実装されているものの解説のほうが遥かに役に立つ。

ぶっちゃけここで質問している人が、
現実に使われているコンパイラのソースを参考にして、
自分のコードに反映させるのは難しいと思う。
そのくらいコンパイラは複雑化している。

さらに学習用のコンパイラは関数型言語で書かれているものが多く、
実務指向の人とは相容れないものがあるだろう。

謙虚な気持ちで学習するのが一番。

117 :デフォルトの名無しさん:2009/06/10(水) 02:21:44
>>114
> 実務者としては、実装されてない方法より
> 既に実装されているものの解説のほうが遥かに役に立つ。

要素手法が見えにくいんだよね。まとまってしまうと。
ましてや、cps とか ssa 使った状態での複合リダクションとなると。

> この分野に詳しくないので外野の意見だが、それなら洋書を漁って読めばいいんじゃね?
そりゃたくさん持ってるさ
ただ、現場をかかえてるとそっちばっかやってるわけに行かなくなるんだよな


>>116
> さらに学習用のコンパイラは関数型言語で書かれているものが多く、
> 実務指向の人とは相容れないものがあるだろう。

それは気にならないんだけど、細切れの論文掻き集めて整理やり直す時間はとれねぇよ


118 :デフォルトの名無しさん:2009/06/10(水) 11:16:43
実務指向でコンパイラを今時つくりたい、なんて人はいないと思う
スクリプトでDSLをさっくり組むならともかく

119 :デフォルトの名無しさん:2009/06/13(土) 19:19:12
>>90
http://www.amazon.co.jp/コンパイラとバーチャルマシン-Text-今城-哲二/dp/4274133087
↑この本に、オブジェクト指向も例外処理も分かりやすく載ってるよ。
薄くてすぐに読めるし、お薦め。
ただ、日本語で概要が載っているだけなので、
実装するには自分で知恵を絞らないとだけど。

現代的なコンパイラは、内部で何度も変換を繰り返して、
最終的に実行可能なコードをはく。
オブジェクト指向の場合は、最初の方で非オブジェクト指向の
Cみたいなコード (AST) に変換してしまうと、
後はよく書籍に載っているような方法が使えていいと思う。

コンパイラを全部 (シンタックスシュガーの除去から
アセンブラの出力まで) 自作するのは、大規模過ぎて現実的じゃない。
だから、自分が関心を持っている部分以外は
なるべく既存のものを利用するといいと思う。

例えばCのコードを書きだすコンパイラを書けば、
アセンブラごとにジェネレータを自分で書かなくても
多くの環境で動くし、最適化もCコンパイラに頼める。
例外処理などはCでは実装しにくいので、
必要ならLLVM IRを出力するという方法もあるよ。


120 :デフォルトの名無しさん:2009/06/13(土) 19:25:19
>>118
「実務」の中身によるんじゃないかな?


121 :119:2009/06/13(土) 19:32:59
以前、Javaバイトコードに変換するコンパイラも書いたことがあるけど、
Javaだと「.class」ファイルはクラス単位でオブジェクト指向になっていて、
オブジェクト指向「からの」変換はJVMが担当している。
だから、バイトコードの仕様を読んでも、あまり参考にはならないと思う。

同じ理由で、JVMをターゲットにした (「.class」ファイルを生成する)
コンパイラも皆、参考にならないと思う。


122 :デフォルトの名無しさん:2009/06/13(土) 20:10:29
リンゴの本見ればコンパイラなんて3日で書けるだろ

123 :デフォルトの名無しさん:2009/06/15(月) 10:39:22
>>121
最近はclassファイルを扱うためのライブラリがたくさんあるよ。


124 :デフォルトの名無しさん:2009/06/15(月) 11:15:34
>>121 が言ってるのは、Java のオブジェクト指向的な面
(動的バインディングとか)が実現されてるのは、Java VM自体
なので(invokevirtual命令とか)、オブジェクト指向言語を
ふつうのCPU上で実現するコンパイラの参考にはならん、と
いうこと。

125 :デフォルトの名無しさん:2009/06/16(火) 21:52:36
ドラゴンブック超える神本の出版が確定!

プログラミング言語を作る
プログラミング言語を作るなんて究極の楽しみだ!

126 :デフォルトの名無しさん:2009/06/17(水) 09:50:36
>>125
著者の「プログラミング言語を作る」のサイトはぐだぐだ進行な上に
今ブログをチェックしてみたら最新エントリがエロゲの話で
しかもトンデモ理論だったので失笑せざるを得なかった

立ち読みはしてみるつもりだけど、はずれじゃないかなぁ

127 :デフォルトの名無しさん:2009/06/17(水) 10:18:52
前橋さんが言語本出すのか。
まあ、変なものにはならないでしょ。

128 :デフォルトの名無しさん:2009/06/17(水) 18:57:40
>>125
作者乙

129 :デフォルトの名無しさん:2009/06/17(水) 20:24:01
>>128
あの人の作る言語は神レベルの美しさだぞ
お前こそ何言ってるんだw?

130 :デフォルトの名無しさん:2009/06/17(水) 20:26:33
>>129
どの人??

131 :デフォルトの名無しさん:2009/06/18(木) 08:43:47
>>125 >>129 は信者だろうな。

ポインタ本とか、Java謎本とか、結構悪くなかったと思うけど、今回もそういう
他に類例のないところを押さえる趣向かねぇ。

ドラゴンブックに代わる、なんてことはないないw

132 :デフォルトの名無しさん:2009/06/18(木) 09:01:10
>ドラゴンブックに代わる、なんてことはないないw
学術書と実用系趣味本を一緒にすること自体おかしいよね


133 :デフォルトの名無しさん:2009/06/18(木) 09:59:07
ドラゴンブック買ったけど、全然役に立たなかった。オナニー書籍
りんご本のほうがよほど役に立ったわ

というくらい

134 :デフォルトの名無しさん:2009/06/18(木) 10:21:41
>>133
具体的に書かれてないと、単に難しいことが理解できなかった可哀想な趣味グラマにしか見えないな

135 :デフォルトの名無しさん:2009/06/18(木) 10:50:14
ドラゴンブック喧嘩せず

136 :デフォルトの名無しさん:2009/06/18(木) 12:07:40
ドラゴンブックは、
字句解析、構文解析はツールを使うから詳しくなる気はないし、
構文解析向けの言語理論にも興味ないって人にはまったく不向き。
構文解析ツール作ってみたいなって人、
計算機科学科の学生には今でもいい本の一つ。

137 :デフォルトの名無しさん:2009/06/18(木) 14:08:10
そこから先のバックエンドについても、高度な話の基本になるところを
押さえてあるからね。

138 :デフォルトの名無しさん:2009/06/18(木) 16:24:11
>>136
「内容に興味のない人には不向き」っていうことですねわかります

139 :デフォルトの名無しさん:2009/06/18(木) 16:44:12
>>138
当たり前の事ではないか


140 :デフォルトの名無しさん:2009/06/18(木) 17:41:11
特定書籍の信者って面白いね。
反撃が全部「ぼくは君をこういうキャラに設定したぞ。どうだ悔しいだろう」だし。

141 :デフォルトの名無しさん:2009/06/18(木) 17:45:52
>>140
具体的に書かれてないと、単に難しいことが理解できなかった可哀想な趣味グラマにしか見えないな

142 :デフォルトの名無しさん:2009/06/18(木) 20:23:54
>>140
構文が曖昧です。君からキャラへの変換は明示的なキャストが必要です。

143 :デフォルトの名無しさん:2009/06/18(木) 22:43:48
coinsの利用についてはどうよ?

COINSコンパイラ・インフラストラクチャ
ttp://www.coins-project.org/

144 :デフォルトの名無しさん:2009/06/18(木) 22:52:47
coinsは最凶最悪

145 :デフォルトの名無しさん:2009/06/19(金) 00:01:52
>>139
いやだから、内容に興味があるのは”前提”として、
その人たちにとって良い本かを議論しないと意味ないじゃんという話
まぁ全体的にいい本っていう論調だし俺も同意するが

146 :デフォルトの名無しさん:2009/06/19(金) 00:06:19
まずドラゴンブック読めない奴はゴミ
これ世界の常識あるね



147 :デフォルトの名無しさん:2009/06/19(金) 06:51:19
このスレで勧められ板から、ドラゴンブックせっかく奮発して買ったのに、
いきなりしょっぱなからはじめから変な数式ばっかでいやになった…。

論文とかたまに見るけど、どうして人にわかるように書かないんだろうか?
大学行ってたら、小学生でもわかるように、って習わなかったんだろうか?

148 :デフォルトの名無しさん:2009/06/19(金) 07:24:21
小学生でもわかるように書くと厚さと著作にかかる時間とが値段が10倍になりますがよろしいか。

149 :デフォルトの名無しさん:2009/06/19(金) 07:26:33
>>147
え?あの程度の数式読めないの?
何それこわい

150 :デフォルトの名無しさん:2009/06/19(金) 07:28:12
10倍じゃ全然きかないか

151 :デフォルトの名無しさん:2009/06/19(金) 07:36:55
>>147
貴様は人間の屑だ

152 :デフォルトの名無しさん:2009/06/19(金) 08:23:43
>>147
ただ単に読むのが早すぎただけでしょ。積読して、適正になったらまた読む

153 :デフォルトの名無しさん:2009/06/19(金) 10:09:04
小学生でもわかるように、ってのは 無 理 。

大学の教科書で、小学生でもわかるように書いてあるものなど皆無です。

高校生で奮発して読もうと思っているなら、学校の先生にでも相談しなさい。
多分集合の記号とか論理式とかでつまづいてるんじゃないかと思うんだけど。

154 :デフォルトの名無しさん:2009/06/19(金) 23:36:05
先に簡単なの何冊か読めばいいのに

155 :デフォルトの名無しさん:2009/06/20(土) 00:00:30
ドラゴンブックが一番簡単
これも読めないゆとりは来るな


156 :デフォルトの名無しさん:2009/06/20(土) 00:07:00
ドラゴンブック読まなくてもコンパイラ作れるけどね

157 :デフォルトの名無しさん:2009/06/20(土) 00:13:25
読まないと読めないは違う

158 :デフォルトの名無しさん:2009/06/23(火) 16:33:02
数年前、文系の見方で書いたとかいうコンパイラの本ってあったよね
日本のコンパイラの第一人者が監修になってたから、わりと買った人多い?
たとえ話がぜんぜん例えになってなくて大混乱
巻末のJavaで書いたコンパイラのプログラムはほとんどCからの丸写しみたいなつくりだった。

159 :デフォルトの名無しさん:2009/06/23(火) 16:38:45
上のほうですでに出てたかw

160 :デフォルトの名無しさん:2009/06/23(火) 17:15:05
むしろ、ドラゴンブックは、それさえ読めれば、相当なコンパイラが書ける本だろ。
確かLSI-Cの作者がそう言ってたと中村正三郎か誰かが書いていた記憶がある。

161 :デフォルトの名無しさん:2009/06/23(火) 17:27:01
コンパイラを書けるくらいの人なら読める

162 :デフォルトの名無しさん:2009/06/23(火) 17:45:10
>>160
「ドラゴンブックを読めば誰でもLSI-Cぐらいのコンパイラは書ける」だなw

163 :デフォルトの名無しさん:2009/06/23(火) 19:39:56
LSI-Cのひとはyacc互換のコンパイラコンパイラも作っていましたよね。
「ドラゴンブック読めば誰でもコンパイラコンパイラは書ける」なの?

164 :デフォルトの名無しさん:2009/06/23(火) 19:57:12
スクリプトエンジンプログラミング 買ってきた。半分くらい読んだとこ。

なんか書いてみたいなレベルの自分にとっては、ぴったりのイメージ
なんだが、この本あんまり話題に上らないね・・・

C++出来ない自分にゃ読み替えるのが大変w

javaVM向けの中間言語を吐くやつのサンプルとかがあると、最高
だったんだけど。

165 :デフォルトの名無しさん:2009/06/23(火) 20:40:34
>>162
LSI-Cは1980年代始めから中頃までが全盛期だと思うが、
当時最高の最適化を行なう最強コンパイラですよ。
作者はデータフロー解析、レジスタカラーリングは、
原論文をバリバリ読んでいた人だと思う。
かなりの腕前の人。

166 :デフォルトの名無しさん:2009/06/23(火) 21:33:02
>>165
いやいや、>>162は作者がそう言ったので
中村正三郎か誰かがしょんぼり、という話w

167 :デフォルトの名無しさん:2009/06/23(火) 22:14:46
>>164
ちょっと薄い本だけど、日立の人が書いた、Javaのバイトコード
を吐くコンパイラがサンプルで載ってる本あったね。

って調べたらあった↓
http://www.amazon.co.jp/dp/4274133087/

168 :デフォルトの名無しさん:2009/06/23(火) 23:13:16
>>167
著者の最初に名前上がってる人、コボラーだね。

169 :デフォルトの名無しさん:2009/06/23(火) 23:15:27
まじかよw
興味あったけど買うのよしたw

170 :デフォルトの名無しさん:2009/06/23(火) 23:19:24
作者じゃないが。最近発売された「プログラミング言語を作る 」がインタープリタ
もバイトコードコンパイラのソースも載ってるぞ。買って読んでないから内容は
知らんが。

171 :デフォルトの名無しさん:2009/06/23(火) 23:20:09
MiniCamlで良いじゃん。

172 :デフォルトの名無しさん:2009/06/24(水) 00:34:54
スレ住人に聞くけどJIT関係の最適化に関するプロファイリングネタはここでいいのかな?


173 :デフォルトの名無しさん:2009/06/24(水) 04:30:55
さっきJavaで書かれた独自形式の中間言語を出力する
コンパイラが欲しいと書いてる人がいたが、
よくよく考えてみると、.NETやJavaなどのそれ自体が
中間言語でかかれててJITコンパイラまで付いてる環境では、
下手に独自で作るよりもその環境の中間言語を出力してしまう、
要するにコンパイラそのものを作ってしまったほうが簡単なんだよな。
中間言語の書式や(基本的に)仮想マシンの仕様を考えなくて済む。

だからJavaにおけるGroovy、.NETにおけるIronPythonなど、
中身はインタプリタというよりもコンパイラそのものだ。

174 :デフォルトの名無しさん:2009/06/24(水) 05:51:31
そこでLLVMやCOINSが出てくるわけだ。

175 :デフォルトの名無しさん:2009/06/24(水) 07:32:42
プログラミング言語を作るは神本
ドラゴンブック不要といわれる理由がよくわかる
読んでみろ

176 :デフォルトの名無しさん:2009/06/24(水) 07:41:40
はい。

177 :デフォルトの名無しさん:2009/06/24(水) 08:03:25
はいじゃないが。

178 :デフォルトの名無しさん:2009/06/24(水) 10:29:52
>>170,175
信者か作者かしらんがいい加減うざい

179 :デフォルトの名無しさん:2009/06/24(水) 11:43:34
そう思わせるのが目的のアンチかもよ

180 :デフォルトの名無しさん:2009/06/24(水) 22:29:32
プログラミング言語を作る
買って読んでみたぞ

普通の本だろこれ
金返せよ

181 :デフォルトの名無しさん:2009/06/24(水) 22:40:43
え?俺の本からは神様が出てきたぞ?正に神本だと思ったw

182 :デフォルトの名無しさん:2009/06/24(水) 23:16:58
>>181
作者乙

183 :デフォルトの名無しさん:2009/06/24(水) 23:20:30
間違えた、紙だったw

>>182
偽エスパー乙

184 :デフォルトの名無しさん:2009/06/24(水) 23:25:07
無理に面白いこと言おうとしなくてもいいよ

185 :デフォルトの名無しさん:2009/06/25(木) 07:31:29
ドラゴンブック持ってないのに
コンパイラの本書いてるやついるけど
あいつは何なの?


186 :デフォルトの名無しさん:2009/06/25(木) 07:35:37
分かりません。

187 :デフォルトの名無しさん:2009/06/25(木) 14:13:43
>>169
いや、コボラーはコボラーでもIBMの奴隷って意味のコボラーじゃないからw

188 :デフォルトの名無しさん:2009/06/27(土) 23:40:48
>>160
確か、LSI-Cの作者がそれしか読んでないとかいってただけだと思う。
万人に当てはまるわけではない と


189 :デフォルトの名無しさん:2009/06/28(日) 00:30:24
大昔の話じゃいろいろ説明をつけないと通じないんだなあ……
というかその大昔の時点で意味わかってなかったのか?

LSI-Cの最適化は凄いとよく言われたが
詰めが甘くて実際には骨折り損だという話もあったよ
コンパイル時間はMS-Cの倍だったしね

190 :デフォルトの名無しさん:2009/06/28(日) 01:40:22
>>189
8080版の最適化の話だろすごかったの


191 :デフォルトの名無しさん:2009/06/28(日) 07:18:31
LSI-C(笑)

192 :デフォルトの名無しさん:2009/06/28(日) 07:19:14
4004(笑)

193 :デフォルトの名無しさん:2009/06/28(日) 09:20:58
>>189
知りもしないことをよくもまあ

194 :デフォルトの名無しさん:2009/06/28(日) 11:56:45
知ってる人だけ。。。
MSX-Cは変数が自動でレジスタに割り当てられるんだけど、
そうなるとポインタを介したアクセスと一貫性がなくなる。


195 :デフォルトの名無しさん:2009/06/28(日) 12:01:02
MSX-C = LSI-C

196 :デフォルトの名無しさん:2009/06/28(日) 21:23:22
>>194
変数のポインタを取り出せばメモリ上に確保しなおしてたよ
それともループ内に持ち込んだ変数を割り込み処理で外部から変更した時に関与が出ないって意味で言ってる?

197 :デフォルトの名無しさん:2009/06/28(日) 21:59:34
#include <stdio.h>
#pragma nonrec

main()
{
    int n;
    int *p;

    p = &n;
    n = 10;
    *p = 100;
    printf("n = %d\n", n);
}


MSX-C のマニュアルに載ってたサンプル。
これで「n = 10」と表示されるそうな。

198 :デフォルトの名無しさん:2009/06/28(日) 23:10:50
なんじゃこりゃ。
これが仕様なの?

199 :デフォルトの名無しさん:2009/06/28(日) 23:30:24
往年の8ビットマイコン用Cコンパイラの#pragmaか
コード書く人もコンパイラの振る舞いにあわせて組んでたんだね

200 :デフォルトの名無しさん:2009/06/28(日) 23:40:43
逆だろ。
pragmaはコンパイルの動作を指定するためにある。


201 :デフォルトの名無しさん:2009/06/29(月) 00:14:16
MSX-CでC言語を勉強したんだけど、これによくはまった。
レジスタに割り当てないこともできるけど。
#pragma nonrecはローカル変数をstaticがついているかのようにする。
non-recursiveの略。CPUの制限でスタック上の変数にアクセスするのが
遅いからです。コードの再利用のことを考えてのことだと思う。
あとMSX-Cはlongと浮動小数点数がないんです。
#ifもない。if文で代用とマニュアルにありました。実行されないコードは
生成されない。
なにかの役に立つかな?

202 :デフォルトの名無しさん:2009/06/29(月) 00:17:14
#pragma有効で組むか
さもなくば死か
この時代にCを開発用途に使えたという時点である意味幸運だったとも言える

203 :デフォルトの名無しさん:2009/06/29(月) 12:13:13
8080でのスタックフレームってめんどくさいよな

204 :デフォルトの名無しさん:2009/06/29(月) 23:59:31
高級言語を意識して設計されてないから仕方ない
Z80だとIX/IYで強引にやるのか?汎用/裏レジスタで最適化とかしてたら凄いが

205 :デフォルトの名無しさん:2009/06/30(火) 00:51:28
IX/IYは人間向きのレジスタで、
便利ではあるけど遅いからコンパイラは使わない。
(HD64180あたりになると結構速かったが)
LSI-C(MSX-C)はもちろん裏レジスタ使いまくり。


206 :デフォルトの名無しさん:2009/06/30(火) 22:30:31
むかし見たLSI-C80の広告ではIXかIYをフレームポインタに使っていた
コードが掲載されていた。
MSX-Cは裏レジスタ,IX,IYを使うコードは生成しなかったと思う。
付属のライブラリでは使っているかもしれませんが。
スタック上のローカル変数アクセスの方法はどうだったか記憶にありません。
MSX-Cのアセンブリ言語出力をZ80に最適化するプログラムを書いた人もいるようです。
僕も出力を見ていたときすこし考えたことありました。
アセンブリ言語レベルで8080から8086に変換するプログラムの存在を古い本で読んだのも思い出しました。

207 :デフォルトの名無しさん:2009/06/30(火) 23:41:00
コンパイラが将来性のない
回顧主義者おっさんのたまり場であることがよくわかる

だから日本は研究でも実業でもこの分野でチョン以下になる。


208 :デフォルトの名無しさん:2009/06/30(火) 23:51:29
>>207
そんな愚にも付かないことを言ってるヒマがあったら、
LLVM向けに何かメジャーな言語を移植するのだ。

209 :デフォルトの名無しさん:2009/07/01(水) 00:01:25
LLVMは糞だろ

210 :デフォルトの名無しさん:2009/07/01(水) 00:22:10
>>209
どこがどう糞なの?

211 :デフォルトの名無しさん:2009/07/01(水) 23:55:53
>>210
Milepost GCCがあるから不要
自分でコードをチューニングするという古臭い時代は終わったの
自動的に学習して最適なコードを出力してくれるからLLVM自体不要なの

212 :デフォルトの名無しさん:2009/07/02(木) 00:01:16
幼稚園児かw


213 :デフォルトの名無しさん:2009/07/02(木) 00:15:27
>>211
というか、同じようなアイデアのllvm-gccのほうが有名なわけだが?

214 :デフォルトの名無しさん:2009/07/02(木) 00:20:21
>>211
完全自動化だし、今年後半のコンパイラ関係の
賞総なめにするって言われてるけどねぇ
EUレベルの国家プロジェクトと田舎大学の糞プロジェクト
比較されてもねぇ


215 :デフォルトの名無しさん:2009/07/02(木) 00:23:40
幼稚園児だな

216 :デフォルトの名無しさん:2009/07/03(金) 07:15:50
ヒント:実績

217 :デフォルトの名無しさん:2009/07/03(金) 17:26:47
Milepost GCCのICIな人たちが次はLLVMでやってみるって言ってんですがねえ…

218 :デフォルトの名無しさん:2009/07/03(金) 18:29:02
基地外は相手にするなよ

219 :デフォルトの名無しさん:2009/07/03(金) 21:43:00
>>217
妄想乙

220 :デフォルトの名無しさん:2009/07/04(土) 00:33:17
>>219
君がろくに論文も読んでないのが良く分かりました。

221 :デフォルトの名無しさん:2009/07/05(日) 14:42:00
このスレふつうのコンパイラをつくろうを
宣伝したやつフルボッコにするからな


222 :デフォルトの名無しさん:2009/07/05(日) 15:27:47
まず>>221が・・・

223 :デフォルトの名無しさん:2009/07/05(日) 15:45:49
>>221
>>221
>>221

224 :デフォルトの名無しさん:2009/07/05(日) 15:59:24
>>221
>>221
>>221
>>221
>>221
>>221

225 :デフォルトの名無しさん:2009/07/05(日) 19:14:05
著者の関係者なのか?

226 :デフォルトの名無しさん:2009/07/05(日) 22:26:25
8080でLLVM実装まだ?

227 :デフォルトの名無しさん:2009/07/06(月) 17:28:44
ゼッパチでよければ

228 :デフォルトの名無しさん:2009/07/07(火) 16:05:46
x86用のコードを吐くCコンパイラの、64bit整数(long long)まわりを読んでいます。

addl $1,%eax
adcl $0,%eax

みたいな簡単なものは理解できたのですが、シフト演算や乗算・除算になると
追い方が悪いのか理解力が弱いのかさえ分からなくなってきました。
この手のことを解説したサイトって無いのでしょうか。

229 :デフォルトの名無しさん:2009/07/07(火) 17:55:56
>>228
たぶん自分で調べたほうが早い。

最適化をかけないデバッグビルドで、
演算させるたびに何か関数(printf)でも呼び出す形にするといいよ。

230 :デフォルトの名無しさん:2009/07/07(火) 18:16:51
デバッガ知らないの?gdb?

231 :デフォルトの名無しさん:2009/07/07(火) 18:21:05
前提知識であるx86のアセンブリの知識はあるの?

232 :デフォルトの名無しさん:2009/07/08(水) 01:09:36
$(GCC)/gcc/longlong.h
まじお勧め

233 :デフォルトの名無しさん:2009/07/08(水) 06:52:57
>>229
そうですか。急がば回れってことなんでしょうか。
おれ、このリーディングが終わったらまとめ書くんだ。

>>230
acid
使い方が分からないので、スタックトレースにしか使ってません。

>>231
数年前に、はじめて読む8086を流し読みした程度の知識です。
分からない命令はインテルのpdf引きながら読んでいます。

>>232
http://www.opensource.apple.com/source/gcc/gcc-937.2/gcc/longlong.h
mullを1回で、(long)*(long)はできるのですね。おもしろい。

234 :デフォルトの名無しさん:2009/07/08(水) 09:10:38
>>230
gcc使う人はたいていデバッガ使わないでしょ。
デバッガに頼り切ってるのはVS厨が多い。

235 :デフォルトの名無しさん:2009/07/08(水) 09:36:37
> gcc使う人はたいていデバッガ使わないでしょ。
そういう人って
デバッグがデバッガに頼り切りではないという面もあるにしろ
デバッガを使いこなせてないという面もあるんじゃないかな。

236 :デフォルトの名無しさん:2009/07/08(水) 09:59:40
>>234
それは偏見。
組み込みLinux開発ではgdbくらい使いこなせないとお話になりません。

237 :デフォルトの名無しさん:2009/07/08(水) 17:28:59
>>236
それは偏見。
組み込みLinux開発ではgdb使ってるようではお話になりません。

238 :デフォルトの名無しさん:2009/07/08(水) 17:31:41
gdbは使いこなせるけど使ってないケースもあるわけで

239 :デフォルトの名無しさん:2009/07/08(水) 17:35:33
printfの方が高機能なわけで

240 :デフォルトの名無しさん:2009/07/08(水) 17:56:46
Caper良さそうなのですが字句解析(Lexar)には
何を使うのがいいでしょうか?
おすすめを教えてください。


241 :デフォルトの名無しさん:2009/07/08(水) 18:34:20
Caper良さそうなのですが字句解析(Lexar)には
何を使うのがいいでしょうか?
おすすめを教えてください。


242 :デフォルトの名無しさん:2009/07/08(水) 18:53:24
手書きでOK

243 :デフォルトの名無しさん:2009/07/08(水) 19:48:27
手書きでいいと思う
文字列→数値のパースみたいなランタイムの処理に流用しやすいし

244 :デフォルトの名無しさん:2009/07/08(水) 23:21:38
本気で速度気にするならflex出力を手修正とかがいいんじゃないか

245 :デフォルトの名無しさん:2009/07/09(木) 01:22:53
アセンブリから機械語にどうやって変換しているんですか?

246 :デフォルトの名無しさん:2009/07/09(木) 01:54:23
まずOPコードを暗記するんだ
相対アドレスも数をこなせば暗算できるようになる

247 :デフォルトの名無しさん:2009/07/09(木) 09:40:02
>>245
アセンブラを使う。
gccに-vオプションつけてみな。

248 :デフォルトの名無しさん:2009/07/09(木) 09:50:38
>>241
Caperはgcc+Perlで開発されているので字句解析にはPerlを使うと馴染みやすい。
Linuxには必要なものがすべて揃っている。

249 :デフォルトの名無しさん:2009/07/09(木) 10:10:50
>>247
あなたの作っているコンパイラに対してアセンブラは自前ですか?

250 :デフォルトの名無しさん:2009/07/09(木) 10:16:58
母国語でおk

251 :デフォルトの名無しさん:2009/07/09(木) 16:11:15
アセンブラどころかリンカもローダも自作したが
最初は使えるものを使って、徐々に置き換えていけばいいんじゃない

252 :デフォルトの名無しさん:2009/07/21(火) 23:01:50
Richard Bornatのコンパイラの本でお勧めですか?

253 :デフォルトの名無しさん:2009/07/21(火) 23:26:02
日本語でおk

254 :デフォルトの名無しさん:2009/07/24(金) 21:58:11
やさしいコンパイラ(デコイ本)はやめたほうがいい
ふつうの方は神本確定の出来だった


255 :デフォルトの名無しさん:2009/07/25(土) 00:56:59
やさしいコンパイラ貶して
ふつうの方宣伝してる人は
まったく具体的な指摘がないんだよな

256 :デフォルトの名無しさん:2009/07/25(土) 01:09:34
と、ここぞとばかりに架空の傾向を持ち出すわけですね。

257 :デフォルトの名無しさん:2009/07/25(土) 09:32:51
ふつうのコンパイラ良書なんでしょうか
学生なのでちょっと資金余裕がなくて

258 :デフォルトの名無しさん:2009/07/25(土) 09:38:48
研究室で買ってもらえばいい。あるいは図書館。

259 :デフォルトの名無しさん:2009/07/26(日) 02:01:07
mingw-jpの使い方まったくわからないので
どなたか教えてもらいたいのですが

260 :デフォルトの名無しさん:2009/07/26(日) 17:17:33
言語ワークベンチは究極的には完全にプログラミング方法を変えるかもしれない
http://www.infoq.com/jp/news/2009/05/Language-Workbench

261 :デフォルトの名無しさん:2009/07/26(日) 17:40:02
>>260 なんかスタイルシートが効いてなくて生々しいレイアウトになってない?

262 :デフォルトの名無しさん:2009/07/26(日) 17:57:19
>>261
今見たが、特に問題ないぞ。

263 :デフォルトの名無しさん:2009/07/27(月) 11:25:26
>>261
うちの環境だとこうなってる
IE6 ちゃんと出る
FireFox スタイルシートが効かない
Google Chrome スタイルシートが効かない上に画像も表示されない

264 :263:2009/07/27(月) 11:30:13
今見たら直ってました。

265 :261:2009/07/27(月) 12:19:46
うーん。うちのFirefoxだと変わらずだな。
エラーコンソールになんか出てるけど、それが原因を示してるのかわからん...

266 :デフォルトの名無しさん:2009/07/27(月) 13:05:55
>>265
リロードしたらOKになったよ、うちのFX

267 :デフォルトの名無しさん:2009/07/27(月) 14:00:29
うちもFirefoxだと一度目はスタイルシート読み込まれないな
まぁスレには関係ない話題だが

268 :デフォルトの名無しさん:2009/07/28(火) 14:39:17
>>260
どっちかというと設計よりの話だね。


269 :デフォルトの名無しさん:2009/08/01(土) 04:41:50
.NET周りで使えるもの、という条件だが。
・Lexical analyzer and parser generator

単純だがよくできている。構文木を食わせてソースコードを吐かせるBison式。
最初これで作りかけていたが、パーサーを構築できてもそのパーサーが予定の挙動をしない場合、デバッグの方法が困難。
(テーブルに分解されてしまうため、ソースが追いかけられない)
パーサーの動作は高速と思われる。

・Irony
パース、構文木構築までをやってくれるコンパイラを動的に構築してくれる。
簡単なGUIのパーサーチェッカーが付いていて、開発がかなり楽
(すごい楽かはもっと楽なものがあるのかどうか知らないので……)
動的に構築する分lapgより遅いかもしれないが、とりあえず自分の目的にはこれで十分なので。

ただ、コンパイル済みコードを吐かすために自分用の構文木を
もう一度作り直す羽目になるのは激しくビミョー……。
(別にそのまま構文木を消化していったっていいわけだが。
 まあ少なくともテキスト形式で出力するにはあの構文木のオブジェクト構造は向いてないな)

270 :デフォルトの名無しさん:2009/08/01(土) 04:55:36
修正と補足。
「構文木を食わせて〜」は、「BNF定義を食わせて〜」が正しい。
lapgもIronyもどちらもEBNFではなくBNF式。(Wikipediaで調べた限りでは)
ただしどちらもパースに正規表現が使える。

lapgは非Ascii文字の正規表現パースがどうも挙動が怪しい……。
Ironyはホワイトスペースの除去以外にも非構文要素を取り除けるチャンスがあるので小回りが効くようだ。
(といったところも気に入っている)

271 :デフォルトの名無しさん:2009/08/01(土) 13:51:44
JetBrains Meta Programming System
これが最強他は全て旧世代の糞技術

272 :デフォルトの名無しさん:2009/08/01(土) 14:25:38
>>271
どんなものか説明してみれ

273 :デフォルトの名無しさん:2009/08/01(土) 14:32:14
.NET向けの旧来のスタイルのものとしてはGPPG/GPLEXが定番
GPPGはIronRubyにも使われてる

274 :デフォルトの名無しさん:2009/08/01(土) 15:05:06
ドラゴンブック買ってきたぞ!さあ読むぞ!

275 :デフォルトの名無しさん:2009/08/01(土) 16:48:45
>>273
なるほど……。
現在はMPPG/MPLEXと名前が変わってるようだけどね。

どうせいずれVisual Studioの胸を借りる(SDKを使ってオレ様IDEを作る)予定なので、
はじめからこちらで構文解析を実装しておいた方が
構文の強調、InteliSenceなどで使い回しが利くかもしれない。

結構進んでてあとはエラー周りくらいだったんだが、破棄してしまうかなぁ……。

276 :デフォルトの名無しさん:2009/08/01(土) 16:55:06
MPPG/MPLEXはまた別物だよ(MSがVisual Studio SDK用にカスタマイズしたもの?)
本家はttp://plas.fit.qut.edu.au/gppg/Default.aspxで開発継続中でドキュメントも充実してる

277 :デフォルトの名無しさん:2009/08/01(土) 17:30:29
>>276
HPみてみたら、GPPG is closely related to the “Managed Package Parser Generator” application
って書いてるね。

今仕様を決めているスクリプトは文法がPythonに似ているので
IronPythonがどうなってるか調べてみたら、こっちはパーサーを自前で書いてる……?
(ソースコード中に直接コメントでBNFが書いてある)

278 :デフォルトの名無しさん:2009/08/01(土) 17:42:08
ともあれ、BNF定義の中に直接コード片が埋め込めるGPPG/MPPGの仕様は興味深いね。
ただそれだけに、PDFドキュメントだけじゃなくて実際に動くサンプルプロジェクトが欲しいところだなぁ。
どっかにお手ごろなのが落ちてないかな。

279 :デフォルトの名無しさん:2009/08/01(土) 18:06:36
>>276のサイトにあるパッケージには電卓のサンプルが付いてる。
言語なら
ttp://www.iunknown.com/2007/11/lolcode-on-dlr.html
これなんか手ごろで面白い。あとは大規模だけどIronSchemeやIronRubyくらいかな。

280 :デフォルトの名無しさん:2009/08/01(土) 18:20:30
>>278
> ともあれ、BNF定義の中に直接コード片が埋め込めるGPPG/MPPGの仕様は興味深いね。

>>276のサイトも見ないで聞くがyaccなんかのアクションとは違うもの?

281 :デフォルトの名無しさん:2009/08/01(土) 18:41:28
同じです
言語定義が処理系を実装する言語に依存しないというのは,むしろ流行りの売り文句です

282 :デフォルトの名無しさん:2009/08/01(土) 18:47:36
>>281
> 同じです

じゃあ>>278は何が興味深いんだろうか?

> 言語定義が処理系を実装する言語に依存しないというのは,むしろ流行りの売り文句です

JavaでいうとSableCC的なやつかな
JavaCC+JJTree、ANTLRでもできるが

283 :デフォルトの名無しさん:2009/08/01(土) 19:06:25
> GPGP is a generator for LALR(1) parsers. It accepts a
> “YACC/BISON-like” input specification and produces a C# output
> file. The parsers that it produces are thread-safe, with all parser
> state held within the parser instance.

プログラミング言語非依存でもないよ。

284 :デフォルトの名無しさん:2009/08/01(土) 19:09:44
>>280,281
278だが、その点で言えば、269で挙げたLexical analyzer and parser generatorはC++/Java/C#形式で吐き出せるよ。
だがこちらとしては、実装言語の非依存性などどうでもよい。
パーサーを実装しやすい仕様になっていればそれでいいわけ。

実装しやすさという観点で言えば、BNF式ごとにコードが埋め込めるGPPGは小回りが利きそうだし、
コンパイラやエラー処理があらかじめ一通り実装された状態で使えるIronyよさげ、というわけで。

285 :デフォルトの名無しさん:2009/08/01(土) 19:14:10
>>284
話の流れが見えてなくてすまないが、要は昔ながらのコンパイラ・コンパイラが
欲しくてGPPGがそうだってだけ?
仕様が興味深いというから何か目新しいネタがあるのかと期待しちゃったんだが

286 :デフォルトの名無しさん:2009/08/01(土) 19:16:39
ANTLRみたいなのって,C#にも対応してるよと謳ってるのが多いけど
ランタイムの実装が糞すぎて使い物にならないのが多いんだよね

287 :デフォルトの名無しさん:2009/08/01(土) 19:28:14
>>286
学者風情が作った糞ライブラリに
期待するなよw自作しろ

288 :デフォルトの名無しさん:2009/08/01(土) 19:37:36
>>284>>286>>287
ノイズレスはやめてくれ

289 :デフォルトの名無しさん:2009/08/01(土) 19:47:26
>>285
他のやつらとこのスレの趣旨的にはどうか分からないが、
オレとしては自分で仕様を決めたスクリプトを他の形式にコンパイルするのに
必要十分な環境をそろえられればいい。

GPPG(MPPG)はスレの流れからするとyaccに仕様が近いようだが、(いわゆる昔ながらのコンパイラ・コンパイラ)
別にそれにこだわりはない。
むしろIronyによる作りやすさを評価してるくらいだ。
ともあれ、構文木を作った後が大変なんだがな……。

290 :デフォルトの名無しさん:2009/08/01(土) 21:50:56
確かに、はじめてyaccを知ったときは大変興味深かった。

>289はGPPG?で今その感動を味わっているわけだ。

291 :デフォルトの名無しさん:2009/08/01(土) 21:55:08
>>289
あんなバグフィックスも含めて、
ちゃんとメインテナンスされてるどうかわからんツールよく使えるな。
近況はブログにでも書いてて欲しい。

292 :デフォルトの名無しさん:2009/08/01(土) 22:02:23
>>291
リリース版しか見てないだろ。
Subversionのリポジトリみたら今月に至るまでコミットされつづけてるぞ。
というか、作者に連絡して修正パッチを投げてさっき返事が来たところだ。

codeplexにおけるプロジェクトratingsも★5つだし、どこが気に入らないのか知らないが、
まあオレが使いこなせれば済むことだからいいや。

293 :デフォルトの名無しさん:2009/08/01(土) 22:27:30
yaccを知らずに僕らは生まれた〜
lexを知らずに僕らは育った〜

294 :デフォルトの名無しさん:2009/08/02(日) 10:06:57
PEG世代の歌か?

295 :デフォルトの名無しさん:2009/08/03(月) 00:01:46
夏休みなんで
C++でPEGかpackratのパーサ作ってみたいのですが
何を参考に作るのが面白いでしょうか?

296 :デフォルトの名無しさん:2009/08/03(月) 00:13:52
ポリエチレングリコール?
いやいや・・

297 :デフォルトの名無しさん:2009/08/03(月) 00:23:12
>>295
PEGは新しい概念で古い言語向けにはあまり実装されて無いんじゃね?
Haskell、Pythonあたりを使うことをお勧めする。

298 :デフォルトの名無しさん:2009/08/03(月) 11:42:07
ttp://pdos.csail.mit.edu/~baford/packrat/
Packrat の総本山に、C++ 実装へのリンクがいくつかあるよね。

299 :デフォルトの名無しさん:2009/08/03(月) 12:00:32
PEGって使いやすいの?
CFGに比べた利点・欠点とか
こういうのが書きやすいとか書きづらいとかありますか。

300 :デフォルトの名無しさん:2009/08/03(月) 12:29:13
原理的には、バックトラックのあるトップダウンパーザの受け入れる文法そのもの
なので、CFGに比べて、原理を理解してしまえば直感的。

利点とも欠点ともとれるけど、レキシカルアナライザと統合される。

ナイーブな(メモ化なし)実装だと、指数的に時間がかかり、かつ無駄が多い。

301 :デフォルトの名無しさん:2009/08/03(月) 12:41:16
C#の処理系ってことでIronMetaを眺めてみたが、こりゃあ異次元行ってるな。
ぱっと見ただけじゃさっぱりわからんぞ……。

302 :デフォルトの名無しさん:2009/08/03(月) 12:56:06
? これ別にC#をパースしてるわけじゃないと思うよ
yaccみたいにテキスト的に処理してるだけだろ

303 :デフォルトの名無しさん:2009/08/03(月) 12:58:29
>>302
まあそうなんだけど、C#自体の文法と似通っていて、
どこまでがC#の文法なのかが非常にわかりにくい。

どう見ても構文の宣言とラムダ式の定義が混じって見える。

304 :デフォルトの名無しさん:2009/08/04(火) 01:55:34
>>303
そもそもそういう人が処理系なんて書けるの?


305 :デフォルトの名無しさん:2009/08/04(火) 07:32:04
>>304
んんー、昨日いっぱいまでで、Irony使って大体書き上げてしまったぞ。
単独ファイルのコンパイルは文法の厳密化とか以外は大体こんなもの。
あとはエラー出力を整理してGUIくっつけて複数ファイルのコンパイルに対応したらおしまい。

ソースコード吐き出し式よりライブラリ式の方がオレには使いやすいようだ。

306 :デフォルトの名無しさん:2009/08/04(火) 10:55:30
C#って文法は単純でも中身は超複雑だぞw

307 :デフォルトの名無しさん:2009/08/04(火) 12:43:57
中身w


308 :デフォルトの名無しさん:2009/08/04(火) 16:08:03
PEGのパーザジェネレータ作るのはかなり簡単だよ。LL(1)やLALR(1)のパーザジェネレータ
作るのと比べてもかなり簡単。LLやLR系だと文法に対するグローバルな解析が必要になるけど
PEGはそういうのしなくていいし。パーザジェネレータじゃなくてパーザコンビネータならもっと簡単に書ける
無名関数に相当する機能がある言語だったら、大体100行程度で基本的な機能を持ったものを作れる

309 :デフォルトの名無しさん:2009/08/04(火) 16:14:10
PEGの利点:
・原理的にyaccとかのLALR(1)より強力なので、yaccでハンドリングするのが難しい文法も簡単に扱える(ことがある)
・レクサとパーザが統合されてるので、Rubyの"#{exp}"みたいな式埋め込み文字列みたいな文法も簡単に扱える
 ・Rubyとかではトリッキーな事をしてこの問題を回避している
・アルゴリズムが簡単なので挙動を理解しやすい=文法をデバッグしやすい(かも)

PEGの欠点:
・ナイーブな実装では最悪の場合指数関数時間(だけど、実用上最悪ケースはそんなに起きないと思う)
・メモ化(Packrat)しても、定数係数でLLやLRとかの非バックトラック型のパーザよりは遅い
・Packratだと、状態付きパーザを扱うのが難しい(シンボル表を参照しながらパーズする場合など)
・レクサとパーザが統合されてるので、空白とかの処理がやや面倒

310 :デフォルトの名無しさん:2009/08/04(火) 16:14:12
それはPackratパーザ?
それともバックトラック?

311 :デフォルトの名無しさん:2009/08/04(火) 16:15:27
>>310
Packratも基本的には、単にナイーブなPEGパーザをメモ化するだけなので、多少手間が増えるくらいで、実装は難しくは無い

312 :デフォルトの名無しさん:2009/08/04(火) 16:28:07
とりあえずLISP系でスマートに実装してみて!
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

313 :デフォルトの名無しさん:2009/08/04(火) 16:43:41
>>312
OK. 1時間くらい待っててくれ

314 :デフォルトの名無しさん:2009/08/04(火) 16:50:54
なんかPEG/Packrat詳しい人がいるみたいなので質問させてくれ。
手元のPEGのサンプルは四則計算を解釈していて、いきなりインタプリタとして動くようになっている。
いきなり動かすんじゃなくて構文木構築の段階で動作をとめることはできるんだろうか?

それから途中まで解析した文脈を情報として続く解釈で再利用できるだろうか?
例えばPythonの文法を考えてもらうとして、

# ***ここから***
if [Expr]:
  [Sentence]
  [Sentence]

[Sentence]
# ***ここまで***

Pythonでは構文の範囲は字下げで表現しているので、
if文の範囲を調べるのに字下げの数を数えないといけない。
どうやって解釈させたらいいのかわからなくて戸惑っているところなんだが。

315 :デフォルトの名無しさん:2009/08/04(火) 17:21:20
そのサンプルは、構文木を作ってから四則演算を実行してるんじゃなくて、
いきなり構文を解析しながら四則演算をしてるんじゃなかろうかという気がするが。

オフサイドルールとかはPEGの鬼門だということかと。
確か原論文では、それを理由にHaskellはムズいとして、Javaのパーザを
実装していた。
多分さがせば解決方法が出てる論文もあるだろうと思うのだけど。

パーザを状態付きにする方法は原論文にある。

316 :デフォルトの名無しさん:2009/08/04(火) 17:56:21
>>309
> 定数係数で

この言葉遣いはちょっと変なのでは?

>>314

字下げ処理はレキサの仕事と割りきってしまえばそれほど難しくはないでしょ。
先読みして{と}に相当するものに変換できるから。


317 :313:2009/08/04(火) 18:20:40
(use srfi-9)
(define-record-type result
 (make-result x y) result? (x value) (y next))
(define (app parser f)
 (lambda(in)
  (define r (parser in))
  (if r (make-result (f (value r)) (next r)) #f)))
(define (term str)
(lambda(in)
(if (equal? (string-scan in str ' index) 0)
(make-result str (substring in (string-length str) (string-length in))) #f)))
(define (/: x y) (lambda(in) (or (x in) (y in))))
(define (^: x y)
 (lambda(in)
  (define r1 (x in))
  (if r1
   (let ((r2 (y (next r1))))
    (if r2 (make-result (cons (value r1) (value r2)) (next r2)) #f))
   #f)))
(define (seq p . parsers) (fold (lambda(x y) (^: y x)) p parsers))
(define (rep0 parser)
 (lambda(in)
  (let loop ((rest in) (rs '()))
   (define r (parser rest))
   (if r (loop (next r) (cons (value r) rs)) (make-result (reverse rs) rest)))))
(define (rep1 parser) (^: parser (rep0 parser)))
(define (? parser) (/: parser (app (term "") (lambda(v) '()))))
(define (& parser) (! (! parser)))
(define (! parser) (lambda(in) (if (parser in) #f (make-result '() in))))
(define-syntax rule
 (syntax-rules() ((_ name body) (define name (lambda(in) (body in))))))

318 :313:2009/08/04(火) 18:25:10
なんとか1レスの範囲に収めたが、そのせいもあって、読みづらくなってる。その辺は読む側
の環境で適当になんとかしてくれ。あと、Gaucheのライブラリ関数string-scan使ったので、Gauche
でしか動かんと思う。string-indexとかに置き換えれば、他のSchemeでもたぶん動くと思われ。
Schemeは普段使わないんで、Scheme使いの人からするとアレなコードかもしれんが、そのへんは勘弁。
使い方は以下のような感じ。文脈自由文法では表現できない、A^n B^n C^nの文法。

(rule S (seq (& (^: A (! (term "b")))) (rep1 (term "a")) B (! (term "c"))))
(rule A (seq (term "a") (? A) (term "b")))
(rule B (seq (term "b") (? B) (term "c")))
(display (S "aaabbbccc"))

319 :313:2009/08/04(火) 18:28:52
Pythonのインデントルールみたいなのは、レキサがインデント処理する事が前提だから、PEG/Packrat
で処理する場合でも、レキサを別に用意した方が書きやすいと思う。レキサがあったらPEGじゃないというわけ
じゃないので別に構わないはず(基本単位が文字の代わりにトークンになるだけ)。

320 :デフォルトの名無しさん:2009/08/04(火) 19:26:20
>313
うお、本当にできてる!
たしかにこれはクロージャ使えない言語では無理だ
こういう風になったけど合ってますか?

gosh> (display (S "aaabbbccc"))
#<result 0pbb1788>#<undef>

gosh> (define res (S "aaabbbccc"))
res
gosh> (result? res)
#t
gosh> (value res)
(((() #0="a" #0# #0#) (#1="b" (#1# (#1#) . #2="c") . #2#) . #2#))
gosh> (next res)
""



321 :313:2009/08/04(火) 19:34:21
>>320
たぶんそれであってる。まあ、これだけだと構文エラー時のエラーメッセージ
表示とかどうしようも無いし、実用的にしようと思うと、色々付け足す必要があるけど、
コアの部分はこれくらい簡単だということで。

322 :デフォルトの名無しさん:2009/08/04(火) 23:05:50
みんな論文みながら作ってるの?
どうやってpackrat実装すればいいかよくわからん

323 :デフォルトの名無しさん:2009/08/04(火) 23:21:12
21世紀…人類はいまだに左再帰問題を克服できずにいた

324 :313:2009/08/05(水) 00:55:09
>>322
一応、自分が作ったときは論文参考にしたけど、基本的にナイーブなPEGパーザ+メモ化に過ぎ無いから
それさえわかっていれば、自力で実装することもできると想う。ヒントとして、上で書いたSchemeによる
パーザコンビネータで、各非終端記号の解析結果をメモ化するにはどうすればいいか考えてみて。
Rats!とか高度な最適化してる奴はまあソース読むしかないと思うけど。

325 :デフォルトの名無しさん:2009/08/05(水) 01:16:54
左再帰の論文もあったような。

326 :デフォルトの名無しさん:2009/08/05(水) 02:07:47
これのことかな。
Packrat Parsers Can Support Left Recursion (PEPM 2008)
Alessandro Warth, James R. Douglass, and Todd Millstein
http://www.tinlizzie.org/~awarth/papers/pepm08.pdf

327 :デフォルトの名無しさん:2009/08/08(土) 18:40:53
COBOLインタープリタを作ろうと思ったが挫折。
制定されているキーワードの数が尋常じゃない。
商用COBOLコンパイラを作っているメーカーの人はマジ天才。

328 :デフォルトの名無しさん:2009/08/08(土) 19:51:58
何でそんなものを作ろうと思ったんだw

329 :デフォルトの名無しさん:2009/08/09(日) 03:42:55
COBOLかっこいいじゃん。大文字で。
Cを使える人はいっぱいいるけど、COBOLはそうはいない。
だからこっそり開発して職場のヒーローになろうと思ってね。
でも道は遠かった・・・使うのと作るのとは別物なのだ。

330 :デフォルトの名無しさん:2009/08/09(日) 09:26:31
>>327
> 制定されているキーワードの数が尋常じゃない。
何のためにパーサジェネレータがあるんだか
まあ、BNF 打ち込むだけで疲労困憊ってのはあるかもしれんが…


331 :デフォルトの名無しさん:2009/08/09(日) 09:32:18
大文字使いたいだけならマクロでも使えばいいじゃん

332 :デフォルトの名無しさん:2009/08/09(日) 10:31:58
>>330
やっぱ疲労困憊ら?(静岡弁で)

333 :デフォルトの名無しさん:2009/08/09(日) 11:53:19
>COBOL
ほとんどは命令の名前なんだから、Identificationのレベルで区切って、
命令の判別はあとの段階にまわした方が簡単になるんじゃない?
あとはまあ、フリーソフトのCOBOLの処理系なんて昔ならともかく今ならいくつもあるんだし、作らないという手も。

334 :デフォルトの名無しさん:2009/08/12(水) 15:03:20
ゲームのNPCとかにスクリプトを使いたいんだけど
参考になるサイト教えて、lexとかyaccとか難しいのはいらない

335 :デフォルトの名無しさん:2009/08/12(水) 15:32:59
>>334
とっつきは悪いかもしれないけど、yacc&lexを使った方が
結局は落だと思うよ。

336 :デフォルトの名無しさん:2009/08/12(水) 16:35:21
>>334
オープンソースのスクリプトの処理系を組み込んだ方が普通は楽。
オレはそれにシナリオ記述用の独自形式のスクリプトと2種類用意しているが。

337 :デフォルトの名無しさん:2009/08/12(水) 17:11:04
>>334
ゲームの性質(リアルタイムとかアドベンチャーとか)にもよるけど
ゼロから勉強しなきゃいけないならYaccとかbisonとかの支援受けるのは悪くないと思うよ
組み込みでスクリプトをその場解析する必要があるならLRのパーサを裸で実装したマイクロPlan(1970年代のbitの記事)とかもあるからそういうレガシーなものもいいかもしれない(これは中間コードVMとしても結構興味深い)

っというわけで334がどういうものを欲しているかによって回答が異なるのだな


338 :デフォルトの名無しさん:2009/08/12(水) 21:00:13
luaは洋ゲーで良く使われてる

339 :デフォルトの名無しさん:2009/08/12(水) 21:21:39
>>337
マイクロPlan懐かしすぎ
臨時増刊捨てなきゃよかった

340 :デフォルトの名無しさん:2009/08/12(水) 23:00:14
>>339
同じく後悔してる
他にもmicro StarTrekやTinyBASICのソースもあったんだよな

>>334
ゼロから勉強するつもりで、もし入手できるなら「翻訳系構成法序論」がお勧め。
えらく堅苦しい題名だけど、たった136ページで翻訳系(コンパイラ)から
翻訳器生成系(yaccのようなコンパイラコンパイラ)まで作成方法が解説してある。
言語はPascal系なModula-2だけど、難解なアルゴリズムではないから、
C/Javaなどに慣れていれば読解に問題はないと思う。

あと、自前で言語処理系を作らないつもりなら、Tcl/Ruby/Pytonみたいな
汎用スクリプト言語をゲームアプリの中に「埋め込む」ことも検討できる。
ゲーム専用のスクリプトエンジンについては、よく分からんなぁ。

341 :デフォルトの名無しさん:2009/08/13(木) 01:44:52
老婆心だが、Tcl/Ruby/Python のうち、Rubyを組み込むのは
やめたほうがいいと忠告しておこう

Tclはもともと組み込みのための処理系だし、Pythonもある程度
考えてあって商用も含めて実績も多い。

R(以下略

342 :デフォルトの名無しさん:2009/08/13(木) 01:51:34
PL/0まじおすすめ
許されるのは小学生までだけど


343 :デフォルトの名無しさん:2009/08/13(木) 01:59:01
>>334
tclかluaを使うことにして、公式ドキュメントを。

344 :デフォルトの名無しさん:2009/08/13(木) 02:48:09
>>334
あとはまあ、NPCの台詞や動き程度なら、
イベントの発生条件とイベントの内容をデータとして書ければいいわけだから、
スクリプト言語を使うまでもなく、
XMLやYAMLなどで宣言的データとして書く方法もある。

ちょうど、同じようなものを自分で作ろうとしているところ。

345 :デフォルトの名無しさん:2009/08/13(木) 03:15:15
>>341
スレ違いの質問で悪いが、続きを聞かせてくれ。

実際、Pythonを組み込んだオプソだけど高機能な3Dソフトを
知っているし、それに対してRubyはvimくらいしか実績を知らない。
ただ、Rubyの組み込みに何か技術的に致命的な欠陥があったりするのか、
あるいは、それほどPythonが組み込みに優れているのかまでは分からないんだ。
それとも単に>>341の印象で語ってるのか?

346 :デフォルトの名無しさん:2009/08/13(木) 03:35:11
>>345
341ではないが、代わりに答えてみよう。

Rubyでは処理系そのものをライブラリの形で差し替えたり、
あるいはJavaや.NETの枠組みで処理系そのものを再実装したりの試みは広く行われているが、
Rubyを組み込みスクリプトとして使用する例はオレもRPGツクールXPくらいしかしらない。
あまりその辺の分野は活発ではないような気がする。

いい加減スレ違いだから、これ以上の話はRubyのスレに行ってくれ。

347 :デフォルトの名無しさん:2009/08/13(木) 10:55:31
独自に実装かつ、yacc&lexは難しいと言うなら、LISPかForthがいいんじゃね?
LISPはよく見るから、あえてForthでやってみてくれ。

348 :デフォルトの名無しさん:2009/08/13(木) 13:30:18
>>345
ruby は GC というかメモリ管理まわりの兼ね合いで
組み込みがかなり面倒、という話を聞いたことがある


349 :デフォルトの名無しさん:2009/08/13(木) 14:10:04
スレチだけど、言語実装の話でもあるので、ちょっとRubyの話を続けると、
組み込みに向かないのは、evalがあるのが大きいと思う。
そのせいで、パーサとVMが独立できないので、言語まるごと組み込む必要が
あるのが大変なんじゃないかと。
1.9でその辺は変わったみたいだけど。

350 :デフォルトの名無しさん:2009/08/13(木) 14:27:07
行の1文字目で処理を分ける程度でいいんじゃね?


351 :デフォルトの名無しさん:2009/08/13(木) 14:33:22
1文字で思い出したけど、変数名が1文字の場合はハッシュ使わないで
26個のテーブルってのどう?

352 :デフォルトの名無しさん:2009/08/13(木) 14:41:29
いつの時代のBASICだよ

353 :デフォルトの名無しさん:2009/08/13(木) 15:08:53
Rubyの話をもちっと聞かせてくれ。
俺も拡張機能用にPythonを組み込んだアプリは良く見るが
Rubyを組み込んだアプリは見たことが無い。
これは単にRubyが歴史が浅いからなのか、それともRubyが組み込みで使えない深い理由があるのか?


354 :デフォルトの名無しさん:2009/08/13(木) 15:33:13
>>352
難読化したjQueryとかじゃね?

355 :デフォルトの名無しさん:2009/08/13(木) 16:00:40
じゃあこのスレっぽく話を広げようか
俺341だけど、言いだしっぺっぽいので

まず指摘されてたけど、メモリ管理の点で、1.8時代はネイティブスレッドとは
破滅的に相性が悪かったし、ウィンドウシステム・3D・DirexX関係も
相性はあまりよくない。

それに対してPythonは参照カウントとマーク&スイープの組み合わせで、
マーク&スイープもおとなしいタイプ。
参照カウントってのはちょっとダサいが、質実剛健だしその点では好感。

あと、これは俺の想像だけど、Pythonの作者は、PythonからCを使うってのと
CからPythonを使うってのを対称的で対等なものとして考えている雰囲気があるし、
技術的に変なこだわりはなくて、いろんなところに配慮しながら無難な実装をしてる。

Rubyは実装技術オタクのMatzが作ったので、変なところでこだわってたり
無駄に離れ業やってたりしてタチが悪い
ただし、Rubyは将来的にはマルチVMも可能にしようという方向で動いてるようだから
そこらへんは変わってくるかもしれない

356 :デフォルトの名無しさん:2009/08/13(木) 20:56:15
とりあえず Google SketchUp が Ruby 組み込みだったはず。

357 :デフォルトの名無しさん:2009/08/14(金) 01:20:18



Q. 64bitプログラムとは、どのような文を書くといいのですか

A. コンパイラが64bitコンパイルできるなら何でも64bitプログラムになります




心底「ダメだこのバカ」と思った




358 :デフォルトの名無しさん:2009/08/14(金) 09:35:58
>>357
つぶやきはtwitterで

359 :デフォルトの名無しさん:2009/08/14(金) 11:41:34
>>357
スレ違い

64bitのソフトウェアってどうやって作るの?
http://pc12.2ch.net/test/read.cgi/tech/1170481037/

そのセリフの人物によっては

ハズレの外注を引いたときの対応 2人目
http://pc11.2ch.net/test/read.cgi/prog/1147161173/
【まるで】使えない新人 0x1C
http://pc11.2ch.net/test/read.cgi/prog/1249835909/

など

360 :デフォルトの名無しさん:2009/08/14(金) 21:52:07
トークンという物について質問させてください。
例えば s = "ABC"; という文があった場合トークンは、
1. s
2. =
3. "
4. ABC
5. "
6. ;
でいいのでしょうか? とくに文字列が "ABC" で1つのトークンなのか
"とABCと"で3つのトークンなのかがわかりません。



361 :デフォルトの名無しさん:2009/08/14(金) 21:59:32
s
=
"ABC"
;
と分けるのが一般的かと思います

362 :デフォルトの名無しさん:2009/08/15(土) 00:06:09
Forthは"が単独トークンになるね。

363 :345:2009/08/15(土) 00:07:23
スクリプトエンジンのスレだから、
「組み込み用途における技術的観点での比較」に絞ってレスする。
宗教戦争を煽る気はない。

>>346
>あまりその辺の分野は活発ではないような気がする。

Rubyは組み込みの実績が少ないし活動が活発ではないという理由かな。
それは技術的な理由からは外れている気がする。そうなった理由(背景)がこのスレの主題。

>>349
>そのせいで、パーサとVMが独立できないので、言語まるごと組み込む必要が
>あるのが大変なんじゃないかと。

Rubyが言語まるごと(パーザ+VM)組み込む必要があるのは事実。
ただし、個人的な感覚として、アプリケーションにスクリプトを組み込む目的の多くは、
ユーザによるアプリケーション機能の自由な拡張(スクリプティング)なのだから、
まるごと実装は欠点にはならないと思う。(JavaVMのようなコンパイラ系は別)

(長いので続く)

364 :345:2009/08/15(土) 00:10:47
(>>363の続き)

>>355
>まず指摘されてたけど、メモリ管理の点で、1.8時代はネイティブスレッドとは
>破滅的に相性が悪かったし、

Rubyとネイティブスレッドとの破滅的な相性の悪さは事実なので同意。
ただし、多くのアプリケーションでは、ネイティブスレッドが前提とはならない
(あるいはRubyの疑似スレッドでもかまわない)ケースが大半を占めるのではないかと思う。

>ウィンドウシステム・3D・DirexX関係も相性はあまりよくない。

RubyもGNOME, WxWidget, Qt, Cocoa, SDLとウィンドウ(GUI toolkit)は揃っているし、
3DもOpenGL拡張ライブラリがあるから、相性が悪い理由にはならない。
DirectXは(おそらく)Rubyで対応しておらず、Phytonの実績が多いのかも(?)しれないが、
それは実績が多いという事実の言明だけであって、具体的な技術面の指摘ではない。
そもそも、これらは拡張ライブラリであってエンジン組み込みではないからスレ違い。

>それに対してPythonは参照カウントとマーク&スイープの組み合わせで、
>マーク&スイープもおとなしいタイプ。

GC制御に関わる所有ルールの難解さは、RubyにもPythonにも同様に存在する。
またGC方式の差異は、組み込み用途の利点とは直接的に結びつかないのでスレ違い。
(もし関連性があると考えているなら、具体的に差異を説明してください)

>あと、これは俺の想像だけど、Pythonの作者は、PythonからCを使うってのと
>CからPythonを使うってのを対称的で対等なものとして考えている雰囲気があるし、

対称性はRubyも変わらない。実装の難易度も同等というのが、個人的な実感。

(まだ続く)

365 :345:2009/08/15(土) 00:15:27
(>>364の続き)

>技術的に変なこだわりはなくて、いろんなところに配慮しながら無難な実装をしてる。

これは(スレ違いだけど)同感で、PythonがSimple is bestを追求してるのは好感。ただし、

>Rubyは実装技術オタクのMatzが作ったので、変なところでこだわってたり
>無駄に離れ業やってたりしてタチが悪い

については、組み込み用途とは無関係だし、Rubyがスキャナとパーザの実装で
離れ業をしている事を除けば、具体性の無いMatzへの個人批判でしかないのでスレ違い。

以上、個人の印象/主観を除いたRubyの組み込み用途における技術的な問題点をまとめると、

- 言語まるごと(パーザ+VM)組み込む必要がある
- ネイティブスレッドとの破滅的な相性の悪さ

の二点のみ。組み込み用途に限れば、Pythonと比較した決定的な欠陥は見当たらない。
実際、拡張ライブラリ(Ruby->C呼び出し)を自作できるRubyプログラマであれば、
Ruby組み込み(C->Ruby呼び出し)も難儀な実装作業ではない、というのが個人的な実感。
(PythpnでもPython->C呼び出しが実装できない人であれば(その逆の)組み込みが難しいのは同じ)

(ゴメン、次で最後だから許して)

366 :345:2009/08/15(土) 00:18:02
(>>365の続き)

あと(技術的な観点ではないけど)付け加えるとすれば、
Pythonは公式文書として組み込み方法が解説されているのに対して、
Rubyはインタプリタソース(ruby-1.8.x-xxx.tar.gz)に含まれるごく簡単な解説が
唯一の公式文書であるため、自力でネット/書籍から情報を得る必要があるという差異が、
組み込み実績という結果に大きく影響していると思われる。

これだけだと何の事か分かりずらいと思うので、最後に具体的なアドバイスをまとめる。

- RubyプログラマはRuby組み込みで、PythonプログラマはPython組み込みを選ぶのが楽
- ただし、ネイティブスレッドが前提なアプリケーションであれば、Pythonしかない
- どちらも知らない人は、(解説文書が整備されている)Phyton組み込みが無難な選択(=お勧め)
- ただし、言語の選択は、システム全体を見渡してから判断すべき(解説文書の有無だけで
 言語を選択すると、本末転倒になる恐れがある(木を見て森を見ず))

長文/連投のスレ汚し、失礼しますた。

367 :デフォルトの名無しさん:2009/08/15(土) 00:43:35
元々の話のゲームのスクリプト用途とかなら
既に挙げられてはいるけど lua みたいな
最初から組み込み用に作られたものを使うのが無難じゃないかな
変に難しいこと考えなくても楽に組み込めるし

368 :デフォルトの名無しさん:2009/08/15(土) 00:53:25
長過ぎて読んでないが、
結局Rubyを無理やり組み込む人はいないと

369 :デフォルトの名無しさん:2009/08/15(土) 00:53:49
これだけ長文でレスしたくせに、中身がほとんど無いじゃないか。
スレ違いをいちいち長ったらしく指摘しなくていいからもっと短くまとめろよ。

> あと(技術的な観点ではないけど)付け加えるとすれば、
> Pythonは公式文書として組み込み方法が解説されているのに対して、
> Rubyはインタプリタソース(ruby-1.8.x-xxx.tar.gz)に含まれるごく簡単な解説が
> 唯一の公式文書であるため、自力でネット/書籍から情報を得る必要があるという差
> 異が、組み込み実績という結果に大きく影響していると思われる。

付け加えじゃなくて、ここが一番重要なところだろ。

370 :デフォルトの名無しさん:2009/08/15(土) 00:58:42
機能的にはschemeやjavascript辺りのサブセットがVMで動けば十分
バランスが取れたのがlua
実際にスクリプトを書かせる対象を想定しないとな

371 :デフォルトの名無しさん:2009/08/15(土) 01:04:13
>>366
まず、俺の主観が入っているってのはその通り。その点はすんまそん
てかあまり深く考えずに書き込んだけど、363氏の説明の方がほとんど
正しいと思います。

いくつか書きたいのは、

PythonのGCは停止時間(いわゆるレスポンス)が悪くない。
循環参照を解消するために定期的に
マーク&スイープする必要があるけど、そのタイミングは制御できる。
たとえばゲームでいえばシーン暗転の時にやるとか。
Rubyは逆で、楽だけど大味な制御しかできない
以前に256倍網道編でarton氏がpure rubyでゲーム作ってたけど、
実際実行すると結構カクカクだった

ついでにいうとCから使ってるとファイナライザが欲しくなるが、
CPythonならスコープはずれたら解放されることが(個別実装の仕様として)
保証されるので楽。

これらが決定的な利点・欠点かどうかは状況に依存するね。もちろん

あと実装じゃなくて完全にスレチだけど、ライセンスが違うのと、
(用途によるが)配布の際にバイトコード化可能かいう点もある。

以上で撤収します

372 :デフォルトの名無しさん:2009/08/15(土) 01:40:39
forthってGCってあるんだっけ?
あれ?ディクショナリ内にメモリって確保するんだっけ?

373 :デフォルトの名無しさん:2009/08/15(土) 01:48:28
組み込み用スクリプトのインタプリタとライブラリのデバッグに時間を掛けたくないよね
ゲーム本体よりも大きいと本末転倒だし
ソースがせいぜい2〜3ファイル、合計数百行程度、使えるライブラリは関数をテーブルに登録ぐらいが理想か

374 :345:2009/08/15(土) 02:21:05
>>371
>まず、俺の主観が入っているってのはその通り。その点はすんまそん

こちらこそネチネチ書いてスマンかったです。ただ主観/印象で論議すると
宗教戦争に陥りがちだから、それを避けたかった。分かってくださいませ。

>Rubyは逆で、楽だけど大味な制御しかできない

RubyもGCを明示的に起動できますよ。シーン暗転前に起動すればいいと思いますが....。

>実際実行すると結構カクカクだった

カクカクになるのは、GCとは別の要因ではないかと思います。
GCが原因なら、(比較的あいた間隔で)実行が固まったように見えるはずですから。

>CPythonならスコープはずれたら解放されることが(個別実装の仕様として)
>保証されるので楽。

これは、(Cスタック上に)auto変数としてPythonVMを確保すれば、そのVMと実行環境が
まとめて自動的に解放されるということでしょうか?
もし本当なら、(Rubyと比較して)かなりプログラマの負担が減りますね。
あと同一プロセス上でのマルチVM(インタプリタ)も簡単に実現できると思われますし。

>あと実装じゃなくて完全にスレチだけど、ライセンスが違うのと、

Rubyライセンスは、とっても緩やかなものです。Matzは言語オタクだから、
(権利の主張よりも)自分の作品を使ってくれることに喜びを感じてるのだと想像させるほどに。

>(用途によるが)配布の際にバイトコード化可能かいう点もある。

これも、(オプソなプロジェクト以外では)採用を決めかねない大きなPythonの利点ですね。
ソース非公開というニーズは多いと思いますから、>>363の最後の段落は撤回します。

375 :デフォルトの名無しさん:2009/08/15(土) 02:49:20
いまさらなんだが既存のスクリプトエンジンを組込む話は
組込み系言語スレがふさわしいと思う。

376 :デフォルトの名無しさん:2009/08/15(土) 03:05:22
javascriptはBOTとかのチートツールで使われてる

377 :デフォルトの名無しさん:2009/08/15(土) 03:08:01
>>375
でもあそこでpとかrとか言ったら荒れるんだよね


378 :デフォルトの名無しさん:2009/08/15(土) 08:17:18
>>355
> 参照カウントってのはちょっとダサいが、質実剛健だしその点では好感。

mark & sweepと併用するやり方は、
どっちをメインにするとしても、極めて有効なやり方だよ。

379 :デフォルトの名無しさん:2009/08/15(土) 09:46:27
Rubyは実装として美しくない
最近の高スペックPC当て込んだ

バブル言語だろ

380 :デフォルトの名無しさん:2009/08/15(土) 10:16:03
Forthは基本的にはライブラリ(辞書)管理もFILOだから、
GCという概念がない。動的なデータ構造も(スタック以外)ないし。

PostScriptは確かスナップショットのようなものを取って、
明示的に指定してそのスナップショット以降に確保されたものを
解放するとかそういう機能がある、と思った。

381 :デフォルトの名無しさん:2009/08/15(土) 11:29:43
おれ科学計算系で、3回くらいPythonが組み込まれてるソフトを
触ったことがあるよ。個人的な感想だが、pythonの微妙に面倒臭いところが、
組み込みだと逆にぴったり使いやすいんだわ。説明しづらいけど。
Rubyの自由さは組み込み向けだと正直いらない。

382 :デフォルトの名無しさん:2009/08/15(土) 13:30:14
>>363-366
おおむね同意だが、>>349に対するレスはやや違うと思う。
漠然とスクリプトエンジンと題した場合、真っ先に求められるのは
書いたスクリプトをその場で実行できる手軽さであり、
必然的にインタプリタの要件を満たすことになる。
これに現在主流がバイトコンパイル式であることを勘案すると
言語まるごと(パーサ+VM)を組み込むことがほぼ確定になる。

まあオレがオレオレ処理系を作るときはスクリプトのコンパイラは
事実上のジェネレータとして実装して、
生成物は汎用のスクリプトの処理系に渡してしまうから
自作部分は純粋なコンパイラになるわけだが。

開発用にはそれとは別にスクリプトのタイムスタンプを見て
自動的にコンパイル作業を行う機能を追加することになるだろう。

383 :デフォルトの名無しさん:2009/08/15(土) 13:32:25
ruby のライセンスは GPL よりは緩いけど
他の組み込み向け言語に比べると
だいぶめんどくさい方だと思うけどな
まぁライセンス云々はスレ違いだけど


384 :デフォルトの名無しさん:2009/08/15(土) 13:58:23
>>382
パーサーの要不要は用途次第かと
ゲーム用とかだと開発時は素早く試行錯誤したいが
リリース後は基本的にはスクリプトをいじる必要がないので
そういう場合パーサーは無駄なので最終的には外せる方が良い
実行環境がプアなものは特に



385 :デフォルトの名無しさん:2009/08/15(土) 14:58:43
これが噂の「すり合わせ」というやつか

386 :デフォルトの名無しさん:2009/08/15(土) 17:01:08
生インタプリタも、中間形式分離型も両方ある奴がほしい、という
要望ってこれからも大きいかな?

今のところメジャーなもので、実現したものってないような気がするけど。

387 :デフォルトの名無しさん:2009/08/15(土) 17:41:29
Ruby, Python等のダイナミック言語でパーサを分離するのは無理じゃないか?
例えばPerlだと、実行せずに静的にパースすることは不可能なわけだし。
ttp://perlmonks.org/?node_id=663393&

388 :345:2009/08/15(土) 18:25:09
>>387
Pythonであれば、以下のようなカキコがあるから、
パーザとVMは分離できるように見えるけど、違うの?
Pytonにはevalは存在しないみたいだし(>>349参照)

>>371
>(用途によるが)配布の際にバイトコード化可能かいう点もある。


389 :デフォルトの名無しさん:2009/08/15(土) 19:16:11
>>380
> Forthは基本的にはライブラリ(辞書)管理もFILOだから、
> GCという概念がない。動的なデータ構造も(スタック以外)ないし。

それは嘘。
FORTHを採用する場合、
後置記法を採用するくらいだから、
非常に小さいインタプリタが必要とされている局面。
だからプアな処理系が多いと言うだけで、
GCをバッチリ実装した処理系はあってもいい。

データがFILOで済むというのも嘘。
辞書に登録したら不必要になる順序はプログラム次第。

390 :デフォルトの名無しさん:2009/08/15(土) 19:56:55
まあ誰もスクリプトでFORTHなんか使いたくないからどうでもいいけどなw

391 :387:2009/08/15(土) 20:03:53
>>388
実際にPythonやRubyでパースが曖昧になるようなケースは知らないが、
evalがあると分離しにくいのは確かだろうね。ちなみにPythonにもevalはある。

392 :デフォルトの名無しさん:2009/08/15(土) 21:33:03
そこれりすぷれすよ

393 :デフォルトの名無しさん:2009/08/15(土) 21:35:35
Rubyが使われないのは単に実績がないからなんでしょ
どんどん使えばいいと思うよ

394 :デフォルトの名無しさん:2009/08/15(土) 21:45:11
組み込みスクリプト用のLispってあるの?

395 :デフォルトの名無しさん:2009/08/15(土) 21:50:20
emacs lisp

396 :デフォルトの名無しさん:2009/08/15(土) 22:02:09
Ypsilon

397 :デフォルトの名無しさん:2009/08/15(土) 23:35:53
elisp

398 :デフォルトの名無しさん:2009/08/15(土) 23:43:00
ruby

399 :デフォルトの名無しさん:2009/08/16(日) 00:05:29
>>394
小さな独自Lisp系ならいくらでもあるよ(CLとかSchemeとかの規格準拠じゃなければ8ビット機でだって動くんだもの)



400 :345:2009/08/16(日) 01:27:27
>>391
え、Pythonにもevalあるんですか?!うーむ
どちらが真実かは、結局は自分で調べなさいということですな。

401 :デフォルトの名無しさん:2009/08/16(日) 01:36:23
python -c 'print eval("1+1")'

402 :345:2009/08/16(日) 01:52:09
>>401
再現しますた。わざわざありがトン。

403 :デフォルトの名無しさん:2009/08/16(日) 02:37:35
>>394
LISPerは自分用のがあるから
他人の糞LISPなんて使わない


404 :デフォルトの名無しさん:2009/08/16(日) 02:50:00
>>403
というか、そんな結論ありきな考え方をするやつなら
そもそもこんなスレに来る必要がないわけだが。

405 :デフォルトの名無しさん:2009/08/16(日) 08:26:25
> データがFILOで済むというのも嘘。
> 辞書に登録したら不必要になる順序はプログラム次第。

少なくとも伝統的なFORTHなら辞書は一方向リンクトリストで最後に
登録されたものから順につながってるし、最後に登録されたワードを
グローバルなワークエリアが指している。
FORGETワードは、特定のワード以降に登録されたワードを全部捨てて
しまう。

そういう構造だから、基本的にGCはない。

406 :デフォルトの名無しさん:2009/08/17(月) 10:10:39
>>394
ISLISP

407 :デフォルトの名無しさん:2009/08/26(水) 22:10:05
ABAPのEBNFください

408 :デフォルトの名無しさん:2009/08/31(月) 11:13:52
ANTLRで苦戦していて質問したいのですが、このスレでいいでしょうか?
もしくは専用スレを立てる?


409 :デフォルトの名無しさん:2009/08/31(月) 11:40:06
このスレでいい。

410 :408:2009/08/31(月) 11:58:13
お言葉に甘えて。

ng
  : n=TOKEN (v=INT|v=FLOAT)
    -> ^(PARAM $n $v)
  ;

ok
  : n=TOKEN v=(INT|FLOAT)
    -> ^(PARAM $n $v)
  ;

ngルールみたいな書き方はダメでしょうか?
antlrは通るのですが、C言語からそれを呼び出すと
セグメンテーションフォールトします。


411 :408:2009/08/31(月) 11:59:43
ごめん。ngルールとokルールが逆だった。
v=(INT|FLOAT)がNGで(v=INT|V=FLOAT)がOK.
ANTLR的にv=(INT|FLOAT)という書き方はNGなのでしょうか?


412 :デフォルトの名無しさん:2009/09/06(日) 21:10:45
出来ればツール頼らずに
手続き型言語作りたいんだけど
どのくらい大変なん


413 :デフォルトの名無しさん:2009/09/06(日) 21:16:35
コンパイラもアセンブラもリンカもエディタもツールですよ・・・

414 :デフォルトの名無しさん:2009/09/06(日) 21:40:42
Brainfuckならパンチカード手打ちしてもできるんだろうな

415 :デフォルトの名無しさん:2009/09/06(日) 21:42:28
TinyBASICくらいの規模なら机上でいけるんじゃないかな

416 :デフォルトの名無しさん:2009/09/06(日) 21:49:12
ツールってyaccとかlexのことか?
なくても大差ないと思うよ

417 :デフォルトの名無しさん:2009/09/06(日) 21:57:54
>>412
LLで混乱しない文法なら問題ないんじゃないの?
このスレだったと思うけどμplanとかpascalの構文なら自己記述できるし


418 :デフォルトの名無しさん:2009/09/06(日) 22:00:52
>>412
どういうコードに落とし込むかってあたりが問題になる位で落としやすいVMを設計すれば32Kワードもありゃ言語コンパイラは書ける
UCSD p-systemとかが実際そんなものだ

案ずるより産むが易しってあたりの言語なら悩む前に書き始めてみればいい
コード公開してもいいのなら行き詰まってから助けを求めに此処に戻ってこい


419 :デフォルトの名無しさん:2009/09/06(日) 22:09:00
いまどきこだわることはないと思うが、
たいがいの言語ならちょいと工夫すればだいたいトップダウンパーザで書ける。

420 :デフォルトの名無しさん:2009/09/06(日) 22:10:26
>>412
PerlやRubyで書けば、素で描いてもまあ2週間くらいで。

421 :デフォルトの名無しさん:2009/09/06(日) 23:56:56
LISPだと数分〜数時間

422 :デフォルトの名無しさん:2009/09/07(月) 00:03:58
yane lispおすすぬ

423 :デフォルトの名無しさん:2009/09/07(月) 00:42:09
Lisperあっち行け

424 :デフォルトの名無しさん:2009/09/07(月) 12:57:23
おおっ
わからない単語がいっぱいでてきた
たくさんレスありがとう

>>416
そういうことです

>>418
Lispなら作れたからアルゴリズムで行き詰る事は多分無いんだけど
Lispに比べると全然ソース量が桁違いになりそうでヘタレてる・・・

>>420
2週間!!
以外と速い
頑張ってみます

425 :デフォルトの名無しさん:2009/09/07(月) 20:43:59
Lispすげー

426 :デフォルトの名無しさん:2009/09/08(火) 07:46:38
Lisp作れたならその上でマクロ書けば数日で手続き型言語作れないか?

427 :デフォルトの名無しさん:2009/09/08(火) 10:19:06
LISPのインタプリタの作り方ならLISPの入門書の最後に例題で出ているレベル
JavaとかのGC機能が前提の言語ならそんなに難しくないはず
コンパイラなら知らん

LISPのインタプリタと手続き型言語のインタプリタはつくりがまったく違うと思うけどなあ

428 :デフォルトの名無しさん:2009/09/08(火) 11:44:23
↓このスレの住民なら1レス以内に作れるレベル

429 :デフォルトの名無しさん:2009/09/08(火) 11:57:33
LISPで全部できると思うならそうすればいい。
ただ、なぜいつまで経ってもLISP系が主要プログラミング言語にならないかの理由についても考慮すべき。

>>424
パーサー、構文木構築、構文木消化・変換、出力を順番に作って中間出力を目で確認する。
中間出力はPerlならData::Dumper、RubyならYAMLで。
この辺がC/C++ではしち面倒くさすぎてスクリプト言語でコンパイラを実装する理由。
よほど大規模なマイ言語のスクリプトを構築しない限りは速度面の不満も出ないしね。

430 :デフォルトの名無しさん:2009/09/08(火) 12:03:55
>>429
C++はSTLとかを使えば面倒な部分がなくなってスプリクト言語で実装するレベルにならない?

431 :デフォルトの名無しさん:2009/09/08(火) 12:20:47
>>424
Lispの処理系を書いたことがあるってことは、コンパイラ理論は知っているんだよな?

インタプリタ、中間コード吐いてVM上で動かす、ネイティブバイナリ吐く、
と色々パターンがあるが、基本はまず、再起下降パーサー書いて抽象構文木に
落として、実行するインタプリタを書く。それが出来たら(中間表現に落として
最適化して)コード生成。

432 :デフォルトの名無しさん:2009/09/08(火) 12:33:59
>>430
C++のSTLでYAML並みの読み書き柔軟性得るのにどれだけコストが必要か考えてみて。

433 :デフォルトの名無しさん:2009/09/08(火) 14:11:55
boost:serialization ってものも

434 :デフォルトの名無しさん:2009/09/08(火) 14:19:38
ruby信者は痛いので気づいたらそれ以降触らないようにしてる

435 :デフォルトの名無しさん:2009/09/08(火) 14:33:52
大体IRを一々ファイルに書き出す必要もねーだろw
Pretty-printerを書いとけば十分

436 :デフォルトの名無しさん:2009/09/08(火) 16:19:41
>>432
シリアライゼイションを覚えたての子供ですね?

437 :デフォルトの名無しさん:2009/09/08(火) 16:33:32
ANTLR3でトークンとしてヒットするけど出力しないトークンはどうやって定義すれば良いのでしょうか。
このTOKENでDQを無視してSTRINGだけツリーパーサーで欲しいのですが…
SKIP()はセグメンテーションフォールトで落ちました.

TOKEN
: DQ STRING DQ ;

fragment
DQ : '"' ;

fragment
STRING : ( ES | ~('\\'|'"') )* ;

fragment
ES
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\');


438 :デフォルトの名無しさん:2009/09/11(金) 21:46:52
ADD 3 TO 4

という文があった場合
BNFするとしたら、どうするのがカッコいいですか?

439 :デフォルトの名無しさん:2009/09/11(金) 21:52:46
<文> ::= "ADD" "3" "TO" "4"

440 :デフォルトの名無しさん:2009/09/11(金) 21:57:39
>>439
ATSにする場合どうすればいいの?

441 :デフォルトの名無しさん:2009/09/11(金) 22:39:18
キンコンキンコンキンコンキンコンキンコンキンコン

442 :デフォルトの名無しさん:2009/09/14(月) 19:04:29
AST? ATS?

443 :デフォルトの名無しさん:2009/09/14(月) 20:50:35
>>442
AST
AST
AST
たすけてください

444 :デフォルトの名無しさん:2009/09/14(月) 20:53:29
>>439みたいな文法だったらツリーにする必要なくね

445 :デフォルトの名無しさん:2009/09/14(月) 21:01:21
だね。
リスト(線形)でじゅうぶん。

446 :デフォルトの名無しさん:2009/09/14(月) 21:02:35
自然言語を再現したいのか
本当に "ADD" <NUM> "TO" <NUM> なのかでずいぶん違うよな

447 :デフォルトの名無しさん:2009/09/14(月) 21:17:13
"ADD" <NUM> "TO" <NUM>
なのです

その跡にFROMとかつくかもしれないのです
お願いします

448 :デフォルトの名無しさん:2009/09/14(月) 21:23:58
それでも再帰構造さえなければツリーはいらん

449 :デフォルトの名無しさん:2009/09/14(月) 21:30:25
でも、その後学のために
作ってみたいのです

お願いします

450 :デフォルトの名無しさん:2009/09/14(月) 21:31:10
だから構文そのものがツリー構造じゃないからツリーにならないんだって

451 :デフォルトの名無しさん:2009/09/14(月) 21:38:38
>>450
COBOLみたいな構文もツリー構造じゃないから無理?

452 :デフォルトの名無しさん:2009/09/14(月) 23:39:27
COBOLに式あったっけかな。
要するに、
<式> :== <式> + <式>
とか
<文> :== <IF文> | ...
<IF文> :== "IF" <式> "THEN" <文> ("ELSIF" <文>)* ("ELSE" <文>)? "FI"
みたいな再帰的な構文があると、再帰的なデータ構造でないと
いけないわけで、木が必要になる。

アセンブラみたいなのだったらリスト(線形)で十分。
SQLってどうなの? 識者求む。

453 :デフォルトの名無しさん:2009/09/15(火) 02:07:23
副問合せ句とかが在るから、再帰じゃないと表現できないんじゃないかな。

ところで、ORACLEのマニュアルにある図ってなんって言ったっけ?
BNFが図になってる奴。

454 :デフォルトの名無しさん:2009/09/15(火) 03:14:36
構文図

455 :デフォルトの名無しさん:2009/09/15(火) 10:36:28
Expression ::= "ADD" Factor "TO" Factor
Factor ::= Num | "(" Expression ")"
Num ::= "0".."9"+
かもしれん。
これならツリーになる?

456 :デフォルトの名無しさん:2009/09/15(火) 10:49:33
AND, OR, UNION等は再帰で定義するから木で表す。

457 :デフォルトの名無しさん:2009/09/15(火) 11:25:21
>>455
その構文のインスタンスはツリーに出来る。
その構文そのものは再帰があってDAGになる。

458 :デフォルトの名無しさん:2009/09/17(木) 02:22:52
デザインパターンを駆使してコンパイラを自作しています。

・字句解析=Chain Of Responsibility
・構文解析=Interpreter

のように作っていてうまくいっているのですが、
意味解析はどのパターンを使えばいいでしょうか?
どこかのサイトでVisitorを使うとか見たような気がするのですが。


459 :デフォルトの名無しさん:2009/09/17(木) 08:28:50
>>458
先に仕様があってそれから設計を施していくわけで、
手段と目的を混同しちゃいかん。
誰も君のコンパイラの設計がどうなってるのかなんて知らんだろ。

460 :デフォルトの名無しさん:2009/09/17(木) 09:34:27
つか, 関数型言語なら別の選択あるだろうけど,
手続き型言語の場合, パーサジェネレータ使った方が
早い処理系ができるだろうに………


461 :デフォルトの名無しさん:2009/09/17(木) 10:02:39
>>460
それは文法によるだろう。

言語処理系の書きやすさを第一に考えて言語を設計した場合、
手書きの再帰下降パーサでも十二分な速度が出ることはD言語などで実証されている。

462 :デフォルトの名無しさん:2009/09/17(木) 10:08:28
Interpreterで構文解析っておかしいだろ
どういう設計なのか知らんがVisitorとInterpreterは相互変換できるからどっちかに統一するべき

463 :デフォルトの名無しさん:2009/09/17(木) 12:13:30
性能はむしろ手書きのパーサのほうが出る。

手書きパーサが不利で、パーサジェネレータが有利なのは以下のような点。
・構文規則とアクションがすっきり分離させて記述できる
・LL(1) に収まらない文法を記述するためのテクニックに煩わされない
・規則をあれこれ変更するのが簡単

あと現代的なテクニックをかじりたいならパーサコンビネータライブラリとか使ってみたら?

464 :デフォルトの名無しさん:2009/09/17(木) 17:32:14
Scalaの勉強していてパーサコンビネータを触っていたんだけど、
電卓の次に思い浮かぶ使い道がコンパイラとかインタプリタになってしまう。
その間ぐらいで、手ごろな練習のネタって無いものかなぁ?

465 :デフォルトの名無しさん:2009/09/17(木) 18:49:33
>>464

発想の出発点を見直せば、その人なりのネタは見つけられると思うけどね。

自分だと、最近はRubyでツール作りする機会が多いから、そのコマンド引数
(サブコマンドやオプション指定の組み合わせ)を解釈するのにRaccを使うことがある。
他にも差分記述のある知識表現にPrologのDCGで簡単なDSL(ドメイン固有言語)を作ってみたり、
同じ発想で差分記述のできるテストデータ記述言語をRaccで記述したり。
極端な例だと、Webアプリのプロトタイプ開発で、画面遷移を制御するためにyaccを使い、
画面(フォーム)定義言語もyaccで実装するというマニアックな設計をしたことも。

要は「パーサ」イコール「言語処理系」という思い込みを捨て、単なる再帰的な
データ構造の処理に適した「道具」にすぎないと考えれるのがいいのではないかと思う。

466 :デフォルトの名無しさん:2009/09/17(木) 18:52:17
>>465
オレだったらそういう用途の処理用データはXMLやらYAMLやらで定義ちゃうだろうな。

467 :デフォルトの名無しさん:2009/09/17(木) 19:15:33
>>465
おまえUNIX板のyacc&lexスレの>>120だろ

468 :デフォルトの名無しさん:2009/09/17(木) 20:08:43
>>464
・ ラムダ式の使える関数電卓
・ 文字列がメールアドレスとして正しいかチェックするプログラム(コメントのネストにも対応)
・ 装飾をネストできる独自Wiki
・ テンプレートエンジン

469 :465:2009/09/17(木) 20:21:28
>>466

最初は同じ事を考えていたんだ。でも、自分一人で作る/使うぶんにはいいんだけど、
他のメンバが使う/使わせることを考えると、エラー処理(構文検査)も考えなけりゃならない。
XMLならDTDやRELAX-NG、YAMLならKawflyみたいなスキーマ定義が必要になる。
そこまでするくらいなら、汎用パーザを使うのがいいんじゃないかと、最終的に判断した。
パーザで適切な構文木さえ構築してしまえば、あとはVisitorパターンを駆使することで、
XMLでもYAMLでも(Latexでも....)出力形式の切り替えは簡単な処理で実現できるからね。

>>467

あたり

470 :デフォルトの名無しさん:2009/09/17(木) 21:00:25
>>465
なるほど、使い道としては面白いですね。ちょうど今、コマンドライン解析のあたりやってるし。
でも、勉強としてやってるんで、これが正解ってのがあるほうがいいです。
仕様も自分で考えるんだと、パースしやすいような仕様にしてしまうんで。

>>468
メールアドレスって、foo@examples.comだけじゃなく、"foo" <foo@examples.com>, …のほうですよね。
それはやりがいがありそうなネタですね。

471 :デフォルトの名無しさん:2009/09/17(木) 21:10:01
>>470
・PCRE(Perl 5 Compatible Regular Expression Library)の正規表現のパーズ。
・POSIX shellの文法のパーズ。



472 :デフォルトの名無しさん:2009/09/17(木) 23:33:28
>>462
Interpreterパターンって構文解析の為のパターンじゃないの?

473 :デフォルトの名無しさん:2009/09/17(木) 23:39:58
InterpreterはASTのノードに自分自身と子の評価を行う処理を直接埋め込むことで
ASTをそのまま実行するパターンだよ
あらかじめ構文解析を行ってASTを作っておく必要がある

474 :デフォルトの名無しさん:2009/09/19(土) 03:37:23
http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29

ウィキペディアには
Interpreter パターン = 構文解析のために、文法規則を反映するクラス構造を作る。
って書いてあるんだけど。

475 :デフォルトの名無しさん:2009/09/19(土) 04:51:05
デザインパターンとか大層なもんじゃないでしょ

476 :デフォルトの名無しさん:2009/09/19(土) 05:27:58
Interpreterパターンが構文解析のために利用されるのは正しい表現だと思われ。
あらかじめ構文規則に沿ってオブジェクトを配置する必要があるのは事実だけど、
それは構文解析とは別の話しだし、(yaccみたいな)パーザジェネレータも同じだから。(>>473)

最近はデザインパターンから入る若者が多いから、ごっちゃにして考えやすいけどね。
まあ、デーザインパターンなんて大層なもんじゃないという意見に同意するよ。(>>775)


477 :デフォルトの名無しさん:2009/09/19(土) 06:03:46
>>462=473=476?
君はたぶんいろいろと間違って理解してるからGOF本をしっかり読みなおした方がいいよ
確かにデザインパターンは大層なものじゃないとは思うが、間違った理解は周りの人を
混乱させてむしろ害悪だから

478 :デフォルトの名無しさん:2009/09/19(土) 06:12:44
>>477
具体的にドゾー

479 :デフォルトの名無しさん:2009/09/19(土) 06:44:13
>>478
>VisitorとInterpreterは相互変換できる
できない
VisitorとInterpreterでは全く目的が異なる

>InterpreterはASTのノードに自分自身と子の評価を行う処理を直接埋め込むことで
>ASTをそのまま実行するパターンだよ
処理を直接埋め込むこと、そのまま実行することは必須ではない
(GOF本「実装」欄の2.を参照)

>あらかじめ構文解析を行ってASTを作っておく必要がある
ASTの生成方法までは定義されていないが、Interpreterパターンと言った場合、
(ASTを生成する)Clientオブジェクトもパターンの構成要素に含めて考える方が一般的
(GOF本「構成要素」欄と「実装」欄の1.を参照)

480 :476,478:2009/09/19(土) 07:03:29
>>477
自分は>>462,473じゃないヨ

>>479
まったく、その通りだね

ところで、GOF本のアレをInterpreterパターンと呼ぶのはどう思うかな?>>all
自分にはインタプリタという言葉のニュアンスから違和感があるんだけど

と、スレらしい話題に戻してみる

481 :デフォルトの名無しさん:2009/09/19(土) 13:20:31
逆。Parsingにinterpreter patternってのは単純な場合のみ。
ASTインスタンスの生成を行うのは、interpreter patternの仕事だけど、
(ASTインスタンス生成は解釈の特殊な形態の一つ)
parsingそのものはInterpreter patternの仕事じゃない。
単純な例だと一体化しているので、混同しているケースが結構多い。
日本語版wikipediaの記述がその例。(これは古い英語版を元にしている)

GoFより
> The pattern doesn't address parsing. When the grammar is very complex,
> other techniques (such as a parser) are more appropriate.


482 :デフォルトの名無しさん:2009/09/19(土) 18:12:25
GOFの神格化進んでいるんだね。怖いね。

483 :デフォルトの名無しさん:2009/09/19(土) 18:24:39
必要以上に貶めている人がいるから
訂正してくれてるだけでしょ?

484 :デフォルトの名無しさん:2009/09/19(土) 20:17:37
ヤレヤレ

485 :デフォルトの名無しさん:2009/09/23(水) 08:13:49
形式言語と正規表現って別物ですか?
同じものですか?

486 :デフォルトの名無しさん:2009/09/23(水) 08:33:39
>>485

正規表現は形式言語の一種である、という解釈でだいたい合っていると思う。
C言語はプログラミング言語の一種である、と同じ解釈ね。
あと、そういう言い方をするなら、正規表現ではなく正規言語だろうね。

487 :デフォルトの名無しさん:2009/09/23(水) 08:48:28
正規表現と正規言語は別のものだが?

488 :デフォルトの名無しさん:2009/09/23(水) 09:02:34
正規表現と正規言語と正規文法はどういう関係ですか?
コンパイラの理論の基になっているのは生成文法なんですか?
もし、チョムスキーが生成文法を発表しなかった世界があったら
その世界で使われているコンパイラはどんな物だと思いますか?
COBOLとFORTRUNとlispですか?


489 :デフォルトの名無しさん:2009/09/23(水) 09:11:11
ちったあ自分で調べろ

490 :デフォルトの名無しさん:2009/09/23(水) 10:16:49
古い変な本しか手に入らないか
周囲に変なことを吹き込む人がいるか
釣りか

なんにせよ調べる気はあるまい

491 :デフォルトの名無しさん:2009/09/23(水) 10:20:38
それにしてもチョムスキーのこんな持ち上げ方って久々に見たw

492 :デフォルトの名無しさん:2009/09/23(水) 10:22:29
調べる=知ってる人に聞く
じゃないの?
本やネットってゴミ情報が多すぎて
知りたい情報にたどりつくまで
手間と時間がかかりすぎるからさ
知ってる人にズバリ答えてもらうのが一番なのよ

493 :デフォルトの名無しさん:2009/09/23(水) 10:36:03
チョムスキー理論の理解こそが自然言語処理実現の第一歩だぁー!!と
必死になって文献を読みあさっていた、過去の自分を思い出すw

494 :デフォルトの名無しさん:2009/09/23(水) 11:51:45
文字列が長すぎて
strlen()が'\0'にたどりつくまで
手間と時間がかかりすぎる
って話を思い出した

495 :デフォルトの名無しさん:2009/09/23(水) 15:01:14
こんなこと如きで他人に苦労させるなカス >488
自分で勉強するつもりが無いのならこんなスレ覗くなボケ
ttp://www.bing.com/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%A8%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E%E3%81%A8%E6%AD%A3%E8%A6%8F%E6%96%87%E6%B3%95&FORM=ADDLVD&src=
ttp://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%A8%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E%E3%81%A8%E6%AD%A3%E8%A6%8F%E6%96%87%E6%B3%95&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a


496 :デフォルトの名無しさん:2009/09/23(水) 15:05:34
と思ったが、最後のは少し興味あるな。
チョムスキーが発表しなくても、同様の概念(TMとか再帰とか翻訳とか形式体系とか)はあるから
結局は同じようなものに落ち着くような気がする。

497 :デフォルトの名無しさん:2009/09/23(水) 15:43:24
BNF自体はチョムスキーの発明でもないしな

498 :デフォルトの名無しさん:2009/09/23(水) 15:56:41
インド人だっけ?凄いよね。

499 :デフォルトの名無しさん:2009/09/23(水) 16:02:39
誰がインド人?

500 :デフォルトの名無しさん:2009/09/23(水) 16:06:52
っ ttp://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%83%8B%E3%83%8B

501 :デフォルトの名無しさん:2009/09/23(水) 17:21:39
大体が↓のような感じで構文解析までが行われると思うのですが、

ソースコード → 字句解析 → トークンリスト → 構文解析 → 構文木

トークンリストはトークンクラスのリストと表せますが、
構文木はどのような形になると思いますか?



502 :デフォルトの名無しさん:2009/09/23(水) 17:36:26
構文要素クラスの木構造

503 :デフォルトの名無しさん:2009/09/23(水) 17:38:26
開始記号クラスかな

504 :デフォルトの名無しさん:2009/09/23(水) 17:45:32
このあいだまでは「パニーニ」と表記してた気がするが、最近は「パーニニ」なのか。
昔インド人の先生に尋ねたら俺の耳にはパニニーと聞こえたが。

てかBNFはバッカス(と、本人はあまり乗り気でないようだがナウア)の功績だろ一応はやっぱ。

505 :デフォルトの名無しさん:2009/09/23(水) 20:01:10
インド人の発音は独特だから

506 :デフォルトの名無しさん:2009/09/24(木) 00:29:14
日本人の発音の方がはるかに独特です

507 :デフォルトの名無しさん:2009/09/24(木) 00:35:57
かもしれぬ
インド人と言っても様々だ
が、日本人がインド人の発音を聴き取るのは慣れないと無理
驚くというか途方に暮れるぞ

508 :デフォルトの名無しさん:2009/09/24(木) 01:41:42
詳しく!

509 :デフォルトの名無しさん:2009/09/24(木) 02:38:16
>>507
そこでインド人を右へ


510 :デフォルトの名無しさん:2009/09/24(木) 05:56:31
なるほど。たしかみてみよう

511 :デフォルトの名無しさん:2009/09/24(木) 14:00:01
確かめた結果、
ザンギュラのスーパーウリアッ上
でした

512 :デフォルトの名無しさん:2009/09/24(木) 14:23:33
ダトル・オブ・ぷよぷよ

513 :デフォルトの名無しさん:2009/09/25(金) 20:00:42
ゆとり教育は嘆かわしい。
中学生の息子の机に数学のノートが開いていた。
なんと、数式にビックリマークを付けて遊んでいた。
出てくる数字はほとんどが1桁の整数のかけ算。
しかも答が間違ってる。
小学校の九九の復習にもなってない。
本当に嘆かわしい...。

514 :デフォルトの名無しさん:2009/09/25(金) 20:16:35
>>513
ゆとり教育でなければ九九ができるようになるはずだという発想がすでにおかしい
人任せにしてないで、自分で教えてあげたら?
多分、どっかでつまずいてそのままになってるんだと思うよ。

515 :デフォルトの名無しさん:2009/09/25(金) 20:22:54
>>514
ネタにマジレス、カコワルイ。
ここは息子インタプリタが自然数の階乗をパースして計算していると考えるんだ。

516 :デフォルトの名無しさん:2009/09/25(金) 21:06:42
ネタだと気付かないところがすでにおかしい

517 :デフォルトの名無しさん:2009/09/25(金) 22:11:00
不思議なインド人に対抗するには
九九じゃなくて二五六二五六やらせるべき

518 :デフォルトの名無しさん:2009/09/25(金) 22:30:37
>>513を読んで想像すべきだった状況の例
3!×5!=720

519 :デフォルトの名無しさん:2009/09/25(金) 22:40:00
>>513って親がゆとり世代だった、ってオチ?

520 :デフォルトの名無しさん:2009/09/25(金) 22:40:49
階乗は習ってねーや

521 :デフォルトの名無しさん:2009/09/26(土) 00:53:30
「ジョークを解説するのはカエルを解剖するのと似ている。
解剖されたカエルには誰も興味を示さないし、カエルは死ぬ」

522 :デフォルトの名無しさん:2009/09/26(土) 01:15:17
なんかえらく主観的な格言だなぁ
説得力のある文体に騙されそうになるけど

523 :デフォルトの名無しさん:2009/09/26(土) 01:25:10
解剖したカエルは、フランス人スタッフがおいしく頂きました。

524 :デフォルトの名無しさん:2009/09/26(土) 08:36:52
最初からコンテキストもなにもなしにジョークを投下するやつが悪い

525 :デフォルトの名無しさん:2009/09/26(土) 23:45:56
antlrworksで正規表現の

[0-9]{1,16}

ってどうやって書けばいいの?

526 :デフォルトの名無しさん:2009/09/27(日) 04:32:51
日本ではコンパイラの研究ってあんまはやってないの?
有名な研究室ってどこ?

527 :デフォルトの名無しさん:2009/09/27(日) 09:31:33
>>526
コンパイラ site:ac.jp で検索してみるとか。

528 :デフォルトの名無しさん:2009/10/01(木) 23:19:37
タイガーブックの最新版ってどうよ?
今月末に出るけど

529 :デフォルトの名無しさん:2009/10/02(金) 20:43:42
どうよ?だと?
自分で買ってきて報告しろやヴぉけ

530 :デフォルトの名無しさん:2009/10/02(金) 22:48:49
無駄無駄
どうよ?厨はいつだって人から貰うだけ


531 :デフォルトの名無しさん:2009/10/03(土) 00:06:04
俺の上腕二頭筋どうよ?

532 :デフォルトの名無しさん:2009/10/03(土) 00:14:32
すごく・・・ぷよぷよです・・・

533 :デフォルトの名無しさん:2009/10/03(土) 05:55:58
タイガーブックがついに邦訳されて今月末に出版されるよ

534 :デフォルトの名無しさん:2009/10/03(土) 07:23:00
無駄無駄
されるよ?厨はいつだって人から貰うだけ

535 :デフォルトの名無しさん:2009/10/03(土) 12:42:47
preccsより腐ってない
フリーのプロトコルコンパイラ知りませんか?

536 :デフォルトの名無しさん:2009/10/03(土) 14:04:03
尻いりませんか?だと?
いいのかい?ホイホイ突いちまって

537 :デフォルトの名無しさん:2009/10/03(土) 14:39:57
>>535

preccsのドコが腐っていると感じたのかな?
自分は初見だったのでググってみて、CSPというかOccamの実装という印象を持った。
そのうえで、予想される「腐って」いそうな点をあげてみる。(実際には触っていないヨ)
・コンパイラの実装がバグだらけ
・マルチスレッディングに対応していない
・デバッグが難しい
・プロトコル記述(状態遷移)が直感的ではない
・メッセージ処理機能が不十分
・プロトコル定義の網羅性に欠ける

あと、このスレよりもネットワークプログラミングスレ向きな話題かも。
このスレだと「自分の好みに合ったコンパイラを作れ!」なレスが中心になってしまう気がする。

538 :デフォルトの名無しさん:2009/10/04(日) 04:03:23
実質パーサの話題に終始してるがな
コンパイラですらない
インタプリタでもない


539 :デフォルトの名無しさん:2009/10/04(日) 10:59:49
じゃ、話題の提供ヨロシク

540 :デフォルトの名無しさん:2009/10/05(月) 13:04:03
Pythonでコマンドを作って、
自作のスクリプトでそのコマンドを呼び出すという仕組みで処理系を構築してる。
すでにある程度動いてるんだが、
現状手動で作成してるコマンドの一覧をPythonのプログラム側からどうやって吐き出そうかなと考えているところ。
sed/awkあたりで簡単に切り貼りできるような形式を用意できるといいかなぁ。
できればコマンドのマニュアルも一緒に生成できるといいんだが。

現在固定になってるコマンド一覧は実際にはXMLファイルで、
コンパイラがデシリアライズの形で一括で読み込める仕組みにしている。
XMLを手作業で編集するのはしんどいので、シリアライズで書き出す簡単なプログラムを用意して、それを毎回手で編集してる。

541 :デフォルトの名無しさん:2009/10/05(月) 13:38:45
>>540
JavaDocみたいに定型のコメントを書くのはどうですか?

542 :デフォルトの名無しさん:2009/10/05(月) 14:02:58
pydoc

543 :デフォルトの名無しさん:2009/10/06(火) 12:51:07
実装には命令型言語より関数型言語の方が向いているのかな
Pugsが出てからずいぶん経つのにPerl6まだ出ない

544 :デフォルトの名無しさん:2009/10/06(火) 13:45:27
>>543
そんな漠然としたレベルの話だと、好みでとしかいいようがないんじゃ。
ただ、Haskellの論理的な記述能力は空恐ろしいものがあるな。
例えばYAMLパーサのリファレンス実装はHaskell製だ。
HTMLの仕様書用意されてはいるが仕様の詳細までは網羅されておらず、参考程度にしかならない。
で、ソースコードみてみたら、ほとんどBNF式そのまんま。
これをネイティブで解釈するんかHaskellは……。

545 :デフォルトの名無しさん:2009/10/06(火) 13:51:06
再帰下降パーザを書くのに関数型言語は合ってると思う
パーザ以外の部分は知らん

546 :デフォルトの名無しさん:2009/10/06(火) 22:35:37
Haskellは新しく演算子をユーザ定義できるからな。
優先順位を付けて。それが例えinfixでも。
出来る奴が書いたコードの記述力は破壊的。
Parser Combinatorの発明は、奴等ならではだろう。

547 :デフォルトの名無しさん:2009/10/06(火) 22:44:43
>>546
> Haskellは新しく演算子をユーザ定義できるからな。
> 優先順位を付けて。それが例えinfixでも。

それPrologでもできるよ。何十年も前から

548 :デフォルトの名無しさん:2009/10/06(火) 23:00:45
PrologのDCGはBNFそのものだしな。
単純にパーザ記述の容易さを比較するならPrologに軍配があがる。

549 :デフォルトの名無しさん:2009/10/07(水) 01:01:43
間を取ってLISPだな
そのままLISPの処理系速度で実行できるし

550 :デフォルトの名無しさん:2009/10/07(水) 06:15:44
RubyとHaskellがベスト

551 :デフォルトの名無しさん:2009/10/07(水) 07:25:05
noop

552 :デフォルトの名無しさん:2009/10/07(水) 07:28:15
Ocamlが至高
ほかは糞

553 :デフォルトの名無しさん:2009/10/07(水) 08:38:22
Ocamlなぁ。
こんどはOcamlでスクリプティングやってみるかなぁ。
静的型付言語の割りにコンパイラが賢いので
人間はあまり型を気にする必要がないというところがよさげだな。

554 :デフォルトの名無しさん:2009/10/07(水) 10:28:43
>>548
DCGはいいものだったけど、
元になっているPrologが独自すぎて流行らなかったな。
一時はちょっとややこしい構文解析はDCGの独壇場だったのに。

555 :デフォルトの名無しさん:2009/10/07(水) 13:25:28
>>554

スレ違いになるけど、Prologがブームだった頃「PrologはAI言語である」みたいな解釈の
説明が多かったため、AIブームの終焉と一緒にPrologへの関心も冷めてしまったように
感じてる。Prologなんて記号処理言語の一つで、「道具」にしかすぎないはずなのに。
DCGが自然言語研究の中から生まれたのは事実だけど、パーザ記述向けの「道具」として、
今でも有効に活用できるものだと思う。固定観念さえ捨てることができれば....。

とりあえず、Prologによるコンパイラ開発に興味を持った人向けに書籍を紹介する。
・Prologの技芸, L.Sterling&E.Sharpiro著, 共立出版
Prolog中級者向けの内容で、全体で557ページ、DCGには12ページ、コンパイラ(構文解析/
コード生成/アセンブラ)に関しては24ページが割り当てられている。

556 :デフォルトの名無しさん:2009/10/07(水) 13:50:43
昔、Prologで簡単なBASICインタプリタをちょこちょこっと作る話が
載ってるウェブページあったなぁ。

557 :デフォルトの名無しさん:2009/10/07(水) 18:58:11
プログラマならなんか成果物だして世の中の役に立て。


558 :デフォルトの名無しさん:2009/10/07(水) 23:58:17
>>557
スークリですね解ります。

559 :デフォルトの名無しさん:2009/10/08(木) 09:23:15
マ板でやれ

560 :デフォルトの名無しさん:2009/10/08(木) 09:24:40
OCaml使いの間では"O"の部分は使わないのが常識らしいな。

561 :デフォルトの名無しさん:2009/10/09(金) 11:08:27
OCamlさん 何してはるんですか

562 :デフォルトの名無しさん:2009/10/12(月) 19:10:26
DSLを設計するための良書ってないですかね?

563 :デフォルトの名無しさん:2009/10/12(月) 20:32:29
>>562

良書かどうかは分からないけど、とりあえず手持ちの書籍を紹介。
・lex & yacc, John R,Levine他共著, アスキー出版局(O'Reilly本)
この本ではCUI向けのメニュー生成言語、言い換えるとCUI向けメニュー生成処理に特化した
DSLの開発手法が紹介されている。 本全体が429ページで、そのうち33ページがDSL。

あるいは設計しようとしているDSLの適用分野(ドメイン)が明確になっていて、
それをここで提示できるのなら、その分野における類似したDSLを紹介したり、
その類似DSLに関する書籍を紹介したりすることができるかもしれない。

もし適用分野が明確ではなく、一般的なDSL設計技術を勉強したいという話であれば、
残念だけど「一般コンピュータ言語設計論」みたいな題名の抽象的で難解な書籍を
探すしかないと思う。自分は紹介できないや。

ただし、発想を変える事で参考になるやり方もある。
最近ではXMLで様々なデータやルールといった情報を表現することが
普通に行われていると思うけど、そのXMLで表現するタグ構成というのは、
目的とする分野に特化したDSLの一種であると考えることもできる。
だから「XML文書設計法」みたいな題名の書籍を読むことが、参考になるかもしれない。

# ほとんど参考にできるレスじゃなくてゴメソ
# あるいは、推薦図書/必読書のためのスレで質問してもいいのでは?

564 :デフォルトの名無しさん:2009/10/12(月) 20:42:01
>>562
いずれ書籍になる予定
http://martinfowler.com/dslwip/

565 :デフォルトの名無しさん:2009/10/12(月) 20:50:00
>>564
http://martinfowler.com/dslwip/
http://github.com/nealford/presentations
http://homepages.cwi.nl/~arie/papers/dslbib/

どうもっすこの辺ちょっと読んできます。


566 :563:2009/10/13(火) 10:06:24
うーみゅ、>>562が期待していたのはMartin Fowler氏の定義した
DSLという用語だったのね。このスレでの質問だったから、
てっきりパーザでミニ言語を作りたいのだと思い込んでしまったぜ。
漏れは釣られたのか?....orz


567 :デフォルトの名無しさん:2009/10/13(火) 10:18:50
>>566
何を言い出すのだお前は?

568 :デフォルトの名無しさん:2009/10/13(火) 10:19:51
>>563
baka

569 :デフォルトの名無しさん:2009/10/13(火) 10:44:07
http://ja.wikipedia.org/wiki/DSL

570 :デフォルトの名無しさん:2009/10/13(火) 17:52:37
>>566
internal DSLとexternal DSLと呼び分けるのが一般的かと

571 :デフォルトの名無しさん:2009/10/14(水) 19:30:41
>>563 はきちんと説明して偉いと思うよ。
マーチン・ファウラーがいうDSLを実装するにも、
lex&yaccは必要になることがある。

572 :デフォルトの名無しさん:2009/10/14(水) 19:39:16
本人乙

573 :デフォルトの名無しさん:2009/10/14(水) 21:16:50
内部DSLだとlex yaccの出番なくね?

574 :デフォルトの名無しさん:2009/10/14(水) 23:12:14
DSLでも表記はS式 or 逆ポーランドで良いと思うんだけどな。
俺言語でS式&逆ポーランド&三項演算子というのをやったことあるけど、なかなか良い感じだった。


575 :デフォルトの名無しさん:2009/10/14(水) 23:26:02
x^2 + 3 * x + 4



(x 2 ^ 3 x * + 4 +)

あなたはどっちが好きですか



576 :デフォルトの名無しさん:2009/10/15(木) 00:09:22
DSLぐらいだったら二項演算子無しでも良いんじゃね?

俺言語だとこんな感じかね
x 2 ..pow 3 x ..multi ..plus 4 ..plus


577 :デフォルトの名無しさん:2009/10/15(木) 00:15:34
想定するDSLのプログラマによるよね。

自分用・ギーク向け・趣味用途ならS式でも逆ポーランドでもいいけど
スーツ/エンドユーザー向け・パッケージソフトだったりすると流石に無謀だろ。

578 :デフォルトの名無しさん:2009/10/15(木) 04:29:11
>>575
(x + 3) * x + 4

579 :デフォルトの名無しさん:2009/10/15(木) 04:30:18
x 3 + x * 4 +

580 :デフォルトの名無しさん:2009/10/15(木) 20:27:14
>>576
引数の数を演算子の前のドットの数で表してるんですね。
それって >>576 氏の発明ですか?それともそういった処理系がありますか?

581 :デフォルトの名無しさん:2009/10/15(木) 21:52:05
fortran

582 :デフォルトの名無しさん:2009/10/16(金) 00:18:11
後ろに置いたピリオドで、スタックに積んだ返した数を表すのはどうだろう
前後逆か?
.*で不定長引数とか

583 :デフォルトの名無しさん:2009/10/16(金) 00:19:40
何のためのスタックかわからん

584 :576:2009/10/16(金) 01:17:54
>580
俺の発案。forth系なんて流行ってないから誰もこんなこと考えないって。
コロンも活用すればそこそこ大きな引数でも使えるから実用的だよ。
.one ..two .:three ..:four

こういうのもWordレベルで一意になるから解析が楽チン。
4 3 2 1 ..sum // 3
4 3 2 1 .:sum // 6
4 3 2 1 ..:sum //10


585 :576:2009/10/16(金) 01:27:49
>582
それは考えた。Wordレベルで一意になるから良さげだった。
…………普通はデフォルトの戻り値で十分なので後ろピリオドは要らないけど。
他にもこんなことを実装したんだけど、プロセス実行をどうするか考えているので実装は進んでない。

..func //デフォルトの戻り値
..func: //戻り値2つ
..func:. //戻り値3つ
..func[] //戻り値無し(廃棄)
..func[0] //配列型戻り値(全体)
..func[1] //配列型戻り値の1番目を返す
..func[-1] //引数を返す

586 :デフォルトの名無しさん:2009/10/16(金) 02:04:29
>>584
あんまり突っ込むのも無粋だが、
.2sum とか .8sum とかの方が
見やすくて短くて解析も楽な気がしねぇ?


587 :576:2009/10/16(金) 02:23:54
その辺りは好みですな。
個人的にはwordの中に数字が入るのが嫌なんでね…………

588 :デフォルトの名無しさん:2009/10/16(金) 08:36:34
言語は仕様考えて、加減乗除ライブラリと、1文字出力ルーチン作って
階乗とかfib関数作るところまでで、たいてい飽きるの俺法則

589 :デフォルトの名無しさん:2009/10/16(金) 14:07:02
>>584
そうでしたか。 >>576 氏は天才だと思います。
FORTHみたいな言語を自作するときは参考にさせてもらいます。

590 :デフォルトの名無しさん:2009/10/16(金) 18:34:44
プレフィックスの数字で長さとかを決めるのって、
昔のFORTRANの文字列(5HHELLO とか)みたいでなんかヤだなぁ。

Verilogのビット幅指定がそうなんだけど。

591 :デフォルトの名無しさん:2009/10/17(土) 12:19:17
俺、中学の頃、逆ポーランド記法のこと何て、
聞いたことも、無かったけど、自分で、思いついてた、、、

592 :デフォルトの名無しさん:2009/10/17(土) 13:23:53
逆ポーランド記法は日本語に似ているから、日本人にとってはある意味自然なんだよな。

593 :デフォルトの名無しさん:2009/10/17(土) 13:55:45
惜しいかな
変なことを考える中学生に今少し学問があれば

594 :デフォルトの名無しさん:2009/10/17(土) 14:01:40
>>591
「お前が思いつくようなことは、すでに誰かが思いついてる」

ベッコアメの社長が親父に言われたんだったかな?
大昔に見た記事だから忘れたけど

595 :デフォルトの名無しさん:2009/10/17(土) 15:25:19
それなりの環境にいれば思いつくことは思いつく。
しかし思いついたことを実現まで持っていく奴はなかなかいなくて、大抵
思いついた数年後に世の中のどこかからそれを実現させた会社がでてくる。

596 :デフォルトの名無しさん:2009/10/18(日) 00:19:13
つ LISP

597 :デフォルトの名無しさん:2009/10/18(日) 11:29:40
>>592
2から3を引く
3を2から引く

どちらも日本語として自然ですが、RPNとしてはどちらかが間違いですよね?
一見そう見えるというだけだと思います。

598 :デフォルトの名無しさん:2009/10/18(日) 11:37:48
>>597
2から3を引く --> -1
3を2から引く --> 1

どちらもRPNとして正しいと思うが?

599 :デフォルトの名無しさん:2009/10/18(日) 11:38:57
日本人は中学で語順で格を示す英語学ぶのだから、
それは機能語である助詞の機能によって、
語順が変えられるのだとすぐ気づくだろう。

600 :デフォルトの名無しさん:2009/10/18(日) 12:07:45
>>598
おい

601 :デフォルトの名無しさん:2009/10/18(日) 12:11:40
>>597
>3を2から引く

これは日本語として自然か?
漏れにはえらく不自然に見えるが....。

逆にRPN(Forth系言語)なら "から" を減算元属性付加、"を" を減算先属性付加という
ワードであると考え、ワード "引く" ではスタック上の属性値を参照することで、
演算対象値を決定できる。これなら3と2が逆でもオケー。以下は例。

3  :スタックに3をPUSH
を  :スタックの先頭値に演算先属性を付加
2  :スタックに2をPUSH
から :スタックの先頭値に演算元属性を付加
引く :スタックから値を2個POPし、減算子(演算元値 - 演算先値)を評価して、結果をPUSH

602 :598:2009/10/18(日) 12:13:11
>>598のカキコは取消

603 :デフォルトの名無しさん:2009/10/18(日) 16:24:14
そういう風に、本来のRPNにないものを導入しないとダメじゃん、って話。

604 :デフォルトの名無しさん:2009/10/18(日) 21:56:46
シューティングで弾幕とか敵の動きをスクリプト化したくて
Java上で動くスクリプトエンジンを作ろうと思ったのですが、
・・何から始めたらいいんでしょうか。
スクリプトに使う言語はLuaにしようと思っています。

605 :デフォルトの名無しさん:2009/10/18(日) 22:23:29
Java上なのにLuaなのかよ。

606 :デフォルトの名無しさん:2009/10/18(日) 22:59:00
Jua

607 :デフォルトの名無しさん:2009/10/18(日) 23:01:28
>597
おいおいおい、日本語が逆ポーランドの構造しか持っていないなんて言ってないぜ。
日本語の特徴の一つ(述語を中心とした後置型)が逆ポーランドに似ているということだよ。

〜して、〜して、〜して、……。といった感じでだらだら続けられるのも日本語の特徴だよな。
そういや、各国の言葉の特徴をイラストにしたのがあったな。日本は渦巻だっけ?


608 :デフォルトの名無しさん:2009/10/19(月) 10:57:43
> といった感じでだらだら続けられるのも日本語の特徴だよな。

逆ポーランド記法から夢が膨らむネット言語学者乙

英語でもできるし、日本語よりもっと簡単なぐらいだ。
新聞などではさすがに極端なのはないが
小説でも眺めてみるとよい。
見るからに馬鹿そうな著者を選ぶのがポイント。

609 :デフォルトの名無しさん:2009/10/19(月) 11:05:22
逆ポーランド記法を使えば、自然言語処理の能力がアップするに違いない!

610 :デフォルトの名無しさん:2009/10/19(月) 12:57:18
つ「日本語の語順と逆ポーランド記法」「和文の語順と逆ポーランド記法」どちらも水谷

611 :デフォルトの名無しさん:2009/10/20(火) 02:04:38
どんなの? >608
日本語よりも柔軟に組めるの?


612 :デフォルトの名無しさん:2009/10/24(土) 13:47:52
緩いだけだろ
日本語で曖昧さがなく読みやすい長い文を書くのには
読点の使い方や語順を工夫したりとか技術がいる

613 :デフォルトの名無しさん:2009/10/24(土) 15:33:34
つまり、時代はラテン語か

614 :デフォルトの名無しさん:2009/10/24(土) 20:47:50
>>613
西洋人にとってのラテン語にあたるものが日本で学ぶ漢文なのよ(割とマジで)


615 :デフォルトの名無しさん:2009/10/24(土) 20:47:56
古代ギリシャ語でおk


616 :デフォルトの名無しさん:2009/10/24(土) 23:22:44
>>614
いや漢文じゃなくて古文の方だろjk

617 :デフォルトの名無しさん:2009/10/24(土) 23:32:57
古文に相当する授業ではたとえばイギリス人ならシェークスピアとか読む。


618 :デフォルトの名無しさん:2009/10/24(土) 23:46:08
字句解析を手書きするのって難しい・・

619 :デフォルトの名無しさん:2009/10/25(日) 08:19:24
>>616
漢文です。ていうか常識ないなおまい

620 :デフォルトの名無しさん:2009/10/25(日) 12:52:17
古文だろ。

621 :デフォルトの名無しさん:2009/10/25(日) 13:10:32
南部ヨーロッパだと昔使っていた言語だけど、
北部ヨーロッパだと別の民族の言葉だな。

622 :デフォルトの名無しさん:2009/11/02(月) 20:00:31
「から引く」と「を引く」の二つの演算子つくればいいだけじゃん。とカメレス。
どっちもドンラーポとしては正常だよね。

623 :デフォルトの名無しさん:2009/11/03(火) 12:31:29
そこは語尾屈折で

624 :デフォルトの名無しさん:2009/11/06(金) 11:41:09
Rubyで俺DSLを作りたいのですが、パーサーの作り方を解説したURLはないでしょうか


625 :デフォルトの名無しさん:2009/11/06(金) 12:25:59
ウェブページはあるかもしれんが、URLだけで解説するのは無理だな。

冗談はともかくとして、とりあえず Racc 使い方、で検索するとか。
先頭に出てくるページは、今なんか落ちてるようだが。

ていうか言語内DSLじゃダメなの?

626 :624:2009/11/06(金) 13:27:03
検索しましたがraccで良いような気がします(合ってますか?)
”Rubyを256倍使うための本 無道編”というraccの解説本がありましたが絶版でした。
どこかに良い資料はないでしょうか。
最終的には俺言語、俺コンパイラ、俺VMが作りたいです。



627 :デフォルトの名無しさん:2009/11/06(金) 13:44:05
>>626
ttp://www.bk1.jp/product/01992393

そういやANTLRの人がこんな本出すね
Language Implementation Patterns: Create Your Own Domain-Specific
and General Programming Languages
ttp://pragprog.com/titles/tpdsl/language-implementation-patterns

628 :デフォルトの名無しさん:2009/11/06(金) 14:10:12
>>626
ネットで見つかる資料でとりあえずいいと思うんだけど。

629 :デフォルトの名無しさん:2009/11/06(金) 14:36:41
俺程度の脳みそでは下記のサイトが役に立った
早く2部を作ってくれ。

KENJIの独り言 ttp://www.ne.jp/asahi/kenji/pda/

630 :デフォルトの名無しさん:2009/11/06(金) 15:39:48
それ、ざっと見たけど、まともに構文解析してない気がする。

...ゲームスクリプトエンジンとして、インタプリタがセーブ・ロードをサポートする所の考察は面白いが。

アセンブラのような文法(ベタッとした、入れ子になった構造がない言語)なら、
それでも構わないけど、どうやら if や式に現れる入れ子構造をどうやって処理したら
いいか、わからなくって手詰まりになっちゃったんじゃないかな?

> もし、複雑な物を使いたい場合、
> スクリプトコンパイラを使うに乗っている拙作の acc.exe を使うか、lexとyaccで作った方が良いと思います。

と本人が言ってるように、yaccも使わないし、再帰降下パーザを手で書くわけでもなく、
シンプルに済ませたいなら、if や while なんかの入れ子なんぞもっての他、
式も (1 + 2) * (3 + 4) なんて複雑な式はきっぱりあきらめる、と。
それくらい割りきらないとダメっつーか。

まぁ昔のFORTRANや、BASICインタプリタは、なんだかんだのテクニックを使って、
そういうのを実装してたわけなんだけどさ。

631 :デフォルトの名無しさん:2009/11/06(金) 16:43:44
現実に使っていると思われるスクリプトコードの一例がブログに載っているが、そこの一部で説明されているものと大差ないんだな。

変数名を(固定プリフィクス+数字)の形でしか表せないように見える。
管理するの大変そうだ。

632 :デフォルトの名無しさん:2009/11/06(金) 17:29:15
C言語と同等の機能の#define、
MASMライクな#macroの2種類があり、もちろん様々な条件コンパイルも出来、
最終的にプリプロセッサは、式(逆ポーランド)と
DD,DW,DB,stringにスクリプトを解析してコンパイラに渡す。
よって、プリプロセッサの大きさに比べてコンパイラの大きさは小さい。
そして強力な文字置換により、文字セットもプリプロセッサ時、コンパイル時、実行時の3段階で解決される。

本人曰く、
21年プログラマやってて、13年同じシステムを使ってるって
と書かれてるから、さすがにそんなチープな物じゃないんじゃない?
しかし、カナ入力なんてじじいかよw



633 :デフォルトの名無しさん:2009/11/06(金) 17:33:36
ブログの回答で初心者にドラゴンブックと中田の本を紹介してるw

634 :デフォルトの名無しさん:2009/11/06(金) 18:10:46
誰か特攻しやがったw

635 :デフォルトの名無しさん:2009/11/06(金) 18:25:09
またおまえらかw

636 :デフォルトの名無しさん:2009/11/06(金) 18:55:05
> 変数名を(固定プリフィクス+数字)の形でしか表せないように見える。
> 管理するの大変そうだ。

アルファベット2文字とかそういう制限ならわかるけど、
わざわざそんな制限つけるとか考え辛いし、そういう名前で変数を管理する
世界にいる、ないしそういう環境で学んだ人ってことなんじゃないかな?

ドラゴンブックと中田先生の本(どれ? 厚い奴薄い奴ペーパーバックの奴と
いろいろあるけど)って、結構わかってるじゃないかw
一昔前なら市販品だったようなレベルのCコンパイラだって書けるぞ。

つまり >>629 のコンテンツは覚醒前に書いたっつーことかね。
ぜひ今の知識とノウハウを注ぎ込んで書き直していただきたい。

masmのマクロって俺よく知らないんだよな。構造化アセンブラみたいな記述が
できるようになるマクロセットを作れたりとか結構すごいらしいんだけど。

637 :デフォルトの名無しさん:2009/11/06(金) 19:45:38
変数名は英数文字で表現できます。マルチバイトでは表現できません。
メッセージ命令の中でもレジスタ間接などを使って計算結果やストリング配列の表示も出来ます
メッセージ中に直接式を入れることも出来ます。

if 式 elseif 式 else end / while 式 end / do while 式 / for 式;式;式 end などが記述出来ます
これらは全てプリプロセス時に、#amacroでifn_goto 式,label / if_goto 式,label と goto labelに分解されます。
式は代入式と評価式の区別は付けません。それとポインター式があります。
式はC言語と同等の物だと思ってください。演算子の優先順位も合わせてます。

記述性はVB並と思ってください。それに強力なマクロと強力な置換が追加されていて、
それらを使って、windows apiを呼び出すようになっています。

逆に言うと、強力なマクロと強力な置換を使い、システムをラッパーしなければ
最低限のゲームシステムの支援(文字表示やCG表示)しかなく
windows apiやcopyrect命令などの呼び出しが必用になり、
ゲームシステムとしては使い物になりません。

式関連は最適化もしています。

コンパイラ自体は以上の実装なので、
ウチで作った携帯電話用のゲームシステム等ともマクロを変えて併用しています。


638 :デフォルトの名無しさん:2009/11/06(金) 19:48:09
以下がendマクロの実装例です

#amacro end( d0 )(local0,local1,localn,localt,localcase)
;
; end ( while,do,for,switch,if )
;
#getnum localt 2
#getnum localn 3
#subnumsp 3

#define local1 "f_{localn}"
#unstr local1


#if (localt==10) ; while
#define local0 "b_{localn}"
#unstr local0

goto local0
local1:


#elseif (localt==11) ; do
#define local0 "b_{localn}"
#unstr local0

if_goto local0,d0
local1:

639 :デフォルトの名無しさん:2009/11/06(金) 19:49:13
#elseif (localt==12) ; for
#define local0 "b_{localn}"
#unstr local0

goto local0
local1:


#elseif (localt==13) ; switch
#popnum localcase
#substrsp 1

#define local0 "case_{localn}_{localcase}"
#unstr local0

local0:
local1:




640 :デフォルトの名無しさん:2009/11/06(金) 19:50:27
#elseif (localt==14) ; if
#popnum localcase

#define local0 "if_{localn}_{localcase}"
#unstr local0

local0:
local1:

#else
#error end文の対応が異常です
#endif

#endm

641 :デフォルトの名無しさん:2009/11/06(金) 19:55:12
笑ってすみませんでした。
ttp://www.ne.jp/asahi/kenji/pda/
の2部以上の物を作っているみたい。

マクロで言語を作るのって、意味あるんかい
と思ったら、携帯電話へも流用してるのね。

面白いアプローチだ。

642 :デフォルトの名無しさん:2009/11/06(金) 20:02:19
LispやSchemeはマクロのお化け
複雑な構文をマクロに委ねるってアプローチはありだと思うけど
括弧はイヤだ

643 :デフォルトの名無しさん:2009/11/06(金) 20:05:24
>>636
> ドラゴンブックと中田先生の本(どれ? 厚い奴薄い奴ペーパーバックの奴と
> いろいろあるけど)って、結構わかってるじゃないかw
> 一昔前なら市販品だったようなレベルのCコンパイラだって書けるぞ。

かなり古くさいスタイルの仕様、実装になってしまっていることと、
概論で終わっているような本を参考文献に挙げることは、対応していると思う。



644 :デフォルトの名無しさん:2009/11/06(金) 20:06:36
何をやってるかさっぱりわからない。
みんな理解できるのか?
だったとしたら、みんなが普通で俺がバカと言うことになるw

645 :デフォルトの名無しさん:2009/11/06(金) 20:12:30
>>642
ほう、そうなのか。
しかしこの仕様なら、リンカさえ作れば色々なCPUの実行型を作れて面白そうだな。

>>643
関数型言語みたいだね。現代のoopには対応できないのかね。
まーエロゲのスクリプトみたいだからこれでもオーバースペックだよな。

646 :デフォルトの名無しさん:2009/11/06(金) 20:16:26
end命令1個作るのにわざわざこんなに記述するのは嫌だな。
中間スクリプターは地獄だな。
多分本人が作ってるんだろうけど。

647 :デフォルトの名無しさん:2009/11/06(金) 20:31:07
逆にマクロさえ作ればいくらでも言語を拡張出来る
確かにlisp的だ

648 :デフォルトの名無しさん:2009/11/06(金) 20:46:57
lispなめんな

649 :デフォルトの名無しさん:2009/11/06(金) 20:56:54
>>643
の言うとおりoopではない。
言語仕様としては古くさいのでは?
しかし、ゲームのシナリオを入力するだけの物にoopは必要ない。
携帯電話のゲームにも流用しているみたいだから
この人の場合は>>643の言うことは見当外れで>>647の言うことが正しい。

650 :デフォルトの名無しさん:2009/11/06(金) 20:58:15
>>648
気に障ったか、ならば言い換えよう
マク…モゴモゴ テンプレートさえ作ればいくらでもメタ言語を拡張出来る
確かにC++的だ

…?

651 :デフォルトの名無しさん:2009/11/06(金) 21:07:58
俺には作れないな。

17才からエロゲプログラマーか。
俺がやったゲーム、何本か作ってるw

652 :デフォルトの名無しさん:2009/11/06(金) 21:10:04
コンパイラの理論だけじゃ関数型言語はわからんよ

653 :デフォルトの名無しさん:2009/11/06(金) 21:38:13
>>649
>>643にはoopじゃないから古くさいとは書いてないが?

654 :デフォルトの名無しさん:2009/11/06(金) 21:40:32
>>653
649じゃないけどさ、
じゃあ何が古くさいの?
アンチドラゴンブック派?

655 :デフォルトの名無しさん:2009/11/06(金) 21:42:43
ドラゴンブックが古くさいとも書いてないようだが…

656 :デフォルトの名無しさん:2009/11/06(金) 21:45:43
>>653
>>655
アンタの文章は何を言いたいのかさっぱり解らんのよ。

657 :デフォルトの名無しさん:2009/11/06(金) 22:00:23
>>643
>>655
>>かなり古くさいスタイルの仕様、実装になってしまっていることと、
>>概論で終わっているような本を参考文献に挙げることは、対応していると思う。
仕様と実装が古い、そして参考文献が対応してるって書いてあるから、
643はドラゴンブックを古いと思っていることは拙い文章だけど解る。

658 :デフォルトの名無しさん:2009/11/06(金) 22:07:16
おちつけ。
>>637はエロゲや携帯電話のゲーム用のスクリプトだぞ。
それにしては強力だし妥当な言語仕様だと思うぞ。

659 :デフォルトの名無しさん:2009/11/06(金) 22:35:14
C言語にMASMの強力なマクロが使えればいいと思っていたが、
実際にやる奴が居たなんて…

660 :デフォルトの名無しさん:2009/11/06(金) 23:08:03
面白そうな言語だね。
マクロの全容とサンプルソースを見てみたいね。

661 :デフォルトの名無しさん:2009/11/07(土) 02:32:06
中田先生の本の第2版が出るらしいよ

662 :デフォルトの名無しさん:2009/11/07(土) 02:48:16
save,loadがバグfix時の文章追加でずれるのか。
プロはそんなところまで考えないといけないのか。
大変だな。

663 :デフォルトの名無しさん:2009/11/07(土) 05:55:04
なんだか面白い話になってるね。
メイドゲーの始祖の殻の中の小鳥のプロデューサーでありプログラマのKENJI氏か。
年下だけどオレがこの道に入った元凶の1人だ。音楽プログラムが凄い人だ。

こうなったらシステムを公開して欲しいって言ったら、罰が当たるよね。
過去に関わったタイトルも100以上で、オレが買ったのも10は下らない。
天才っているもんだね。

CG,WAV圧縮もオリジナル、それら全てにMAKE内蔵って事は
100本以上というタイトルを考と公開されているKMAKEと言うのを見てみれば分かるが高性能。

DOSもK-DOSとか言う物がゲームに入ってて、さらにUMBメモリツールのUMBCNFGの作者。
うーん、システムを公開して欲しい。

>>661
2版が出るんですか。1版を持っている自分は買わないですが、
立ち読みはしてみたいですね。
中田先生はいつまでたってもエネルギッシュですね。凄い!

664 :デフォルトの名無しさん:2009/11/07(土) 10:19:34
>>652
確かに関数型言語の実装のしかたがわかる文献となると、まだ論文とかが頼りかなぁ。
Tiger Book の訳本が出るけど、あれにもないんだっけ?

>>662
ベタデータでセーブするかねぇ?
ハッシュをJSONみたいな形式でセーブするとかすればロバストになると思うが。

確かにコンティニュエーションとかコアダンプを丸ごと保存してプロセスを停止・再開
という手段も世の中にはあるが。

Lispのマクロは、プリミティブとしてリスト構造を切った貼ったできる(List processor だけに)。
ありがちな、文字列レベル+α程度の編集能力しかないマクロと一緒にしちゃいかん。

2版が出る、って、中田先生のどの本よ。
厚い最適化の本?

> if 式 elseif 式 else end / while 式 end / do while 式 / for 式;式;式 end などが記述出来ます

それら自身は<文>なんだよね。
詳細を埋めると、
<文> : if <式> <文> elseif <式> <文> else <文> end / while <式> <文> end /
  do <文> while <式> / for <式>;<式>;<式> <文> end
ってことでいいのかな?

665 :デフォルトの名無しさん:2009/11/07(土) 10:50:01
>>651
>>663
俺がやったエロゲも作ってたw
メモリツールも使ってた。同一人物だったとはね。

>>664
あの分厚い最適化の本は2版が出てもいらんわ。
まだ最初の奴、読み終わってないからなw
中田が監修した本の2版なら絶対買わない。

>それら自身は<文>なんだよね。
>詳細を埋めると、
ブログを見る限りだと文の区切りは改行臭い。
ネストできない事はさすがに考えられないからそれで正しいと思う。

666 :デフォルトの名無しさん:2009/11/07(土) 10:54:39
>>664
関数型言語実装本は何冊も出てるよ。訳本がないだけで。


667 :デフォルトの名無しさん:2009/11/07(土) 10:57:23
どちらにしろ訳者が糞だとダメ本になるから英語版を買った方がお財布にも優しい。

668 :デフォルトの名無しさん:2009/11/07(土) 12:32:45
MinCamlならコンパイラの作者は日本人だから、解説文書は日本語が中心だよ。
後、東大やJAISTの講義で使われているから、その講義資料や学生の個人HPを漁るもよし。
もしも英語が読めれるなら、ググるといくらでも論文は見つかるんだけどね。
まったくインターネット万歳、いい時代になったもんだと思う。

669 :デフォルトの名無しさん:2009/11/07(土) 13:15:54
公開は断られたね。残念。

670 :デフォルトの名無しさん:2009/11/07(土) 13:17:41
未記入様。
makeを内蔵したのは、
別exeにするとどうしても読み込みのオーバーヘッドが無視できなくなるからです。
マスターアップの時にはデーターが完成するのが当日とか当たり前にあります。
自分のシナリオコンパイルは1fileで1秒前後、自分のwavファイルで0.1秒前後です。
特にwavファイルは最後に入ってくることが多いので、wav圧縮は0.1秒前後のため、
外部makeを呼び出していると1万fileだと相当なオーバーヘッダがつきます。
ですので内蔵しております。oggだとこうはいきませんよね。
1万fileで外部makeだと少なくとも5時間は掛かります


671 :デフォルトの名無しさん:2009/11/07(土) 19:00:35
上で既出だけど

中田先生のコンパイラの構成と最適化第2版が20日に出版
http://www.asakura.co.jp/books/isbn/978-4-254-12177-3/

672 :デフォルトの名無しさん:2009/11/07(土) 19:09:28
KMAKEってのが気になって見てみたけど、
依存型じゃなくって単体ファイルの比較なのね。

たしかにWAVの圧縮には依存型じゃない方が良いと思う。
MAKERだとWAVFILEを2ヵ所に記述しないといけないからね。

マクロはMAKERとほぼ同じだね。
この仕様でフルアセンブラなんて凄いね。
DISKへスワップ機能を入れたりUMBCNFGと言い、
MAKE時のFREEMEMORYをよっぽど空けたかったんだろうね。

673 :デフォルトの名無しさん:2009/11/07(土) 19:22:23
>>671
1版を持って無いから買いたい。しかし高いな。

>>672
makeはさすがにスレチ。自重してね。

674 :デフォルトの名無しさん:2009/11/07(土) 20:55:50
素朴な疑問なんだが、makeって何のことを言ってるんだ?
普通makeといったらMakefileを動かす実行プログラムのことを言うと思うんだが。

675 :デフォルトの名無しさん:2009/11/07(土) 21:16:58
>普通makeといったらMakefileを動かす実行プログラムのことを言うと思うんだが。
それでokだと思うよ。

kmakeはmakefileを動かすプログラムみたいだね。
それをスクリプトコンパイラやwav圧縮に統合してるみたいだ。
面白いアプローチだし、0.1秒の速度を万単位のファイルの圧縮に使って
マスターアップの時間を稼いでるみたいだね。

しかし、エロゲーってwavファイルがマスターアップの直前に来るのか。
少しでもスピードを稼ぎたいのは分かるが、
もっと余裕を持ったスケジュールで作れない物なのかね。

676 :デフォルトの名無しさん:2009/11/07(土) 22:01:09
>しかし、エロゲーってwavファイルがマスターアップの直前に来るのか。
ねーよ。
収録完了後2日〜1週間後が納期。Waveでもoggでも注文した形式で作ってくれるよ。
よっぽどアレなスケジュール組んでるんじゃね?

スレの内容に即したことをいうなら、Advの演出みたいなやたらと巨大な量になるスクリプトなら、
マクロで計算式を埋め込むことなんかよりも、むしろ計算式をスクリプトから外に出してしまうことをオレなら考えるな。

677 :デフォルトの名無しさん:2009/11/08(日) 01:28:13
KENJI氏の所は今年6本だからね。しかも延期は今のところ2本も無いみたい。
ブログ見ても書き方が簡素な演出方法と細かい演出方法を用意している、
よっぽどタイトなスケジュールなんだろう

a)1行でロードと表示をする
;Bキャラを左にCキャラを右に表示
ld_cg1 h00bw00,h00cw00
;BキャラとCキャラを左右に動かし、間にAキャラ出現
ld_cg1m h00bw00,h00aw00,h00cw00
;BキャラとCキャラはその位置のままでAキャラを消す
ld_cg1 h00bw00,cls0,h00cw00


b)ロードと表示をわける
;Bキャラを0番レイヤーにロードし、立ち位置を左(0-4のうち1)にし、表示優先順位を最低(0)にする。
ld_layer 0,h00bw00,1,0
;Cキャラを1番レイヤーにロードし、立ち位置を左(0-4のうち3)にし、表示優先順位を1にする。
ld_layer 1,h00Cw00,3,1
;ロードしたBキャラとCキャラをフェードインで表示する
putcg 1


678 :デフォルトの名無しさん:2009/11/08(日) 01:29:21
;Bキャラをより左(0-4のうち0)に移動させる
move h00b,0
;Cキャラをより右(0-4のうち4)に移動させる
move h00c,4
;Aキャラを2番レイヤーにロードし、立ち位置を真ん中(0-4のうち2)にし、表示優先順位を2(一番手前)にする。
ld_layer 2,h00aw00,2,2
;BキャラとCキャラを左右に動かし、間にAキャラ出現
putcg 1

;Aキャラを2番レイヤーにロードし、立ち位置を真ん中(0-4のうち2)にし、表示優先順位を2(一番手前)にする。
ld_layer 2,cls0,2,2
;BキャラとCキャラはその位置のままでAキャラを消す
putcg 1


679 :デフォルトの名無しさん:2009/11/08(日) 01:31:04
誤)KENJI氏の所は今年6本だからね。しかも延期は今のところ2本も無いみたい。
正)KENJI氏の所は今年6本だからね。しかも延期は今のところ1本も無いみたい。

680 :デフォルトの名無しさん:2009/11/08(日) 01:46:26
どうやらバグfixも出てないようだな。
破綻してるスケジュールじゃなくて
スクリプトの簡素化とwav納期の短縮でこなしてる。
マクロを使いまくって、バグを出にくくする体制にしてるんだろう。

681 :デフォルトの名無しさん:2009/11/08(日) 02:02:55
マクロ自体にバグが入ると酷い事になるけどな

682 :デフォルトの名無しさん:2009/11/08(日) 02:40:02
100本以上、エロゲを作ってるんだから大丈夫だろ。

久々にエロゲ板をみてみたら規制で大変なことになってるみたいだな。

683 :デフォルトの名無しさん:2009/11/08(日) 03:20:56
しかし面白そうな言語だ。
全容をみてみたい。

684 :デフォルトの名無しさん:2009/11/08(日) 05:51:46
>>672
FREEMEMORYじゃなくてコンベンショナルメモリでしょ。

685 :デフォルトの名無しさん:2009/11/08(日) 06:14:31
構造文すら全命令をマクロ化、MAKE内蔵、実践に即した実装だとLISP信者の俺は思う。

686 :デフォルトの名無しさん:2009/11/08(日) 06:24:09
エロゲってバカにしてたけど、中々やるな。
シューティングのキャラの移動にも使える。
と思ったら、17才の時にセーラー服戦士フェリス(ヴァリスのパクリ?)で敵の
移動パターン制御に何かしらの言語を使っていた可能性も有るのか。
21年前か。いまだに現役か。

悪いけど言語仕様は古いと思うが21年前の17才が何かしらの言語を
作ったと考えると、今のマクロ主体のシステムは実測論による今までの集大成か。
素直に凄いと思う。

しかし自分がプログラマーだと思うとオブジェクト指向を入れて欲しい。

687 :デフォルトの名無しさん:2009/11/08(日) 06:29:59
全ての構造文は
if not 式 goto,if 式 goto,goto
の3命令で表せると実証してるしな。
構造文のサンプルだけでもみたいな。

688 :デフォルトの名無しさん:2009/11/08(日) 07:41:43
ソースクレ厨と同じじゃないか
うぜえんだよ
LISPでもやってろ

689 :デフォルトの名無しさん:2009/11/08(日) 09:47:10
しかし、作ってるのがエロゲ屋ってのが、そんなに感銘を受けるものなのかね?

見習うべきは吉里吉里(KAGはちょっと微妙)とか、バンナムの中の人が作ってるXtalとか、
ソースも手に入るんだし、いくらでもあると思うんだが。

採用実績だってXtalはともかく、吉里吉里は相当のものがあるし。

kikyou.info がつながらん...

690 :デフォルトの名無しさん:2009/11/08(日) 10:32:53
>>689
> しかし、作ってるのがエロゲ屋ってのが、そんなに感銘を受けるものなのかね?

たしかにそこに惹かれてるとしか思えないような糞言語だな。

691 :デフォルトの名無しさん:2009/11/08(日) 10:37:47
各レスの鼻息と具体性がここまで綺麗に反比例してると笑える。

692 :デフォルトの名無しさん:2009/11/08(日) 11:48:00
糞とかいってる奴はもっと良い言語をスクラッチで組めるのか?
俺には無理だ。

693 :デフォルトの名無しさん:2009/11/08(日) 11:55:23
HPのフリーツールをみてると何でも水準以上の物を作っているところが凄い。
DOS時代からの生き残りか。

694 :デフォルトの名無しさん:2009/11/08(日) 12:06:25
電卓かなんか?

695 :デフォルトの名無しさん:2009/11/08(日) 12:07:33
>>687
見事に全ての構造文を if not,if,goto で記述している

_ KENJI ― 2009/11/08 11:53
まずはdo-whileではなく、正しくはdo-endと記述する事を訂正させてください。

それと吉里吉里などもっと凄い言語が公開されていますので、
ソースコードなどはそちらを参考にした方がよいと思います。

switch-caseはテーブルではなくif文の固まりです

文字列はゲーム用スクリプタなのでもちろん"(ダブルクオーテーション)では挟まずベタうちです。

ラベルやプリプロセス命令(#が付く命令)も行頭でなくとも記述できます

(sample)
while exit_flag==0
    sel game_flag,ゲームをスタートさせる,ゲームを終了させる
    if game_flag==0
        ゲームをスタートさせます
        game_start 1
    else
        sel ans,ゲームを終了させる,キャンセル
        if ans
            exit_game 1
        end
    end
end

実際のマクロ記述については長いので省略。以下をみてね。
http://kenjikakera.asablo.jp/blog/2009/11/04/4676336#c

696 :デフォルトの名無しさん:2009/11/08(日) 12:16:54
>>695
> 見事に全ての構造文を if not,if,goto で記述している

ifとgotoにメモリがあればTuring完全なわけだし。

697 :デフォルトの名無しさん:2009/11/08(日) 12:20:21
で、メッセージを英語化して、start game と exit game にする時はどうするの?

698 :デフォルトの名無しさん:2009/11/08(日) 12:21:54
>>696
高度なマクロ機能があれば、whileとかforとかswitchとかを
全部ifに変換するようなマクロとか考えられるよね。

699 :デフォルトの名無しさん:2009/11/08(日) 12:30:20
コンベンショナルメモリを広く使うため、UMBCNFGとか使ったな。
あの頃はコンベンショナルメモリが広くないと動かないゲームがあったんだよな。

音源ドライバもMSDRVとレコンポーザ互換で複数画面が使えるんで重宝した。
たしか音源ドライバは118音源の2OPモードが使える唯一のDOSドライバだったんだよな。

そして分裂守護神トゥインクルスターと殻の中の小鳥か。
分裂守護神トゥインクルスターはなぜACT2がでなかったか不明だった。
あの変身シーンをまた見たい物だよ。ニコ動にはないんだよな。
殻の中の小鳥はメイドブームの始祖だよな。
それに、よくネタにされるセーラー服戦士フェリスか。
ニコ動でみたけど、当時の98シューティングってこういう感じなのか。

こういったゲーム開発を支えたのがmacro志向言語でmake内蔵か。
LISPの思想を継承してると思ったが、見てみたらプリプロセッサ命令の山。
面白い物だ。

700 :デフォルトの名無しさん:2009/11/08(日) 12:33:49
>>697
特攻しました。

701 :デフォルトの名無しさん:2009/11/08(日) 12:33:56
ゲ製板にフォークしたいような勢いだな、と思ったんだが、
スクリプト で検索したら既にいくつかスレあるな。過疎ってるしw

ゲーム用スクリプトの話題はそっちに分ける?

702 :デフォルトの名無しさん:2009/11/08(日) 12:49:27
>>698
いやgoto用ラベル管理が必要になるだけで、
後はCのマクロレベルで問題なし。

703 :デフォルトの名無しさん:2009/11/08(日) 12:55:27
>>702
Cマクロレベルだとネストの管理が出来ないだろう。
それに#defineマクロは記述性が悪い。

704 :デフォルトの名無しさん:2009/11/08(日) 13:06:24
殻の中の小鳥と分裂守護神トゥインクルスターは
あの当時の98ユーザーなら知ってるとして、

セーラー服戦士フェリスはパッケージにRPGって書かれてたんだぜ。詐欺だよ。
しかもスピードが速すぎてマシンクロックを落とすか
ファンクションキーでスピードを落とさないとゲームにならないんだよ。

フェリスの後継のコズミックサイコは音楽CDが付属していて
今でも高値で売られてるんだよ。

705 :700:2009/11/08(日) 13:07:50
_ KENJI ― 2009/11/08 12:52
金曜日から質問攻めが凄いですね。
1人の方なのでしょうか?
それともどこかで話題になっているのでしょうか。
どこかで話題になっているようでしたら教えていただけると幸いです。

質問の答えですが、半角英文が先頭に来るメッセージの場合
mes game start
と記述するか、#defineでmesをm辺りに定義して
m game start
とでも記述してください。
半角英文が日本語の中に来るときはそのまま半角文字を記入してokです。
まあしかし、ゲーム中には全角英文字しか使わないので滅多に出番がありませんが。
start_game 1とexit_gane 1はstart_game(1)とexit_game(1)とも記述出来ます。
後はこの場合メインループの外側でstart_game(local)やexit_game(local)の様に外部に登録します。Cとは違い、前方参照も出来ます。

706 :デフォルトの名無しさん:2009/11/08(日) 13:16:55
ここに本人が書いてるみたいなレスは、転載か何かか。

707 :デフォルトの名無しさん:2009/11/08(日) 13:19:52
>>703
ラベルをスタックで管理。> ネスト

708 :デフォルトの名無しさん:2009/11/08(日) 13:22:17
98ユーザーも結構多いんだな。
こういった内部でしか使われない言語が表に出ると反応が様々で怖いな。
俺がスクラッチから作った言語がこのスレに晒されたらと思うと怖いな。

709 :デフォルトの名無しさん:2009/11/08(日) 13:23:42
>>707
それじゃあ、if not goto,if goto,gotoだけじゃないじゃん。

710 :デフォルトの名無しさん:2009/11/08(日) 13:24:23
今から>>708の言語を捜すスレになりました。

711 :デフォルトの名無しさん:2009/11/08(日) 13:31:40
>>709
それはターゲット言語であって、処理系の話じゃないでしょ?
その辺はちゃんと区別できないと。

712 :デフォルトの名無しさん:2009/11/08(日) 13:34:13
IBM5100ユーザーも結構多いんだな

713 :デフォルトの名無しさん:2009/11/08(日) 13:35:27
>>707
おいおい、C言語の力を使ったら何だって出来るだろ?
マクロだけで実装してるから話題になっているわけで、趣旨が違うぞ。

>>708
フツーの人はそうだよ。言語処理系のソースコード公開するのも怖いし。
吉里吉里の人は特別だよ。

714 :デフォルトの名無しさん:2009/11/08(日) 13:51:17
>吉里吉里の人は特別だよ。
吉里吉里スクリプト自体は、仕様としてはさほど大したものではない。
仕様を真似して似たようなオブジェクト指向スクリプト言語を構築してみたが、
コンパイラ+VMで2週間くらいでできたよ。

吉里吉里がすごいのはKAGというADVゲーム開発環境一式が公開されていることと、
それによる市販ソフトの実績が十分にあるところだな。

715 :デフォルトの名無しさん:2009/11/08(日) 13:55:40
>>713
そのマクロ機能実現に、ラベルのスタック管理が必要だってことでしょ?
popしてるじゃん。そのマクロのコード読めてないの?

716 :デフォルトの名無しさん:2009/11/08(日) 14:01:39
>>714
VMの性能はおいといてもコンパイラをスクラッチで2週間で組めるのならあんた十分凄いよ。
吉里吉里というのは自分は知らんが、KAGというのは吉里吉里上のラッパかな?
ここに出ているマクロ言語は自分には6人月の仕事だ。

717 :デフォルトの名無しさん:2009/11/08(日) 14:09:14
>>715
いや、だから言語の仕様上だけで実装してるのがすごいんじゃん。

ああ、わかった。#defineマクロ機能を完全にとpop機能を実現するコンパイラを
作れば同じ事が出来るって言いたいんだな。

LISP信者には悪いが可読性の悪いLISPや#defineマクロよりmasm似にたマクロを
使えた方が可読性は増す。

あと、Cの#define中って、#ifdefとか#ifって使えたっけ?
使えるのならCの#defineの実装って結構やっかいそうだな。

718 :デフォルトの名無しさん:2009/11/08(日) 14:12:10
あ、でもだめだ。#defineではlocalなラベルは作れん。

719 :デフォルトの名無しさん:2009/11/08(日) 14:19:02
>>716
最近は48時間な時代だからなあ

720 :デフォルトの名無しさん:2009/11/08(日) 14:21:54
一つずつ名前をつけるのもめんどくさいほどの大量のフラグとパラメータの
複数スナップショット取れる風な恒久化っていうのはいいね。

俺言語を作ろうとすると文字列のサポートとかマンドクさくなるので
こういう状態遷移管理専用言語もおもしろそうだ。

昔、bitか何かで「ある番地(A)からある番地(B)のデータを引いて0になったらある番地(C)へ飛ぶ(だったっけ?)」な
命令が1つあれば、他の命令はこれの組み合わせで実装できるとかあって1つしか命令無いんだから、
A, B, Cのアドレスを並べておくだけでいいとか。


721 :デフォルトの名無しさん:2009/11/08(日) 14:24:09
だーらLispのマクロはマクロプロセッサ的なマクロとは別物だっての。

アセンブラのマクロといえば、NASMのマクロがラベルのプッシュ・ポップとかの
機能をもってたかな。

722 :デフォルトの名無しさん:2009/11/08(日) 14:30:34
うろ覚えで鼻息の荒い奴はいったい何なんだ

723 :デフォルトの名無しさん:2009/11/08(日) 14:31:05
だれもForthのことを思い出してくれない。

724 :デフォルトの名無しさん:2009/11/08(日) 14:32:15
>>715
#calc __cmd_num __cmd_num+1
#define local1 "f_{__cmd_num}"
こんな命令が有るようだとさすがに#defineとpush/pop程度の実装では無理だよ。
全ての条件文にユニークなラベルを発効する命令だと思う。

>>721
Lispは高性能なのは分かるが記述性が自分には難点。
Wizerd級になると一瞬で判別できるみたいだけどね。

725 :デフォルトの名無しさん:2009/11/08(日) 14:34:09
>>724
それがラベル管理でしょ。
ワンパスコンパイラのコード読んだことないの?

726 :デフォルトの名無しさん:2009/11/08(日) 14:37:40
煽るだけの奴が一番頭悪そうだな

727 :デフォルトの名無しさん:2009/11/08(日) 14:40:37
久々に高純度の自己紹介レスを見た。

728 :デフォルトの名無しさん:2009/11/08(日) 14:45:21
>723
LispはメジャーだけどForthはダメだなぁ。
こういったシナリオ系のスクリプト言語と相性良いと思うんだけどね。Forth。


729 :デフォルトの名無しさん:2009/11/08(日) 14:46:16
今はJVMで簡単に俺言語を試せて楽だね。
バイトコード吐いてもいいし、
まずはJavaコード生成でもいいし。

730 :デフォルトの名無しさん:2009/11/08(日) 14:47:31
>>715
完全な#define命令とpush/popだけでは無理だよ。いい加減諦めな。

>>719
天才は日本の財産だ。体に気をつけろ。

>>720
>よって、プリプロセッサの大きさに比べてコンパイラの大きさは小さい。
>そして強力な文字置換により、文字セットもプリプロセッサ時、コンパイル時、実行時の3段階で解決される。
文字セットも3種類必用だそうだ。逆にめんどくさくないか?

>>721
一時期LISPにはまったが、やみつきになる言語だよな。RPNもやみつきになったな。

>>722
ここも天才だけが来るスレじゃないし、仕方がないんじゃん。
間違えを認められれば先に進めるし、反論だけの奴はその程度の奴だし。

>>723
わりい、忘れてた。

>>724
そんなにいきり立つなよ。言ってることが正論でも相手が受け入れなくなる。

新言語で週末は面白かったけど、特攻は>>697レベルの事でするのは相手に失礼。

まあ、なんだ。ここは天才が比較的多いんだから、
もっと柔軟に楽しく言語を作ろうぜ。

言語を作るってのはプログラミングにおいてOSを作るのに匹敵し、
神になれるんだからさ。

731 :デフォルトの名無しさん:2009/11/08(日) 14:50:14
>>725
今更ラベル管理を言ってもまあむりだ。
最初の#defineとpush/popだけで実装はどこへ行った。

732 :デフォルトの名無しさん:2009/11/08(日) 14:51:05
>>702
> いやgoto用ラベル管理が必要になるだけで、
> 後はCのマクロレベルで問題なし。


733 :デフォルトの名無しさん:2009/11/08(日) 14:54:16
>>732
おっちゃん、言ってることがどんどん増えて行ってるよ。
あんたの負けだよ。

734 :デフォルトの名無しさん:2009/11/08(日) 14:54:52
>>732
これじゃ言ってることわからん奴もいるわな。

735 :デフォルトの名無しさん:2009/11/08(日) 14:55:25
過去のレスを「増えていってる」とは言わんのでは。
相手の言ってることのうち都合の悪いところを忘れたもん勝ちの
口喧嘩でもしてるなら別だけど。

736 :デフォルトの名無しさん:2009/11/08(日) 14:58:33
>>698>>702は処理系の話だろ?
>>696は実行系の話だろ?
>>733は区別付いてないじゃないの?
作ったことない人は混同しがちだけど。



737 :デフォルトの名無しさん:2009/11/08(日) 14:59:43
>>735
一端ゆっくり考えて、#defineと何が必用だか1つのレスに分かり易くまとめてくれないか。
IDが出ないもんでぶつ切りの主張だと何言っても通用しないぞ。
while-endの仮想コードでも良いよ

738 :736:2009/11/08(日) 15:00:23
>>736
> >>698>>702は処理系の話だろ?

処理系→翻訳系


739 :デフォルトの名無しさん:2009/11/08(日) 15:01:23
>>737
IDが出ないなら、相手を同一人物だと思わないほうがいいんじゃないの。
735は俺だけど、少なくとも今日は初めて書き込んだぞ。

740 :737=733:2009/11/08(日) 15:02:10
区別は付いてるさ。
ただ、同じ奴が言ったとは分からなかった。

741 :737=733:2009/11/08(日) 15:06:15
>>739
すまん。IDがでないと不便だな。

742 :デフォルトの名無しさん:2009/11/08(日) 15:07:39
いや別に不便じゃないよ。
仮想敵と戦わなければいいだけ。

743 :737=733:2009/11/08(日) 15:12:04
>>742
了解。

まあなんだ、言語仕様のことだから、レスは2つとかに分けず1つに書くか
名前を明記して欲しかったな。

744 :デフォルトの名無しさん:2009/11/08(日) 15:17:30
じゃあ次はこのC言語がターゲットの片言Algolコンパイラについて話そうか。
http://catb.org/retro/cfoogol.shar.gz
500行弱だな。

745 :デフォルトの名無しさん:2009/11/08(日) 15:17:50
まぁ、逆に「仮想別人」のケースもあるけどなw
やたら興奮気味に、仮想敵だとか見えない敵云々言ってるのがいたら、そいつは
「ズバリ言い当てられけど隠れ蓑があるから上手く逃げてやるぜざまあ見ろ」
的な昂ぶり方をしている可能性もある。

746 :デフォルトの名無しさん:2009/11/08(日) 15:20:49
Algolしらん。FORTHは昔、MZ系PCのOS、S-OSに実装されてなかったっけ。

747 :デフォルトの名無しさん:2009/11/08(日) 15:27:02
>>744
nを初期化し忘れてやがるw > サンプルコード

748 :デフォルトの名無しさん:2009/11/08(日) 15:29:58
みんな凄いんだね。
C/C++でブログのプリプロセッサ並の物を作るとしたら、どれくらい時間がかかる?
ラベルはハッシュ管理かね、HPとコンパイルスピードを見る限りは。
大量のラベルが生成されるだどうね。

SAVEデーターとバグFIXで増える文字列はどうやって解決してるのだろう。
あと、未読既読機能。VMの力も使ってるんだと思うけど。

749 :デフォルトの名無しさん:2009/11/08(日) 15:35:05
>>748
C言語で集中的に出来るんなら1週間でマクロの仕様を考えて、1ヶ月でプログラムかな。
C++ならもうちょっと短くできる。

750 :デフォルトの名無しさん:2009/11/08(日) 15:36:54
C言語に落とすのか>foogol
エラーがあるとreturnしちゃうのが新鮮かな?

ttp://catb.org/retro/
logoはなんとなくSMC-70で使った覚えがあるがpilotってどんなのだっけ?


751 :デフォルトの名無しさん:2009/11/08(日) 15:36:57
C/C++でやろうとするから大変なんじゃないの?
PythonとかGCある言語なら二週間くらい。

ただああいうのは言語機能そのものよりも、
ドメインとマッチしているかどうか、
実務支援のリソースが豊富かどうかで
良し悪しが決まってくる。

752 :デフォルトの名無しさん:2009/11/08(日) 15:41:16
>>750
http://rpilot.sourceforge.net/rpilot.txt

753 :デフォルトの名無しさん:2009/11/08(日) 15:42:17
>>750
focalは「きだあきら版」じゃないか。

754 :デフォルトの名無しさん:2009/11/08(日) 15:47:37
プリプロセッサのプログラム自体は1ヶ月ぐらい(C言語)だけど、
仕様を考える時間が結構かかりそうだな。
3段階の文字列解決とかコンパイラ本体とVMの全ての仕様を同時に考えないといけない。
作りながら仕様変更等もありそうだから、一概には言えないな。

755 :デフォルトの名無しさん:2009/11/08(日) 15:55:13
シナリオを1秒でコンパイルとかwavを0.1秒でコンパイルとかスピードに命を掛けてるみたいだし、
やはりプリプロセッサ、コンパイラ、VMとの兼ね合いがあるから日数は簡単に出せないな。

756 :デフォルトの名無しさん:2009/11/08(日) 16:06:56
「wavをコンパイル」
こういう用法はやめてくれ

757 :デフォルトの名無しさん:2009/11/08(日) 16:07:44
正しくはwavを圧縮だな。

758 :デフォルトの名無しさん:2009/11/08(日) 16:16:34
wav変換にかかる時間なんて処理系の出来とは関係ないでしょ?

759 :デフォルトの名無しさん:2009/11/08(日) 16:26:02
いや、音声wavの圧縮が0.1秒というのは相当早い。
多分インラインを使いまくってるんだろう。
そこから推測すると、シナリオファイルのコンパイルと圧縮が1秒というのは
コードのチューンに相当時間をかけている。多分インライン使いまくりだろう。

JAVAで良いのであれば1ヶ月もあればプリプロセッサを作れるが、
プリプロセス、コンパイル、VM、その間の仕様決め、
そして最適化となると単純にプリプロセス時間だけを計ってもしょうがない。

760 :デフォルトの名無しさん:2009/11/08(日) 16:26:16
実用になる言語ってのは、どこかしらに「巨大な〜を高速に〜できる」な実装が必要になると思うんださ
言語仕様では、それらが簡易に記述できれば嬉しいなとか言語ワナビの俺が言うんだから間違いはない

>wav変換にかかる時間
コンパイル時間が短ければ、リリースも早くできるんじゃないか?

761 :デフォルトの名無しさん:2009/11/08(日) 16:26:50
Cプリプロセッサ風の何か、なら0.5人月だけど、
標準が定義するところの「プリプロセッサトークン」を正確に認識し、
展開結果に、またマクロが現れるとかそういう場合についてのふるまいを、
正確に標準に定められた通り動作するものを実装しようと思ったら、
どれだけかかるかわからないな。

762 :デフォルトの名無しさん:2009/11/08(日) 16:32:38
何でも組める天才はいるんだよ。
でも、この人は一度プログラマーを辞めようとしてるんだよな。
酒や薬(安定剤?)、そしていくつもの会社を渡り歩き、今は経営者兼任。
プログラマーとしては天才だが、人生の天才ではないな。
俺なら凡人で良い。

新しい書き込み
_ KENJI ― 2009/11/08 16:15
書き忘れましたがインクルードは
#include <w95gd.mac>
#include "h00win0.mac"
として、標準マクロと標準命令はw95gd.mac、
そのゲーム専用のマクロはh00win0.macに記述します。


763 :デフォルトの名無しさん:2009/11/08(日) 16:34:30
>>759
> いや、音声wavの圧縮が0.1秒というのは相当早い。
> 多分インラインを使いまくってるんだろう。

0.1秒はライブラリの仕事じゃないの?
処理系関係ない。
1万ファイルだから外部プログラムの呼び出しコストを下げたいと書いてある。>>670



764 :762:2009/11/08(日) 16:35:16
薬は睡眠薬かもね。イソミタール、ロヒプノールで検索したら、相当強い薬だった。

765 :デフォルトの名無しさん:2009/11/08(日) 16:35:28
>>759
なんも分かってないな。

766 :デフォルトの名無しさん:2009/11/08(日) 16:41:29
>>763
この会社の圧縮はCG,WAV,シナリオ全てオリジナルだよ。
ゲーム分解ツールで見たことがある。
多分、他人のコードが入るのを嫌う、昔気質のオールドタイプだよ。
KMAKEもフルアセンブラだから、インラインも使いまくりだろう。

圧縮に必用なビット演算はアセンブラが一番強いからね。
もしかすると、フルアセンブラかもね。

オールドタイプだから、斬新だけど古めかしいスクリプトコンパイラなのだろう。

推測ばっかだなw

767 :759:2009/11/08(日) 16:43:57
>>765
何が分かってないか、教えてくれ。
あまりにも自分の理解力がないのなら、答えなくても良い。
自分の馬鹿さを嘆くから。

768 :デフォルトの名無しさん:2009/11/08(日) 16:44:56
>>766
オリジナルかどうかって事じゃなくて、
インラインだろうが、呼び出しだろうが、ライブラリだよね?
>>748のお題は「ブログのプリプロセッサ並の物」だから別の話。



769 :デフォルトの名無しさん:2009/11/08(日) 16:47:16
>>767
例えば0.1秒もかかる処理1万件、
これの何をインライン展開すると速くなるわけ?
外部プログラム呼び出しを辞めたのは>>670にある。

770 :766:2009/11/08(日) 16:48:34
話がわき道にそれてすまん。
それだったらCで2ヶ月かな。

771 :766:2009/11/08(日) 16:50:45
767でなくてすまん。
>>769
圧縮自身。

772 :デフォルトの名無しさん:2009/11/08(日) 16:52:27
圧縮そのものに処理系もインラインも関係ないじゃん。
それともKMAKEで圧縮関数書いてあるの?


773 :766:2009/11/08(日) 16:53:35
>>769
>>ALL

>>766
で書いたインラインも使いまくりというのはインラインアセンブラ使いまくりの
間違えです。すみません。

774 :デフォルトの名無しさん:2009/11/08(日) 16:55:18
自前の圧縮ルーチンをインラインアセンブラ使って書いてるって話なら分かる。
ただスレ違いかと…



775 :デフォルトの名無しさん:2009/11/08(日) 17:25:11
hashをインラインアセンブラ化して2倍のコンパイルスピードだそうです

KENJI ― 2009/11/08 17:13
CG,WAV,シナリオの圧縮はオリジナルです。
昔は全てアセンブラで組んでいましたが、
最近は移植性のため一度C言語で組んでそれをインラインアセンブラ化します。
圧縮のビット操作関係とプリプロセッサとコンパイラのラベル解決のプログラムはC言語版は残したままで1からインラインアセンブラで組み直しています。
インラインアセンブラの採用で圧縮展開は5倍、コンパイラは2倍くらいのスピードになります。
ゲーム本体は展開以外はほぼ同じスピードなので、インラインアセンブラを積極的に使ってません

_ KENJI ― 2009/11/08 17:19
未記入様。
ご報告、有難う御座います。
読んでみると自分のせいで荒れているみたいですね。
申し訳ないです。
ここでの質問は紳士的でしたので、問題はありません。

776 :775:2009/11/08(日) 17:29:26
もしかしてhashを使っているという前提が違うのかもしれません。
>コンパイラのラベル解決のプログラム
というのはHPでhashで説明してますが、hash以上の性能のアルゴリズムって有ります?

777 :デフォルトの名無しさん:2009/11/08(日) 17:36:03
>>776
トライがある
まあただのトライ木ではないだろうけど

778 :デフォルトの名無しさん:2009/11/08(日) 17:40:45
言葉が抜けてた
トライを実装する場合ってことね
トライ構造にした上で、シンボル化する
シンボルってのは、LISPのアレね
こうすると、新規のラベルかどうかはトライでインクリメンタルに、
既成のラベル同士ならアドレスの比較だけで済む

779 :デフォルトの名無しさん:2009/11/08(日) 17:40:59
順当に考えてハッシュだろう。
キーをどうやって生成してるか分からないが、
2倍というのは凄いな。

780 :デフォルトの名無しさん:2009/11/08(日) 17:57:56
ハッシュが2倍とは書いてないようだが

781 :デフォルトの名無しさん:2009/11/08(日) 18:00:24
おこちゃまだから切り刻むことしか思いつかない

782 :デフォルトの名無しさん:2009/11/08(日) 18:06:39
>>778に補足
一意なんだからアドレスの比較も不要だな
ユーザープログラム上で比較する時は、の話

783 :デフォルトの名無しさん:2009/11/08(日) 18:09:38
トライは順序構造だから当然文字列の大小も判定できる
ハッシュだと一度文字列レベルに落とし込む必要がある
文字列処理にハッシュが使われない理由でもある

784 :デフォルトの名無しさん:2009/11/08(日) 18:40:58
勉強になるよ。

785 :デフォルトの名無しさん:2009/11/08(日) 19:21:27
何でこんな伸びてるの?
三行で頼む

786 :デフォルトの名無しさん:2009/11/08(日) 19:25:15
1行で要約すると
子供がエロゲの作成過程を知って興奮

787 :デフォルトの名無しさん:2009/11/08(日) 19:59:29
なんか最近似たようなニュースがあったな

788 :デフォルトの名無しさん:2009/11/08(日) 20:03:27
>>786
VHSがアダルトビデオのおかげで普及したという神話もあながち…

789 :デフォルトの名無しさん:2009/11/08(日) 20:45:33
>>788
それはうわさじゃなくて事実

790 :デフォルトの名無しさん:2009/11/09(月) 01:00:34
糞とか古いとか言ってた奴の言語を見たいよ。
概要で良いからどれだけ素晴らしい言語を実用レベルにしてるか見て欲しいよ。

こういう事言っても誰もやってくれないんだよな。
口先だけだと思われたくなければやってよ。

791 :デフォルトの名無しさん:2009/11/09(月) 01:10:16
なんで自分の力量を証明するためだけに言語を作らないといかんのだ。

792 :デフォルトの名無しさん:2009/11/09(月) 01:14:50
実際に出来るのは理論だけか、
コンパイルスピードの遅い実用的にならない物だけだろ?

コンパイルスピードを極限まで早くするためにmakeを内蔵し
アセンブラを豊富に使っているプロと比べものになるわけ無いよ。
しかも言語仕様が柔軟でエロゲだけではなく
携帯電話のゲームのコンパイラにもなるんだぜ。

そんなのここのスレの住人の一握りしか出来ないよ。

793 :デフォルトの名無しさん:2009/11/09(月) 01:16:54
>>791
今まで作ってきた言語の仕様の一部を晒せば良いんじゃないか?
じゃないと糞とか古いとか言っても説得力がない。

794 :デフォルトの名無しさん:2009/11/09(月) 01:19:19
素人はコンパイラジェネレータを使えばok。
コンパイルスピードは目をつぶる。

795 :790:2009/11/09(月) 01:21:53
>>791
今までに作った素晴らしい言語の仕様を教えてくれればいいよ。

796 :デフォルトの名無しさん:2009/11/09(月) 01:24:20
kimoi

797 :デフォルトの名無しさん:2009/11/09(月) 01:30:13
そんな物、作れるのはほんの一握り。
皮肉だと思うが、スレに期待しすぎ。

798 :デフォルトの名無しさん:2009/11/09(月) 01:39:51
て言うか何言ってもいちゃもんつけるんだろうなあ…
不毛だこと

799 :デフォルトの名無しさん:2009/11/09(月) 02:00:39
さすがにもうゲームの制御ならインタプリタで十分だろうに
未だにコンパイルスピードとか言ってる人もいるんだな

800 :デフォルトの名無しさん:2009/11/09(月) 02:05:43
よそから飛んできたんでひょっとしたら799は空気が読めてなかったかもしれない

801 :デフォルトの名無しさん:2009/11/09(月) 02:45:02
いや普通の意見
ゲームがらみだからボルテージ上がってる子供がいるだけ

802 :デフォルトの名無しさん:2009/11/09(月) 06:15:43
neccdとsmartdrvとatokと入れて
この人のコンベンショナルメモリのツール等を使って639kb空けたよなぁ。
この人は何やるにしても究極を求めちゃうんだろうな。

803 :デフォルトの名無しさん:2009/11/09(月) 07:25:48
DOS全盛の頃はX68000使ってたからさっぱり判らん

804 :デフォルトの名無しさん:2009/11/09(月) 08:34:12
ゲームがらみはゲ製板のスクリプトスレでやれや
http://pc11.2ch.net/test/read.cgi/gamedev/1005114698/l50
http://pc11.2ch.net/test/read.cgi/gamedev/1012824335/l50

805 :デフォルトの名無しさん:2009/11/09(月) 08:50:42
といっても、閑古鳥が鳴いてたスレだからな、ここ。
この話題無くなったらまたシーンとするだけだし、積極的に他へ追いやることもないよ。
誰も居なくなったこのスレを眺めて「よし、俺の仕事によってスレの純度が保たれた!」と
悦に浸ってもしょうがないし。

806 :デフォルトの名無しさん:2009/11/09(月) 09:12:07
ボルテージ上がってる人は、KENJIさんご自身が
「それと吉里吉里などもっと凄い言語が公開されていますので、
ソースコードなどはそちらを参考にした方がよいと思います。」
と、おっしゃっていることは都合良く見落としてないかね?

807 :デフォルトの名無しさん:2009/11/09(月) 09:38:49
謙虚なところもいいね。

808 :デフォルトの名無しさん:2009/11/09(月) 09:43:37
>>806
ボルテージって言葉が好きなんだね

809 :デフォルトの名無しさん:2009/11/09(月) 10:52:23
とにかく、他に機種へクロス移植しやすいように
マクロで構文を作りMAKE内蔵のコンパイラが有るって言うのが分かって、
LISP信者の俺は嬉しい。
OHPの方は本当に素人向けに説明しようとして放置しているみたいだな。

810 :デフォルトの名無しさん:2009/11/09(月) 10:55:40
言語それぞれに特徴がある。
だが、それが良い。
特定言語の信者は何故それが分からん。

811 :デフォルトの名無しさん:2009/11/09(月) 12:11:01
Hello, wolrdから先に進まないからじゃまいか?

812 :デフォルトの名無しさん:2009/11/09(月) 12:46:48
>>810
べつにそれがわからんから信者なわけじゃないだろう。
何故それが分からん。

813 :デフォルトの名無しさん:2009/11/09(月) 14:15:19
いい暇つぶしになった。
巨大なファイル多数を高速にコンパイル、optasmやTurboCを思い出す。

マクロで構文を作るってスピードの面でずいぶん不自由だと思うが、
ゲームで敵の移動アルゴリズムや、
リンカを作ってexe/comファイルの出力だかを多量に高速で出来るのか。

面白そうだし、是非公開して欲しいね。
構造化pic-basic見たいのを作りたいよ。

814 :デフォルトの名無しさん:2009/11/09(月) 14:21:34
HPの方も知り合いのために作ったって書いてあるもんな。
スキルが低い知り合いだったのだろう。

なぜスクリプトコンパイラとスクリプトエンジンの分割をした方が良いとか、
ラベルの前方参照の解決方法とか、このスレじゃ当たり前のことを丁寧に
解説している。
HPも再開して欲しいな。

815 :デフォルトの名無しさん:2009/11/09(月) 14:23:29
>>813
picじゃ逆ポーランドは荷が重すぎないか?

816 :デフォルトの名無しさん:2009/11/09(月) 15:02:13
有難う御座います。
趣味でPICではないですがAVRのリンカを作っています。
その為に、単純比較式 r0==0 とかを1byteで記する命令を作っています。
しかしPICは変数の割り当てが難しいのでVMを作るのは大変だと思います。

817 :デフォルトの名無しさん:2009/11/09(月) 15:46:19
>>786
なんか信者的な意見も飛び出してるしなぁ

# さっきまで規制食らってたからニヨニヨしてるしか無かったが

818 :デフォルトの名無しさん:2009/11/09(月) 22:24:56
久々の大物だったからな。
構造文もマクロで記述、MAKE内蔵、ハイスピードコンパイル。
これを実装してるんだから良いネタだよ。
それに古いとか糞とか言う奴と賛美している奴がいて楽しかったよ。
おれは古く見えるが、仕様用途にマッチした実装だと思うよ。
このプログラマが何でも組めるというのは事実だけど天才は言い過ぎかな。

819 :デフォルトの名無しさん:2009/11/09(月) 23:50:22
Follow集合の計算がわからん
教えてくれ

Directorもついでに教えてくれ

お願いします

820 :デフォルトの名無しさん:2009/11/10(火) 00:18:16
follow集合とdirector集合かな?
ググれば分かり易いサイトが結構あるけど。

821 :デフォルトの名無しさん:2009/11/10(火) 00:22:33
くそー、規制で祭りに乗り遅れたよ。
このスレにこんなに活気が溢れたのは久しぶりだ。

822 :デフォルトの名無しさん:2009/11/10(火) 01:58:47
楽しかったよ。98時台を思い出して自分も年をとったって感じたけどw

823 :デフォルトの名無しさん:2009/11/10(火) 06:16:03
実践的言語だと思う。面白いから公開して欲しい。ぜひ、PEのEXEを作りたい。

824 :デフォルトの名無しさん:2009/11/10(火) 07:06:46
公開は無理と言われている。自分で作れ。

825 :デフォルトの名無しさん:2009/11/10(火) 07:22:42
そうか、残念。自分で作れないことはないんだけど、
他人のコンパイラがはき出すOBJをEXE(PE)にするのが好きなんだよ。
コンパイラよりリンカを作る方が好きなんだ。何故か分からんけど。

826 :デフォルトの名無しさん:2009/11/10(火) 07:30:48
おれもLINKつくるのすきだぜ。とは言ってもcomふぁいるれべるだけどw

827 :デフォルトの名無しさん:2009/11/10(火) 08:38:20
>>825
変な嗜好だな
リソース含めたりDLLとかは厄介だったりするけど、
それも含めて好きなの?俺はごめんだわ

828 :825:2009/11/10(火) 09:09:23
DLLは嫌いだけど、リソースは好き。
そう言えばリソースエディタもC/C++とほぼ同じ性能のマクロが記述できるよね。

829 :825:2009/11/10(火) 10:05:51
言語は一度スクラッチで作ってこつを掴んだら、
また新しい言語を作りたくなるよね。

830 :デフォルトの名無しさん:2009/11/10(火) 11:01:55
そうだね、色々な言語仕様を考える。
しかし、ここ最近の言語仕様は実践的だな。

831 :デフォルトの名無しさん:2009/11/10(火) 11:17:35
ハイスピードコンパイル、ハイスピード圧縮は純粋に凄いけどな。
たぶん、アルゴリズムとインラインアセンブラの力だろう。
現代のコンパイラでも、ビット演算が得意な言語はまず無いからな。
キャリーフラグが無いのも痛い。アセンブラを使って高速化する適材適所だな。

832 :デフォルトの名無しさん:2009/11/10(火) 13:50:32
C言語ですらビット操作、キャリーフラグの多用、マクロ機能は
アッセンブラには敵わない。
この人はホットスポットを見つけてインラインアッセンブラ化。
昔では当然のことをやっているだけだ。

KMAKEごときも昔の人ならアッセンブラで作る。tasm,turboc,optasm様々だ。

しかし言語体系は面白いし、色々な分野のプログラムを精力的に組んでいるところは評価できる。

でも一度プログラムを辞めたり信念が感じられない。
自信が無いのだろうか。

833 :デフォルトの名無しさん:2009/11/10(火) 16:25:27
ブログの最初は自分はNo1と思っていたが、色々あって今の腰の低さになってる。
当時の98エロゲを知るオレには波瀾万丈で面白い人生だと思ったよ。
本人はそう思ってないだろうがw

834 :デフォルトの名無しさん:2009/11/10(火) 17:56:08
ブログ読み終わった。PC98時代のじじいだから面白かったけど
プログラムの話はほとんど無かったね。
知っているゲームはCALと殻の中の小鳥。
それとPC98時台にエロゲでシューティングが有るって話を聞いてたから3本か。
UMBCNFGの作者さんでもあるんだね。

835 :デフォルトの名無しさん:2009/11/10(火) 18:50:38
| ||⊂⊃⊂⊃||
| || ロロロロロロ || がしゃーん
| || ・ ・・・ ・・ ||
| || ロロロロロロ ||
| || Coca Θ.|| がしゃーん
| ||口口口□||
|ミ||====||
   ̄ ̄ ̄ ̄
自動販売機だよ
自動で販売してくれる凄いやつだよ

836 :デフォルトの名無しさん:2009/11/10(火) 19:45:10
>>833
40才にもなるオヤジが今まで
エロゲーのプログラムしか作ってないんだから
正直、恥ずかしくて市にたくなるレベル

837 :デフォルトの名無しさん:2009/11/10(火) 19:53:21
>>834
社員の悪口と暴露話ばかりで
気分が悪くなった

838 :デフォルトの名無しさん:2009/11/10(火) 20:13:57
>>836
逆に勿体ないよ。こんな人物がエロゲー会社に埋もれてるなんて。
結局、トップになったから安定を選んだのか。
所であんたは何の仕事してる?
俺は悪名高きコ○ミでサブとツールを作ってる。コンパイラもね。

>>837
エロゲスレやPC-98のスレを見ていてこのブログの存在は知っていたが、
エロゲスレでは英雄、PC-98スレではスタジオトゥインクルからの脱退までは
よくぞ話してくれたと言う雰囲気。

スタジオトゥインクルからの脱退は賛否両論で色恋での脱退説が濃厚だった。

その後の殻の中の小鳥を作って以降は同情だったな。

839 :838:2009/11/10(火) 20:17:54
エロゲスレ->エロゲ規制スレ。
外圧で陵辱ゲームを規制したソフ倫の理事が規制を無かったことにして暴走中。

840 :デフォルトの名無しさん:2009/11/10(火) 20:25:59
えーと、他所でやってくんない?

841 :デフォルトの名無しさん:2009/11/10(火) 20:33:04
>>838
コナミってゲーム作るところじゃないの?
ゲーム作らせてくれないの?

842 :838:2009/11/10(火) 20:34:31
すまん。他人の悪口しか言わない奴を見ると反論したくなってさ。

コ○ミではスクラッチでコンパイラ作ってたよ。
関わったソフトがほんとーにたまたま売れて社長賞とかいうのももらった。
変な会社だよ。

843 :デフォルトの名無しさん:2009/11/10(火) 20:35:42
このスレの数字コテのアホさ加減見ればティンとくるはず。
壊れてんだよ。

844 :838:2009/11/10(火) 20:36:54
>>841
ゲームは1人で作る物ではないよ。
たとえば敵のアルゴリズムの為のコンパイラとか。
プログラマは企画者の単なる駒だよ。

845 :デフォルトの名無しさん:2009/11/10(火) 20:37:58
>>843
嫉妬は醜いよ。

846 :838:2009/11/10(火) 20:42:17
>>843
たしかに壊れてる会社だったよ。
しかし給料は良い。
所であなたは何をしてる人?研究者か何かかな?

847 :デフォルトの名無しさん:2009/11/10(火) 20:42:39
会社に友達いるの?

848 :838:2009/11/10(火) 20:46:57
もちろん。飲みに行くと会社の悪口やエロゲやアニメの話ばかり。
でも、見た目はスタイリッシュな奴が多いよ。
前の会社のア○ラスでは、オタクっぽい恰好の奴が多かった。

849 :デフォルトの名無しさん:2009/11/10(火) 20:57:21
アトラス?のどこが嫌だったん?
コナミ?にしたのは何で?


850 :デフォルトの名無しさん:2009/11/10(火) 20:58:53
>>836
エロゲと言うだけで一等下に見られるのか。
作ったプログラムで見るべきじゃないのかな。
ここではコンパイラの出来で見ないと自分の品が落ちるぞ。
>>837
悪口なんて書いてないじゃん。どこが悪口?

851 :838:2009/11/10(火) 21:00:33
>>849
ヘッドハンティング。給料UP。これ以上言うと身バレするから勘弁。

852 :デフォルトの名無しさん:2009/11/10(火) 21:01:21
悪口は何時も単発だなw

853 :デフォルトの名無しさん:2009/11/10(火) 21:05:10
ア(クアプ)ラスかもしれないだろ

854 :デフォルトの名無しさん:2009/11/10(火) 21:08:27
>>851
いやもう見る人が見れば特定できると思うけど。
ゲロしちゃいなよ。

855 :デフォルトの名無しさん:2009/11/10(火) 21:10:50
本当は羨ましいんだよ。
98時代はメモリツールで有名で、
思想は古いがコードを組む能力は凄く秀でている。
しかもポルシェ乗り回して2つの会社経営者。
そしてなんと言ってもメイドブームの始祖の殻の中の小鳥のプロデューサー兼プログラマ。
今もここやエロゲ規制スレでは名が通っている。

俺も何か後世に残せる物を作りたかったが、無理だった。
今はケツに火が付いたコンシューマゲーム屋の管理職。
コンパイラのプログラムを日曜にちまちま組むぐらいだ。(土曜も出社)

856 :デフォルトの名無しさん:2009/11/10(火) 21:20:21
メイドブームってファミレスが元じゃなかったっけ
かなりスレ違いだがw

857 :KENJI:2009/11/10(火) 21:22:07
もうそろそろプログラムとは関係ない話は辞めて欲しいです。
せっかくの良スレが台無しです。

コンパイラを組める方々が集まってきているスレですので、
自分よりもっと凄い方も多いと思います。

そんな中でスレタイにそった話しは自分が引き合いに出されても
しょうがないですが、スレ違いの話は少なくとも自分については
あまりしないでいただけると嬉しいです。

かな入力からローマ字入力に切り替えたばかりなので時間がかかるかも
しれませんが、自分個人的なことはブログで質問なり罵倒なり
していただけると嬉しいです。

858 :デフォルトの名無しさん:2009/11/10(火) 21:24:28
>>856
殻の中の小鳥がメイドブームの始祖。
メイド喫茶は殻の中の小鳥の影響を受けたPiaキャロが始祖。

859 :デフォルトの名無しさん:2009/11/10(火) 21:25:09
>>857
本人?

860 :デフォルトの名無しさん:2009/11/10(火) 21:30:52
本人かどうかはともかく、ゲームの話はよそでやろうぜ
せめて雑談スレとか

861 :838:2009/11/10(火) 21:44:31
>>857(KENJI氏)
1つだけ聞かせて下さい。
なぜ、エロゲー会社にこだわったのですか?

862 :デフォルトの名無しさん:2009/11/10(火) 21:45:38
メイドブームは知らないが
これまでのメイド萌えを牽引してきたのは雪さんだよ!

863 :KENJI:2009/11/10(火) 22:10:10
中学生の頃、ログインなどでゲームソフトが
掲載されて10万とか貰えて嬉しかったのです。
その延長で高校時代にアルバイト紙を見ていたら
エロゲー会社の求人が合ったので飛び込んでみました。

しかし、本当はエロゲー制作は学生時代だけにして、
ロボット関連の仕事に就きたかったのです。

でも作っていくうちにユーザーの反応がアンケートハガキやネットで
ダイレクトに返ってくるエロゲーのプログラムも面白いと思い、
最終的には成り行きで会社を作ることになってしまいました。

会社の資金を獲得するために、
本当に様々な言語で様々なプログラムを組みましたが、
一番楽しいのはユーザーとの距離が近いエロゲーと言うことを
再確認させられ、未だに会社をやっています。

あと、単純にエロいシチュエーションなどを
考えるのが好きというのもあります。

最後に、スレタイにそった話題として、
エロゲなどの演出では大量にラベルが発生します。
その上、自分のVMはwindows apiのラッパーみたいな物で、
メッセージ1行表示するには20個のlocal label、
簡易版のcgの表示では100個ものlocal labelが生成されます。
ですのでラベル解決には高速なアルゴリズムと高速なプログラムが必用です。
ですので、トライ木をインラインアセンブラで組んでいます。

VMの実装方法はエロゲー会社、各社色々見たいですね。
コンパイラも最初の1文字が#だとcg表示とか、様々なようです。

864 :383:2009/11/10(火) 22:26:13
>>863
ご回答、有難う御座います。
好きでやっているんですね。
一番の理由ですね。


865 :デフォルトの名無しさん:2009/11/10(火) 23:37:54
>>855>>863
吐気がする


866 :デフォルトの名無しさん:2009/11/11(水) 00:41:09
>>865
何故か一言で罵倒する人が数人いるが、理由は何だ?


867 :デフォルトの名無しさん:2009/11/11(水) 00:45:45
有名税だよ。いちいちきにするな

868 :デフォルトの名無しさん:2009/11/11(水) 00:57:55
はいはい、ブログでやりましょうねー

869 :デフォルトの名無しさん:2009/11/11(水) 01:07:31
KENJI氏より凄い言語&実装をしているが、会社所属なので表に出せない鬱憤…かもしれない。
しかし、品のない言葉は発言者自身の品格を下げるから、我慢しなよ。

870 :デフォルトの名無しさん:2009/11/11(水) 01:46:12
コ○ミの知的財産戦略
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%8A%E3%83%9F#.E3.82.B3.E3.83.8A.E3.83.9F.E3.81.AE.E7.9F.A5.E7.9A.84.E8.B2.A1.E7.94.A3.E6.88.A6.E7.95.A5
こういう会社だから?

871 :デフォルトの名無しさん:2009/11/11(水) 02:46:35
自演くさいレスが異様に続いて
最近変な雰囲気になっていると思ってたら
やっぱり本人が来てたな。

872 :デフォルトの名無しさん:2009/11/11(水) 03:56:40
はいはい、自作自演自作自演ね、こんな所でしてどうするw
エロゲ板のシステムを考えるスレから信者が来たんだと思う
ブログも賛美の嵐。
反ソフ倫のよりどころだからな。

873 :デフォルトの名無しさん:2009/11/11(水) 04:12:55
自作自演するならエロゲーネギ板でやるでしょ。
12月に出る、ソフトをより過激に変更してる最中なんだからこんな所で油売ってる暇なんてないでしょ。
まったくもうw

874 :デフォルトの名無しさん:2009/11/11(水) 04:19:53
本人も戸惑ってるみたいだし、忙しい人だからここら辺にしておかないか?

875 :838:2009/11/11(水) 06:05:05
おはよう〜。
>>854
そういうの、あんまり気にしない社風。同僚が読んでいたらばれてるだろうな。
飲みの時に自分から話しちゃうから気にしないけど。

以前知り合いがスクエニ辞めてパチンコ/パチスロの下請け会社を作ったんだけ
ど、
前は超羽振りが良かったのが少し羽振りが良い程度に落ち着いたから、
パチンコ/パチスロ業界も下火になっていくだろう。
羽振りが良いままなら入れてもらおうかと思ったけど。

>>870
そう言う会社。早く辞めたいけど給料が良い。

シャワーを浴びて会社に行く前にスレでも巡回するか。
自宅だと早起きさせられるのと結婚結婚うるさいのがガンw

プログラマ40才限界説って中田先生見てると嘘だなーって思う。
老後のため、まだまだ頑張らねば。

876 :デフォルトの名無しさん:2009/11/11(水) 07:30:04
>>862
殻の中の小鳥は10年前はコミケでも
コスプレ多数でジャンルとしても確立してたんだよ。
それはもう凄い人気だった。
あいにくブログやスレを読むまで、ヤマトで例えると
KENJI氏=西崎、栄夢氏と新井氏=松本レイジって
関係だったとは知らなかったよ。

877 :デフォルトの名無しさん:2009/11/11(水) 09:05:59
なんか IGDA の勉強会で顔を見てそうだなw

878 :デフォルトの名無しさん:2009/11/11(水) 09:32:13
もうそろそろ勘弁してもらえませんか?


879 :デフォルトの名無しさん:2009/11/11(水) 10:07:43
ソフ倫関係者に相当恨まれているらしい。

_ コンパイラスレ住人 ― 2009/11/11 04:41
自作自演、乙。

_ KENJI ― 2009/11/11 09:41
そう取られてもしょうがない流れでした。
迷惑をかけましてすみません。

_ (未記入) ― 2009/11/11 09:54
ソフ倫の裏切り者。


880 :デフォルトの名無しさん:2009/11/11(水) 10:18:40
巣に帰ってください
お願いします
興味ないです


881 :デフォルトの名無しさん:2009/11/11(水) 10:24:48
>>875
中田先生は凄いですね。
第2版も面白そうなので買います。
内容も今までの集大成と最新技術を合わせたような感じで、期待が高まる。
念のため本屋で立ち読みして、
JBOOK(ポイントが付く)でクレカで買えばクレカポイントも付くしね。

>>879
有名税でしょうね。しかし謙虚で真摯な方だ。
ブログを読んでもメンヘルっぽさは出しているが、他人の悪口なんて言ってない。
やはりソフ倫という機構の方がこのスレに紛れ込んで人格攻撃に出てるんだな。

882 :デフォルトの名無しさん:2009/11/11(水) 10:35:25
言語の大体の仕様と実装方法が解ったから、
この一連の書き込みはもう打ち止めで良いだろう。
相手も迷惑を被っているみたいだし。

しかしそうなるとシーンとなって寂しいか感じがw

883 :デフォルトの名無しさん:2009/11/11(水) 12:39:40
大量の巨大ファイルをコンパイルするのに、
あえてマクロで構文を実装、汎用化も高める。

そしてスピードを補うためにmake内蔵、
ホットスポットのインラインアセンブラ化、

大量のラベル解決のためにトライ木をインラインアセンブラで書く。

チト古くさいが理想と実装を両立した言い言語だったな。
13年も使って、まだ色あせないか。

まとめるとこんな感じかな。これでこのお話はお終い。
HPの方で2部を再開してくれたりソースコードを公開してくれたりしたら
テンプレ入りしてもいいわだいだったが、本人にその気がないからお終い。

884 :デフォルトの名無しさん:2009/11/11(水) 12:47:41
( ゚д゚)ポカーン

885 :デフォルトの名無しさん:2009/11/11(水) 12:56:33
次の話題は中田先生の本だな。

886 :デフォルトの名無しさん:2009/11/11(水) 13:15:38
LLVMのcompiler-rt/BlocksRuntimeのコードを読んでみた。
かなり汎用性が高そうだから、
マルチスレッドの効率を重視した設計の言語(ex. Erlang)実装で、
BlocksとGrand Central Dispatchが流行るかもしれない。
http://developer.apple.com/mac/articles/cocoa/introblocksgcd.html

887 :デフォルトの名無しさん:2009/11/11(水) 14:16:07
GCDがLinuxでも実装されたら来るかも?
FreeBSDは始まってるわけだが。

888 :デフォルトの名無しさん:2009/11/11(水) 15:17:40
ぶり返して悪いんだけど、K氏の言語ってLL、それともLR?

889 :デフォルトの名無しさん:2009/11/11(水) 17:19:40
電卓を手書きでつ作りました。次に作るのは何がお薦めでしょうか。

890 :デフォルトの名無しさん:2009/11/11(水) 18:33:48
(1)パーサジェネレータを使ってみる。
(2)電卓みたいにその場で計算してしまうんではなくて、構文木を作る。

とか。

891 :デフォルトの名無しさん:2009/11/11(水) 19:05:19
>>889
UNIXのbcみたいなプチプログラムの書ける電卓

892 :デフォルトの名無しさん:2009/11/11(水) 19:41:56
>>890
サンキュウ。
RPNでやってたから機械的にコンバート出来てたから(2)をやってみるよ。
>(2)電卓みたいにその場で計算してしまうんではなくて、構文木を作る。


おまけに面白い記事。

67歳の美少女ゲームメーカー社長に話を聞いた
http://ascii.jp/elem/000/000/418/418376/index-2.html

67才でエロゲー会社社長って凄いね〜。
職業に貴賎は無いんだな。


893 :デフォルトの名無しさん:2009/11/11(水) 20:34:17
>>892
機械的にっていうとstackかな?
構文木でやってみるのも違いが分かって良いと思うよ。

……67才でエロゲー会社社長か。好々爺って感じでほのぼのするねw
確かに職業に貴賊はないね。
次はコンパイラ界の好々爺、中田先生の2版の話をしよう。


894 :デフォルトの名無しさん:2009/11/11(水) 22:55:20
いいかげんにエロゲだけの話は勘弁してくれ。

どうせならスクリプトのドメイン特有のノウハウをもっと話題にしてくれ。
実装はあんまり興味無いから構文とかの話の方がいいな。


895 :デフォルトの名無しさん:2009/11/11(水) 23:18:23
ついでのダベリ話しもダメか。
その上、実装の話は嫌とかどんな我が儘。
ゆとりか?
エロゲはともかく実装の話はスレチじゃないだろう。
スレは君の物じゃ無いんだよ。

896 :デフォルトの名無しさん:2009/11/11(水) 23:33:36
Erlangを凌駕した超並列言語を実装したいのですが
どうすればいいの?



897 :デフォルトの名無しさん:2009/11/11(水) 23:45:08
>895
流れで少しだけならわかるけどさすがに脱線しすぎだろ。
実装の話でもいいけど、ドメイン特有のチューニングの話されてもあんまり面白くないからなあ。
それだったら一般的な最適化の話とか>1とかの話の方が良いわけで。

>896
オブジェクトがそれぞれプロセス/スレッドを持つようにしたらどう?
効率悪そうだけど。

898 :デフォルトの名無しさん:2009/11/12(木) 00:12:01
>>896
上に出てるgoとlibdispatchを参考にして考えたら?

899 :デフォルトの名無しさん:2009/11/12(木) 00:23:59
>>896
FPGA上で極小CPU同士が通信するとか。

900 :デフォルトの名無しさん:2009/11/12(木) 00:56:10
凌駕
超並列言語
実装

漠然としすぎているから、定義から始めますか

901 :デフォルトの名無しさん:2009/11/12(木) 06:41:57
まず、普通の並列と、超並列はどこが違うか?

902 :デフォルトの名無しさん:2009/11/12(木) 07:02:40
超並列マシンを想定した言語ってところですか

903 :デフォルトの名無しさん:2009/11/12(木) 09:12:57
FGPAにZ80を入れるプロジェクトって、結構あったね。
現代最大のFPGAにはZ80が何個入るんだろう。
LSI-CやASM80でスレッド間通信すれば、
超並列処理の実行形を自分で作ることも可能だね。

_ KENJI ― 2009/11/12 05:22
ふう、コンパイラスレの方も一段落したみたいです。
もし、私の弁護のために書き込まれた方がいらっしゃたのでしたら
ああいう方法は逆効果です。何もせずそっとしておいていただけると嬉しいです

904 :デフォルトの名無しさん:2009/11/12(木) 09:39:28
>FGPAにZ80を入れるプロジェクトって、結構あったね。
>現代最大のFPGAにはZ80が何個入るんだろう。

すべてのインストラクションを使うつもりなら
丸ごとCPU入れるのも有りだが
使ってない機能が大半ならスペースがもったいないだけ
自作CPUなり必要な機能部分だけでマルチにする方が効率いいよ

905 :デフォルトの名無しさん:2009/11/12(木) 10:08:14
可哀想だしスレチだからもう辞めてやってくれ。

906 :デフォルトの名無しさん:2009/11/12(木) 10:49:42
ランビーか次世代のGPUかだな。

907 :デフォルトの名無しさん:2009/11/12(木) 12:07:23
ソフ倫様に楯突くとどこまでも追っていくよ。警告だよ。
KENJI、お前のせいでみんなが迷惑するんだよw

908 :デフォルトの名無しさん:2009/11/12(木) 13:07:45
うむ。
もしかして、ワンチップ LINKS-2 とか可能かなw

909 :デフォルトの名無しさん:2009/11/12(木) 18:46:21
>>907
何の事情か知らないが、とてつもなくキモイ。消えろ。

910 :デフォルトの名無しさん:2009/11/12(木) 19:14:40
>>904
マイクロPlanやSweet16みたいなVMのプロセッサとか昔よくあったスタックマシン系の小さいメモリを効率よく回すタイプのCPUを山のように搭載するのもありなのか?


911 :デフォルトの名無しさん:2009/11/12(木) 19:19:22
少し昔、INTERFACE紙でFPGAを使ったCPUコンテストをやってたな。
最新のFPGAを使えばJAVAVMを乗せたり、CISCを少量乗せたり、
単純なRISCを乗せたり出来そうだね。もちろんインオーダーで。
そうすれば、コンパイラも色々な可能性が出てくるね。

912 :デフォルトの名無しさん:2009/11/12(木) 19:24:08
>>910
ありじゃない。x86系はenter/leaveを実装してるけど、
遅いんで実装時には使われていないけど
本来、関数型言語やoopはstackをよく使い相性が良いよね。

>>911
誤)単純なRISCを乗せたり
正)単純なRISCを多量に乗せたり

913 :デフォルトの名無しさん:2009/11/12(木) 19:28:27
>>912
ありならOCCAM系で一つ遊んでみたいぜ


914 :デフォルトの名無しさん:2009/11/12(木) 19:54:10
>>913
X: ありならOCCAM系で一つ遊んでみたいぜ
O: ありならTransputer系で一つ遊んでみたいぜ

915 :デフォルトの名無しさん:2009/11/12(木) 19:56:40
>>914
一応スレタイくらい汲んでほしいって配慮じゃないの?


916 :911:2009/11/13(金) 01:10:53
Intelの80コアの並列プロセッサ、ランビー、次世代GPUで、
コンパイラの歴史が変わるのは決まってるね。
言語もメニイコア用の言語が出来るんだろうね。楽しみだ。

ソフ倫って奴らは本当にクズ揃いだな。

917 :911:2009/11/13(金) 08:29:06
メニイコア用の言語が標準化すれば、スレッド単位の融通性が凄く効く言語になるだろうな。
実行モジュールのループをVMが管理して、走らせているスレッド単位に割り当てるとか。
実装は困難を極めそうだな。

メニーコア用のコンパイラの論文って日本語である?

http://qiufen.bbspink.com/test/read.cgi/hgame/1258009910/137-
漢だ。

918 :デフォルトの名無しさん:2009/11/13(金) 11:33:42
いいかげんにしろ

919 :デフォルトの名無しさん:2009/11/13(金) 13:08:53
あんまり目くじらを立てるのもどうかと…。
GPUのメニイコア用言語って、
●Cg(C for graphics)
●HLSL(High Level Shader Language)
●GLSL(OpenGL Shading Language)
とかがあるけど汎用性が無いし、
ループの展開を自動割り当てなんてVM、聞いたことがない。
面白い発想だと思うけど。

920 :デフォルトの名無しさん:2009/11/13(金) 13:12:51
>>919
GPUはmany coreっていう範疇とは少し違う気がする
演算素子がたくさんあるんだけど、フローの数が少ないと思うの


921 :デフォルトの名無しさん:2009/11/13(金) 22:37:14
CUDAに来年JVM搭載されるよ

922 :911:2009/11/14(土) 14:28:28
レンホウのせいで世界一の日本のスパコン界も壊滅。

923 :デフォルトの名無しさん:2009/11/14(土) 14:42:34
世界一だったこともある、だろw

地球シミュレータよりあとは、頂点も裾野もズタボロじゃねーか。

924 :911:2009/11/14(土) 16:40:56
イヤ、報道ではそう言ってたんだよ。地球シミュレーター以降、
AMDのクラスタにさえ負けてる。

925 :911:2009/11/14(土) 16:43:04
正確に言うと、
レンホウのせいで世界最高峰レベルの日本のスパコン界も壊滅。
しかしAMDのクラスタにすら負けている状態なので当然か。

926 :デフォルトの名無しさん:2009/11/14(土) 17:53:14
世界スパコン選手権脱落宣言ということか。

927 :デフォルトの名無しさん:2009/11/14(土) 20:21:56
俺はまだよく分かってないが、12年度完成の日本のスーパーコンピュータが
世界最速になる予定だった。
だけどアメリカがそれを上回る速度のものを先にだす予定を組み
日本はアメリカの次になり国別で2位。
でも世界最高峰レベル。
民主党はそれを中止させたという話ではないの?

928 :デフォルトの名無しさん:2009/11/14(土) 21:15:30
〜〜2006年 アメリカ IBM Blue Gene/L 500TFLOPS
文科省「京速コンピュータつくろうぜ」
民間「おう、世界一目指そうぜ!」
文科省「2千億かかるから民間も半分出せよ」
民間「まあ、しかたねーな」

〜〜2008年 アメリカ IBM Roadrunner 1PFLOPS

〜〜今年5月
NEC「去年3千億の赤字、今年はトントンの予定で
   追加の100億が出せそうにない。スマンナ」
   (富士通のプロセッサ採用するなら、残ってる意味ないし…)
日立「NECがやめるならうちも降りる」

理研・富士通「白紙から設計し直さなきゃうわああ…」

〜〜今年7月 アメリカ 1EFLOPS級スパコンの研究開始

〜〜今年10月 中国 天河1号完成(理論値1.2PFLOPSに対して、実測値563TFLOPSのお粗末さ)

〜〜今年11月
民主党「gdgdすぎるからもうやめれ」 ←いまこのへん

929 :デフォルトの名無しさん:2009/11/15(日) 02:19:05
ν速民はその話で散々ファビョってたな
専門家でもないのに、よく「これで日本のIT技術は終わり」なんて自信満々に言えるよ

930 :デフォルトの名無しさん:2009/11/15(日) 02:25:27
理研って有名なワカメスープ作ってるとこだよね

931 :デフォルトの名無しさん:2009/11/15(日) 02:31:33
科学の発展にスパコンが必要なのは明らかだけど地球シミュレータの利用料高すぎ。
まあ科学予算でスパコンつくってる国が、国防予算でやってる国に張り合えるはずがないんだけどね

932 :911:2009/11/16(月) 08:46:41
>>928
ここまでぐだぐだなら、国と大学メンツはおいといて、一度クールダウンする必用があるな。
それだけ金をつぎ込んでNo1に成れないのであれば、メンツも糞もない。
スカラー型とベクトル型でベクトル型に固執する日本。
ピークスピードはベクトル型がまさるがスカラー型の方が平均性能が上。しかも今はピーク時も上。
所詮、莫大な軍事予算を投入するアメリカにはいつまで経っても追いつけない。
アメリカはベクター型と専用機又はスカラー型の組み合わせも考えている

933 :デフォルトの名無しさん:2009/11/16(月) 08:48:28
ハードウェア板にスレあるからそっちでやってね。

934 :デフォルトの名無しさん:2009/11/16(月) 08:51:55
どうみても老害教授のメンツだよなぁ

935 :デフォルトの名無しさん:2009/11/16(月) 13:33:04
アメリカはスピード至上主義でアセンブラでカリカリやるしかなくて
それでやっと最高性能だけどけど、
日本はC,Fortranで開発できて使いやすい高性能という方向を
目指しているってことじゃないの?

936 :デフォルトの名無しさん:2009/11/16(月) 15:00:47
スカラ型じゃ料金高いスパコンなんて誰も使ってくれないよ。
京速はスカラ・ベクトル型だったからこそ意義があった。

937 :911:2009/11/16(月) 16:31:58
>>953
逆じゃね?
スカラー型の方がコンパイラを作り最適化するの大変だぞ。
それより難易度の高い遅延分岐命令のコンパイラも
ゲーム業界ではいっぱい作られてるから問題ないかもしれないが。

938 :デフォルトの名無しさん:2009/11/16(月) 22:08:06
この数字コテは何の意味があるんだ

939 :911:2009/11/17(火) 03:18:11
>>938
うん。同一人物の発言と解って貰いたいから。
2chのシステム上で可能で、違法じゃないことをやって何か悪いことでも?

940 :デフォルトの名無しさん:2009/11/17(火) 05:01:22
KYだなと思っただけ

941 :デフォルトの名無しさん:2009/11/17(火) 06:12:03
どうぞ数字コテは続けてください

942 :デフォルトの名無しさん:2009/11/17(火) 06:15:24
どうせならNGしやすいようにトリップでもつけてくれよ

943 :デフォルトの名無しさん:2009/11/17(火) 07:36:23
>>940-942
911氏の発言はクレイバーで問題ないと思うが。
ソフ倫関係の話もついでだし、当時PC98でLSI-Cやエロゲをやっていた者には興味深い。

944 :デフォルトの名無しさん:2009/11/17(火) 07:43:34
941≠942だよ
だから数字コテは続けてくださいと言っておろうが

945 :デフォルトの名無しさん:2009/11/17(火) 07:58:57
>>941&>>942
すまん。
911氏も読みたくない奴はNGして欲しいから敢えてやってると思う。
自分も911氏と同じようにベクター型よりスカラー型の方がコンパイラを作りにくいと思う。
manycoreの実行モジュールのループをVMが管理して、走らせているスレッド単位に割り当てるとかスカラー型に有利な発想もしている。

946 :デフォルトの名無しさん:2009/11/17(火) 08:19:59
で、トリップ付けろって話は?
911じゃ他のスレでも引っかかるから迷惑だ。
暇そうだしコテハンも付けて有名になれよ。
自意識過剰さんにはぴったりだ。

947 :デフォルトの名無しさん:2009/11/17(火) 08:43:09
>>939
喫煙は違法じゃないがどこで吸っても良い訳じゃないだろ?

948 :911:2009/11/17(火) 11:38:07
>>946
有名になる気はないし、自意識過剰でもないよ。
コテハン付けるだけで何でそんなことを推測できるか教えて欲しい。
NG設定にするか読み飛ばすかのどちらかにすれば良いんじゃない?

>>947
禁止されている場所では吸えませんよね。
しかしここでは禁止されてますか?
せめてTPOをわきまえろとでも言って欲しかった。

949 :デフォルトの名無しさん:2009/11/17(火) 12:04:26
トリップの意味判ってないのかおい
トリップ付けたらそれでNG設定できるの
ただの数字コテではNG設定に困るの
これで通じますか?

950 :911:2009/11/17(火) 12:09:22
解ってますよ。では何でコテハンと読み飛ばしではダメだか、言ってみてください。
禁止はされていませんよね?
禁止されれば辞めますよ。
スレ違いで周りに迷惑をかけますので、あまり長引かせないでくださいね。

951 :デフォルトの名無しさん:2009/11/17(火) 12:16:50
禁止されてなけりゃ何でもやる人なのか

952 :デフォルトの名無しさん:2009/11/17(火) 12:21:43
放置すべき状態だな

953 :デフォルトの名無しさん:2009/11/17(火) 12:22:33
殺人が禁止されてなかったら隣人を刺す人かしら

954 :デフォルトの名無しさん:2009/11/17(火) 12:30:41
あいつを殺したくて殺したくてしょうがないんだが、法律で禁止されてるから我慢している。

955 :デフォルトの名無しさん:2009/11/17(火) 12:30:51
周りの奴らの方がスレを荒らしてるように見えるよ!
他人の言論を封じ込め、色々なレッテルを貼り見苦しいよ。
>>952
放置して、スレタイに準じたことを話してよ。
>>953
スレを無駄に使うことは禁止されていないけど、殺人が禁止されてなかったら隣人を刺す人?

956 :デフォルトの名無しさん:2009/11/17(火) 12:32:23
お前の行動が禁止されてるかどうかだけにかかってるからちゃかされるんだよw

957 :デフォルトの名無しさん:2009/11/17(火) 12:37:02
つまり数字コテは荒らしを呼び込むからご遠慮願いますということだな

958 :デフォルトの名無しさん:2009/11/17(火) 12:38:01
次スレでも「911」なのかな

959 :デフォルトの名無しさん:2009/11/17(火) 12:39:46
>>955
いい加減自演すんなよ
おめーのカキコは丸判りなんだよ

960 :911:2009/11/17(火) 12:45:32
>>935
>>937
例えるなら、PS3とXBOXで、XBOXの方が(DirectXと言うのもあるが)作りやすく平均的なスピードを出せるが、
CELLのPS3はカリカリにチューンすれば高速だけど、プログラムを組むのが難しい。

>>957
一番説得力がある。

961 :デフォルトの名無しさん:2009/11/17(火) 12:46:18
>>958
変なのが常駐してるから次スレはリサイクルでどうだ

次スレ候補

新C言語を作ろう
http://pc12.2ch.net/test/read.cgi/tech/1185010023/

962 :デフォルトの名無しさん:2009/11/17(火) 12:57:17
数字コテの活動

KENJI氏blog無断コピペ

自称コ○ミ社員

エロゲ雑談

911

最後はテロリズムか。
次スレは911禁止で立てるわ。

963 :デフォルトの名無しさん:2009/11/17(火) 13:00:09
なにこのスレの延び方。

…数字コテハンをみんなでいじくってるのか。
スレが無駄だから辞めてくんない?

964 :デフォルトの名無しさん:2009/11/17(火) 13:21:40
数字コテハンが黙れば良いと思うよ

965 :デフォルトの名無しさん:2009/11/17(火) 13:30:33
…ったく。好きにすれば。

俺も乗せられてスレを無駄図解したぜ。

966 :デフォルトの名無しさん:2009/11/17(火) 13:39:43
次スレ

「コンパイラ・スクリプトエンジン」相談室14
http://pc12.2ch.net/test/read.cgi/tech/1258431145/





967 :デフォルトの名無しさん:2009/11/17(火) 13:51:04
……オイオイ、いくら何でも911氏の禁止は無しだろう。
まわりが遊んでただけじゃん。
新スレの削除依頼だしといたわ。

968 :デフォルトの名無しさん:2009/11/17(火) 13:55:52
911氏(笑

969 :911:2009/11/17(火) 13:56:30
良いですよ。
禁止されたのであれば従い、コテ無しに戻るだけですから。

970 :デフォルトの名無しさん:2009/11/17(火) 14:01:02
>>969
そうか。俺にはおまいさんに不備が有ったとは感じなかったけどな。
あえて言えば、トリップ付けてればこんな事にならなかっら次からそうしてくれ。

971 :デフォルトの名無しさん:2009/11/17(火) 14:14:39
>>969
見えない敵と戦ってただけだよ。スレ全体の意志じゃ無いんだから、
スルーすれば良かったのにバカだな。

こんな時間から2chに張り付き、コンパイラを作るなんて、
バカと天才は紙一重って事だよ。

972 :911:2009/11/17(火) 15:04:44
GPUコンピューティングが本格的になってきたね。
NVIDIAはFermi系で、内部のマルチスレッディングやメモリの構造を、
より汎用アプリケーションに最適な形で再編したことになる
ttp://pc.watch.impress.co.jp/docs/column/kaigai/20091105_326442.html
ttp://pc.watch.impress.co.jp/docs/news/20091116_329409.html

>>970&>>971
気をつけるよ。

973 :911:2009/11/17(火) 15:13:16
ついでにNECのスパコン

IntelとNEC、スパコン技術の共同開発に合意

NECがベクトル型スパコンの開発で培った経験と、Xeonプロセッサーの性能や機能、
Xeonに搭載される計画のベクトル演算向け拡張命令群「Advanced Vector eXtentions(AVX)」を組み合わせていく。
これにより、Intel Architectureに基づいたスパコンでより高い実効性能を提供する。
ttp://pc.watch.impress.co.jp/docs/news/20091117_329468.html

974 :デフォルトの名無しさん:2009/11/17(火) 15:24:56
>>972,973
そういうのはこっちへ行けばいいと思うんだ

【スパコン】スーパーコンピュータ関連情報3【HPC】
http://pc11.2ch.net/test/read.cgi/hard/1255529941/

975 :911:2009/11/17(火) 15:42:55
>>974
サンキュウ。
超並列CPUでのコンパイラの話題の一環のつもりで書いた。
並列度が上がれば上がるほど、有効利用の方法が難しくなるね。
チップ密度が高くなりシングルスレッドだと、勿体ないし、
CPUの一部だけが使われてピンポイント発熱の問題も出てくる。

並列度を有効利用するにはOSとコンパイラのサポートが必用になってくるね。
発熱の問題はセンサーで感知し、OS側でCPUの代替コア操作が必用になってくるね。

超並列コンピューティングが中小企業や家庭レベルまで来るのはもう少しだけど、
OSとコンパイラのサポートは当分先になりそう。

それまでは、企業で複数のOSを同時に走らせ、
物理的なコンピューターの数を削減するくらいしか役に立たなさそう。

こんな事はここにいる人ならすぐ思いつく話だと思うけど。

976 :デフォルトの名無しさん:2009/11/17(火) 15:42:57
もうある意味テロと救急車にかけたコテ

977 :デフォルトの名無しさん:2009/11/17(火) 15:58:22
俺には君の方が無駄だと思えるんだ。

>>975
動的に、たとえばあなたが言っていたloopの並列化をすればするほど
バス・アービトレーションにより無駄が多くなり、リニアに性能は上がらないね。
特に細かく並列化をすればするほど無駄が多くなるね。
データベースやgoogle等のマルチユーザーアプリケーションや
社内クラウドコンピューティングには有利だね。
すべてをクラウド化する事には災害時やサービス会社の倒産時の面から反対だけど。

978 :303 ◆pFphp4Ej4w :2009/11/17(火) 16:34:24
>>961
若干怒りますよ。
変人を連れこまないで頂きたい。

979 :デフォルトの名無しさん:2009/11/17(火) 18:49:07
>>978
おまえみたいな変人が居るスレは俺等もごめんだ


980 :デフォルトの名無しさん:2009/11/17(火) 19:18:58
>>978
こらこら。勝手に変な番号名乗るんじゃない。
このスレの303はお前じゃなくてオレだ。

981 :デフォルトの名無しさん:2009/11/17(火) 19:52:21
>>980
偽物乙

982 :デフォルトの名無しさん:2009/11/17(火) 19:56:32
なんで911はそんなに嫌われっ子なの?
3行でよろしく。

983 :デフォルトの名無しさん:2009/11/17(火) 19:57:32
自己顕示欲の塊でスレ違いの話題を延々と繰り返すから

三行もいらなかった

984 :デフォルトの名無しさん:2009/11/17(火) 19:59:29
って言うか、みんな性格悪くね〜?

985 :デフォルトの名無しさん:2009/11/17(火) 20:09:42
プログラマは大抵自己顕示欲が強く他人を排斥するもの。
しかもOSやスクラッチでコンパイラを作っている奴らは自分以外のコードを入れたく無かったりして偏屈。
どうしてわかるかって?
俺がそうだから。

986 :デフォルトの名無しさん:2009/11/17(火) 20:26:39
そうゆうのは、ろくでもないプログラムしか作れない奴だけだろ。
色々な人が関わってるコンパイラ、OSはいくらでもある。

987 :デフォルトの名無しさん:2009/11/17(火) 20:53:33
>>980-981
その「新C言語をつくろう」のスレを参照してみ。

988 :デフォルトの名無しさん:2009/11/17(火) 20:54:48
>>980だけだたorz

989 :デフォルトの名無しさん:2009/11/17(火) 23:25:16
電々板に次スレ立てたのは誰やねん!

990 :デフォルトの名無しさん:2009/11/18(水) 00:10:10
>>986
OSをつくろうのひげぽん氏やRUBYのまつもとゆきひろ氏、吉里吉里のW.Dee氏
はどうなの?

991 :デフォルトの名無しさん:2009/11/18(水) 01:03:36
リソースとみなすか、自分で作り上げる世界の対象とみなすかは人それぞれ。


992 :デフォルトの名無しさん:2009/11/18(水) 04:01:36
流れが速くてビックリした。しかし911を除外するのは行きすぎだと思う。
一部の独善的な人達が行動に出ただけだと信じたい。

>>986
偏見の固まりですね。事例を挙げて理論的に反論すべき。でないのなら己の品のなさを自ら公言していると言えよう。
コンピュータの黎明期にも、そして今にもそう言った手法を使い、結果を出している方がごまんと居ます。

993 :デフォルトの名無しさん:2009/11/18(水) 04:16:56
>>987
そのスレの303氏の発言を見たが実装のことなど考えていないし
既存のプログラマが積極的に移行する価値がない(混乱する)ように思える。
C99、又はD言語からGCを取り去った言語だ。

未だに現場ではC言語が生き残り、
実用的な言語になるのに、多少泥臭くとも巨大なソースを高速にコンパイル出来ることが必用なのに、
実装に精通していない。
例え完成したとしても使い物にならない可能性が高いと私は思う。

私見なのでいくらでも反論をどうぞ。

994 :デフォルトの名無しさん:2009/11/18(水) 05:29:35
なんでこのスレは自らの無知をごまかすような1行罵倒レスと
価値ある情報の2つに分類されてるんだ?

あと実装を考えない理想論も多いか。

995 :デフォルトの名無しさん:2009/11/18(水) 05:35:51
>>994
プログラマーだから

996 :デフォルトの名無しさん:2009/11/18(水) 05:46:22
>>994
ごく一部の実践的コンパイラを作った奴と大多数のバカの集まりだから。
しかも大多数のバカが実権を握ってるという矛盾。
だれも自分の言語を公開しない。仕様すら公開しない。

もし、まぐれでオリジナル言語が出来たとしても、
本に載ってたサンプルを改悪した取っつきにくい文法、
実装も>>993の言うとおり
巨大なソースを高速にコンパイル出来ることが出来ない物しか作れない。
だからここから有名になった人は皆無かほんの一部のみ。

997 :デフォルトの名無しさん:2009/11/18(水) 05:53:21
>出来ることが出来ない
まあ落ちつけ

998 :デフォルトの名無しさん:2009/11/18(水) 06:32:40
ウンコを撒く奴も困りものだが

価値ある情報うんぬんをあんまり強調しすぎるのもクレクレと変わらん
受動的な割にスレの状態を気にする男の方って

999 :デフォルトの名無しさん:2009/11/18(水) 06:40:42
>>994
今このスレは酷い自演家とそれに付き合える暇人が集ってるだけだ。
恐らく価値ある情報と思ってるのも君だけじゃないかと。
意図の汲めないスレ違い長文カキコを延々とやられたら居なくなる。
早めにトリップ付けるべきだったね。


1000 :デフォルトの名無しさん:2009/11/18(水) 06:50:15
とりあえず911は病院行け

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

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

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