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

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

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

1 :デフォルトの名無しさん:2006/10/15(日) 11:38:10
プログラミング言語処理系の開発に興味のある人達のスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,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/
関連リンクは多分 >>2-10 あたり

2 :デフォルトの名無しさん:2006/10/15(日) 11:38:42
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 :デフォルトの名無しさん:2006/10/15(日) 11:39:14
★字句・構文解析

・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 :デフォルトの名無しさん:2006/10/15(日) 11:39:49
★ごみ集め

・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 :デフォルトの名無しさん:2006/10/15(日) 11:40:24
★学会

・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 :デフォルトの名無しさん:2006/10/15(日) 11:40:56
★参考書籍

・コンパイラ 原理・技法・ツール 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 :デフォルトの名無しさん:2006/10/15(日) 11:50:25


8 :デフォルトの名無しさん:2006/10/15(日) 11:55:01
ごめ。21st Century Compilers差し替えるの忘れてたので次にはよろ

・Compilers: Principles, Techniques, and Tools(Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
 http://www.amazon.co.jp/gp/product/0321486811

9 :デフォルトの名無しさん:2006/10/15(日) 13:42:10
>>8
それドラゴンブックと違うの?

10 :デフォルトの名無しさん:2006/10/15(日) 14:31:56
改訂版だろ?

早く訳されたやつでないかな(・∀・)

11 :デフォルトの名無しさん:2006/10/17(火) 00:02:01
Ahoをアホつって通じるかな

12 :デフォルトの名無しさん:2006/10/17(火) 00:55:29
C++用パーサジェネレータ作ってみた
暇な人いじってみて
http://tinyurl.com/yefoxa

動かなかったらごめん

13 :デフォルトの名無しさん:2006/10/17(火) 01:13:01
なんじゃ
また構文解析か

14 :デフォルトの名無しさん:2006/10/17(火) 10:45:19
>>11
スロバキア語でAhojって通じるかな

15 :デフォルトの名無しさん:2006/10/17(火) 10:52:24
>>12
あのね、今時そういうの流行らないの。
だいたい、同じようなものがいくらでも存在するのに、なんでそういうの作ろうと思ったわけ?
新規性がないんだよね。
いや、悪いとは言わないよ。
でも、これからのコンパイラ作りというのは、COINSやGCCのような
コンパイラインフラストラクチャ(COINSの用語を借りるなら)を利用して
最小限の労力で必要な部分だけを作るというように変わりつつあるのに、
君は今時そんなことをやってるんだねぇ。


16 :デフォルトの名無しさん:2006/10/17(火) 11:05:49
>>15
いいよねぇ、ケチだけつける楽な人生で



17 :デフォルトの名無しさん:2006/10/17(火) 11:14:24
>>16
>>16

18 :デフォルトの名無しさん:2006/10/17(火) 11:15:44
>>16
だってほら、何かしようとする子って「やる気」がある子でしょ?
そういう子は先につぶしておかないと後々やっかいなんですよ。

19 :12:2006/10/17(火) 11:46:01
私が既存のどれを試したかはドキュメントにも書いた( http://tinyurl.com/yzxbdl )。
新規性がないということも書いたよ。
コンパイラの開発者ではなく、職業プログラマが、道具として、
小さいパーサを必要なところで自由に使えるものを、
というコンセプトで作ったものです。
自分はコンパイラにも使うつもりだけど。

私だって何も制約がなければocamlyacc使うよ。
ocamlであるということ以外、特に不満ないし。
既存のパーサジェネレータと格闘したことあれば
わかってもらえると思うんだけどなあ。勘違いかな。

COINSにパーサジェネレータあるの? どこ?
web見るとJavaCC使ってるようだけど……

caper作ってから発見した(見落としてた)のは以下の二つ。
後者はJavaだけど。

glrParser( 全然知らなかった )
notavaCC ( javaに興味がなかった&名前がJavaCCに似てたんで無意識にスルーしてしまっていた )

20 :15:2006/10/17(火) 17:37:36
自分が何かを為す分のエネルギーを全部他人の足を引っ張ることに使って
何が悪いのさ。

21 :デフォルトの名無しさん:2006/10/17(火) 18:04:01
>>19
あれ?もう一度みたんだけど、最初読んだとき、>>15が書かれる前だけど、と微妙に内容が変わってないか?

22 :デフォルトの名無しさん:2006/10/17(火) 18:10:16
>>19
あんたが考えているようなものはすでにいろんな人がいろんな実装を作っていて、新しいものを作っても大抵は他の人がやってる事なんだよ、残念だけど。
20年以上も前なら人気があった分野だけど、今は>>15が言うように変わってきている。

23 :12:2006/10/17(火) 18:15:23
微妙に変わってるけど、ほとんど見た目とかリンクだけだと思うよ。
svnのdiffみる?


24 :デフォルトの名無しさん:2006/10/17(火) 18:28:35
nScript改造した方が早かったのにね

25 :デフォルトの名無しさん:2006/10/17(火) 18:54:46
>>15
少しは他人の仕事も認めてみてはどうだ?
昔、自分でやってみて失敗したから腹いせなのかねぇ

26 :デフォルトの名無しさん:2006/10/17(火) 19:21:17
認めるって12を?
この程度だと、高校の部活で作ったレベルだと思うけど。
はっきり言って何一つ面白くない。

27 :デフォルトの名無しさん:2006/10/17(火) 19:32:06
レベル表現に中高が出てくるレスはどういうわけか説得力が無い

引くに引けないから逆撫でに終始してます、みたいな

28 :デフォルトの名無しさん:2006/10/17(火) 19:33:38
高校生乙。
俺の勝ちだな。

29 :デフォルトの名無しさん:2006/10/17(火) 19:52:39
>>28
一言多かったようだが、その態度は止めとけ。
その一言が、お前が認められない原因なのかもな。

30 :デフォルトの名無しさん:2006/10/17(火) 20:19:40
作ってない奴よりは上だろうな
出来るけどやらないだけとかいう奴は論外

しかし面白くないという意見には100%同意

31 :デフォルトの名無しさん:2006/10/17(火) 21:13:06
>>29
他人のふりして説教か。
つくづく負け犬というのは、まっとうな言論でまったく勝ち目がなくなってからが
「本腰の入れ所」なんだな。
消えろ、ゴミ。

32 :デフォルトの名無しさん:2006/10/17(火) 21:21:41
>>31
本人のふりして煽りか。
つくづく負け犬というのは、まっとうな言論でまったく勝ち目がなくなってからが
「本腰の入れ所」なんだな。
消えろ、ゴミ。

33 :12:2006/10/17(火) 21:41:11
そんなことより鮫の話しようぜ

34 :デフォルトの名無しさん:2006/10/17(火) 23:48:40
>>33
鮫ってなあに?

35 :デフォルトの名無しさん:2006/10/18(水) 00:01:05
http://nanashi.info/img/mirror/1123177027649.jpg

36 :デフォルトの名無しさん:2006/10/18(水) 02:42:56
>>30
面白くないなら面白いlこと書いてよ

37 :デフォルトの名無しさん:2006/10/18(水) 03:47:32
前スレのx86の命令表とかwikiにまとめてあるとうれしいなぁと
思いました。


38 :デフォルトの名無しさん:2006/10/18(水) 06:11:50
>>31-32 ゴミですが消えてくないんですけど?

39 :デフォルトの名無しさん:2006/10/18(水) 10:17:39
それっぽっちの日本語も正しく書けないとは、
本当にゴミだな。

40 :デフォルトの名無しさん:2006/10/18(水) 10:47:30
>>39
日本語にそれっぽちもあれっぽちもあるんですか?

41 :デフォルトの名無しさん:2006/10/18(水) 10:55:10
ここではクラスとしての日本語とインスタンスとしての日本語を
区別する必要があって、39は前者、40は後者なわけだ。
40のスクリプトエンジンは、意味解析に難があるな。

42 :デフォルトの名無しさん:2006/10/18(水) 12:42:23
>>40
文章もソースコードも、量が多いほど「きちんと成立させる」のは難しくなる。
逆に、たかが一行の内容の無いレスさえまともに書けないなんてのは論外。

こんなこと(量について言っているということ)さえ説明されなきゃわからないとは、
本当に頭が悪いんだな。

43 :デフォルトの名無しさん:2006/10/18(水) 12:46:14
>>42
数行に渡る説明よりも、一行の方が分かり易いが?

44 :デフォルトの名無しさん:2006/10/18(水) 12:48:00
>>43
唐突に関係ない新しい切り口を持ち出して、さも反論のように書かないように。

45 :デフォルトの名無しさん:2006/10/18(水) 12:49:57
なんで急に書く話が読む話にすり替わるんだろう

って書こうとしたら、当事者の反応の方が早かった。

46 :デフォルトの名無しさん:2006/10/18(水) 13:00:47
>>37
http://freshmeat.net/projects/ia-32-instrdb/

47 :デフォルトの名無しさん:2006/10/18(水) 14:56:26
キチガイはそろそろほっとくか・・
まあまあ楽しかったけどな。

48 :デフォルトの名無しさん:2006/10/18(水) 16:19:27
お前ら釣られすぎw

49 :デフォルトの名無しさん:2006/10/18(水) 20:15:11
いや、どうせならVB用のパーサジェネレータ作ってくれれば良かったのに、、、


50 :12:2006/10/18(水) 22:28:18
もうどうでもよさそうな話終わった?

>>49

VBって処理系無料?
無料だったら、exampleのhello0.hppをVBで記述したらどのようになるか
書いてみてくれれば、作れるかも。
無論人柱やってくれるなら、だけど。

51 :デフォルトの名無しさん:2006/10/18(水) 22:30:27
>>50
せっかくがんばって作ったのに、みんなに叩かれてかわいそう・・;;
私は味方だからね・・

52 :デフォルトの名無しさん:2006/10/18(水) 22:47:16
漏れもダウンロード済み。

53 :12:2006/10/18(水) 22:56:08
動かなかったらごめんね

54 :デフォルトの名無しさん:2006/10/18(水) 23:11:42
>>50
http://go.microsoft.com/fwlink/?LinkId=51405&clcid=0x411

55 :12:2006/10/18(水) 23:19:28
インスコはした

VB、10年くらい前にやった気はするがまったく覚えてないんで、
どのような出力をしたらよいか
(hello0.hppに相当するものはどのようになってほしいか)と
わかりやすい入門サイトかなんかきぼんぬ

それくれれば
週末にでもやってみる

56 :デフォルトの名無しさん:2006/10/18(水) 23:26:33
VBか。俺は今よりもVB6(以前)の方が好きだったな。
できればそっちを作ってくれんか>12

57 :12:2006/10/18(水) 23:59:40
そんな違うの?

まあhello0.hpp相当のものをくれたほうをやるよ
処理系タダならね

58 :デフォルトの名無しさん:2006/10/19(木) 00:16:10
COINSってライセンスに制約あるの?
なんかちょっと動かすごとに100円とか取られるイメージがある。

59 :デフォルトの名無しさん:2006/10/19(木) 00:21:22
残念。タダじゃない。もう発売&生産停止の状態。
だが一部のファンの間で未だに根強い人気があるから、オークションとかで
激しく高値で取り扱われていたりする。

俺はたしかに好きだったが、離れてからだいぶ経つから「久々にものづくりに
勤しんでみますか」程度のノリで。パーサから構築するのはさすがに骨が折れるから
どうしようと思っていたらたまたまこのスレを見掛けたもので。

そんなわけだから、まあ無理なら自分で組み上げてみるよ。サンクス^^

60 :デフォルトの名無しさん:2006/10/19(木) 00:59:31
XMLSchemaのパーサ作りたいでつ
でもでもEBNFとかなんもないでつよどうやってつくれば
いいんでつかだれか助けてぉ?

61 :デフォルトの名無しさん:2006/10/19(木) 01:38:33
MLRISC とか C-- とかはもうアクティブじゃないのかね。

62 :デフォルトの名無しさん:2006/10/19(木) 02:16:55
  x inW w2
------------------
x inW w1 UNION w2

こんなふうに文法分数みたいに定義してあるのたまに見るけど
これってどうやって解釈すればいいの?分母のルールを割るの?


63 :デフォルトの名無しさん:2006/10/19(木) 02:45:39
>>62
えっと、これは数理論理学ではよくある書き方なんだけど、
上の式(or 命題 or 述語)が成り立つならば下も成り立つ
という意味。
二重線にすると、上から下が成り立つ、かつ、下から上も成り立つ(要するに同値)。

64 :デフォルトの名無しさん:2006/10/19(木) 09:18:50
>>12
頑張れ
ドキュメントも良くかけてる

65 :デフォルトの名無しさん:2006/10/19(木) 16:16:17
フラスコに精液を溜めようと思って、実際に半分ぐらいまで溜めたんですが、
使うときにフラスコからだそうと思ったら出なくなりました。
どうやって出したら良いでしょう?

66 :12:2006/10/19(木) 21:25:35
おうthx

>>65
割れば?


67 :デフォルトの名無しさん:2006/10/19(木) 21:34:23
自作自演乙

68 :デフォルトの名無しさん:2006/10/19(木) 22:09:30
>>65
>使うとき

詳細(ry


69 :デフォルトの名無しさん:2006/10/20(金) 00:31:32
いま、誰も知らないマニアックな言語のデータ構造を
Cの構造体に修正するツール作成したいのですが、

ある言語体系のルールから
別の言語体系のルールに変換するような内容の論文とか
資料とかって知りませんか?

70 :デフォルトの名無しさん:2006/10/20(金) 00:33:30
意訳: パーサが書けない僕でもなんか処理できちゃう魔法知りませんか

71 :デフォルトの名無しさん:2006/10/20(金) 00:58:14
パーサーの先読みが1つがデフォルトなのは知ってますが、
少なすぎませんかね?

72 :デフォルトの名無しさん:2006/10/20(金) 06:32:53
例えばLR(k)をLALR(1)にするとかってことか?
つか先読み1つより大きくすると別の問題しょいこむだけだぜ

73 :デフォルトの名無しさん:2006/10/20(金) 09:37:44
>>71
大体複雑なのが出来るだけだから、複雑になるリスクとの兼ね合い。

74 :デフォルトの名無しさん:2006/10/20(金) 14:52:43
>>72,73
よく言われることだと思うけど、それほど複雑にならない気もする。

例えば、LALR(99)なんてのは論外としても
LALR(2)ぐらいならメリットの方が多いのではないかな?

75 :デフォルトの名無しさん:2006/10/20(金) 15:13:59
ならそれでいいじゃないか?
つべこべ議論する事じゃないと思うが?

76 :デフォルトの名無しさん:2006/10/20(金) 15:15:34
お前こそつべこべいうなよ

77 :デフォルトの名無しさん:2006/10/20(金) 18:03:25
すまなかった。

78 :デフォルトの名無しさん:2006/10/20(金) 18:07:19
この2や99ではない、1ってのがミソなんだな。

79 :デフォルトの名無しさん:2006/10/20(金) 20:19:37
>>78
"Zero-One-Infinity Rule" だね


80 :デフォルトの名無しさん:2006/10/21(土) 00:08:42
シフトを続ければ、1も99も同じ


81 :デフォルトの名無しさん:2006/10/21(土) 13:28:49
>>71
Packrat Parsingでは、無限長先読みができますよ、と

82 :デフォルトの名無しさん:2006/10/21(土) 16:21:29
>>81
HaskellのPersecとかだね?


83 :デフォルトの名無しさん:2006/10/21(土) 17:18:32
バナナ気持ちいいよバナナ

84 :デフォルトの名無しさん:2006/10/21(土) 19:01:01
>>82
Parsecは確かに無限先読みが使えるけど、Packrat Parsingとは違うもの
Parsecは基本的にはLL(1) + Syntactic Predicate(Parsecで言うtryのこと)
Packrat Parsingのアルゴリズムは、基本的には再帰下降型Backtracking Parserで、
(入力開始位置、非終端記号)のペアに対して、一度計算したSemantic Valueを再計算
しないように記憶しておくことで入力文字数に対して線形オーダの計算量でできるように
効率化したもの

85 :デフォルトの名無しさん:2006/10/21(土) 20:36:54
>>84
空間計算量はO(n^2)になりそうな気がするけどどう?

86 :デフォルトの名無しさん:2006/10/22(日) 01:31:58
なんか、凄くレベルが高いなこのすれ。
俺的にはyaccの書き方に四苦八苦していて、gawkとかのお手本を勉強してたんだけど、
shift/reduce が沢山でていてちょっと安心した。
普通 shift/reduce や reduce/reduce って0に持って行くものだと思ってたけど、
現実は違うのかな?

87 :デフォルトの名無しさん:2006/10/22(日) 02:28:37
>>86
慣れだよ。

88 :デフォルトの名無しさん:2006/10/22(日) 02:58:48
yacc(happy)使うくらいならParsec使いたいな

89 :デフォルトの名無しさん:2006/10/22(日) 03:33:35
>>85
非終端記号の個数mと入力文字数nに対して、空間計算量はO(mn)。で、
非終端記号の数は通常一定なので、大体O(n)と考えて良いと思う。
ただ、それでも莫大なメモリを消費することには変わりないので、
巨大なXMLファイルなどを解析するのは向いてない。
Java用のPackrat Parser GeneratorでRats!というのがあるので、
興味があれば使ってみれば良いかも。

ちなみに俺はyaccのようなbottom up parserの挙動はイメージしづらいんで、
あんまし好きじゃない。自分では、JavaCCのようなLL(k)
Parser Generatorをもっぱら使ってる。

90 :デフォルトの名無しさん:2006/10/22(日) 03:40:30
>>86

reduce/reduce は0にしないとだめなんじゃないか?


91 :デフォルトの名無しさん:2006/10/22(日) 17:56:12
True AWK の結果(↓)
awkgram.y: conflicts: 43 shift/reduce, 85 reduce/reduce

92 :デフォルトの名無しさん:2006/10/22(日) 21:23:58
コンパイラってどうやって作るの?

93 :デフォルトの名無しさん:2006/10/22(日) 21:25:53
まず、HSPを卒業して他の言語を覚えることから始めないとダメだ。

94 :デフォルトの名無しさん:2006/10/22(日) 23:10:49
         ,-、            ,.-、
        ./:::::\          /::::::ヽ
       /::::::::::::;ゝ--──-- 、._/::::::::::::::|
       /,.-‐''"´          \:::::::::::|
     /                ヽ、::::|
    /                   ヽ|
     l.                         l
    .|    ●                  |
     l  , , ,           ●     l
    ` 、      (__人__丿    、、、   / >>1 糞スレ
      `ー 、__               /
         /`'''ー‐‐──‐‐‐┬'''""´
        ./        ___ l __
         l   ./    /  |/ |
         `ー-<    /  ./  ./
           `ー‐--{___/ゝ、,ノ

95 :デフォルトの名無しさん:2006/10/22(日) 23:11:30
>>93
HSPでかけないアルゴリズムってあるの?

96 :デフォルトの名無しさん:2006/10/22(日) 23:19:13
>>95
ランレングス

97 :デフォルトの名無しさん:2006/10/22(日) 23:31:29
冗談でしょう

98 :デフォルトの名無しさん:2006/10/22(日) 23:50:44
>>95
普段使ってないので言語仕様確認してみたけど、構造体定義や配列のネストが無い
みたいなんでコンパイラ内の中間構文木の処理なんかが相当苦労しそうな気がする。

99 :デフォルトの名無しさん:2006/10/22(日) 23:56:34
何かでDLL作成して、それ以外をHSPで作成すれば問題ない。



・・・・HSPってDLL読み込めるの?
使ったこと無いからわかんない。
(調べてない。)

HSPを使う意味ね〜

100 :デフォルトの名無しさん:2006/10/23(月) 00:19:03
>>86
本職で書いている訳では無いので、言語設計の文法は出来るだけシンプルなものにする方向
でしか書いてないけど、自分の場合はreduce/reduceは無効になっている構文が発生するので
無くす方向で、shift/reduceもログチェックして意図した通りの動作になっているか確認してる。

C++とか複雑過ぎるパーサ書く場合は知らない、awkは省略規則による例外文法が多いのかも
しれないけど類似のJavaScript程度の言語なら殆どshift/reduce無しで書ける筈だと思う。
(if文とtry文、オブジェクトリテラル構文で発生している程度

101 :デフォルトの名無しさん:2006/10/23(月) 02:10:58
>>91

True awk ってえと bwkのとこにあるやつ?
とりあえず gawkの gawkgram.y をbisonに食わせたら

conflicts: 31 shift/reduce

だった。reduce/rdeuce conflict はこの状態だとないんだよね?


102 :デフォルトの名無しさん:2006/10/23(月) 02:32:45
ところで、話は変わるんだが、C/C++用のParser Generator
でLALRじゃなくてLL(k) Parser吐くタイプで良いの無いかな?
ANTLRはなかなか良さげなんだけど、生成したパーザが
ランタイムを必要とするのが、ちょっとイマイチ

103 :デフォルトの名無しさん:2006/10/23(月) 05:02:19
つSpirit
ttp://boost.cppll.jp/HEAD/libs/spirit/

104 :デフォルトの名無しさん:2006/10/23(月) 18:32:04
蛇オナニーって気持ちいいって聞いたんですけど、やったことある人いませんか?

105 :デフォルトの名無しさん:2006/10/23(月) 20:05:53
>>101
それだと reduce/reduce は無いことになるが、
そんなにも有るものなのか? shift/reduce conflict

106 :デフォルトの名無しさん:2006/10/23(月) 20:59:04
>>105
該当ソースは見てないけど、省略表記が可能なルールを並べるとshift/reduceに
なるんで、awkみたいな構文糖的な文法の曖昧さが多いパーサだとその辺が引っか
かってるんじゃないかって気がする。

107 :デフォルトの名無しさん:2006/10/23(月) 23:31:44
>>91
恐ろしいな、これも慣れなのか?

108 :デフォルトの名無しさん:2006/10/24(火) 01:45:02
──────────────────   ________
──---ァ--──--、___,,. イ______ ─────  ___
    '´         \     /                    _
              ヽ  /----  二二二         ─
                 '. /   ̄ ̄ ___          ̄ ̄
`ヽ./             i/────   __  -  ──
  |   ○        ○l    _,,ィi⌒ヽ    二 __ 二   ̄
  ヽ     ___    /r‐-r''´ ノ.l  |⌒ヽ             ---
  /`ヽ、        _厶'⌒_l   { :|  l   |_  ̄ ̄ ̄     ── _
/       < ̄´   ,,_ゝ、_ノス,,_,ノ、_,,ノ》`!___      __
           \ ';:,:           :.ミ_ノ   __ 
⌒⌒ヽ       `';:;,\             ヘ.___         ̄ ̄
 、  ) ̄} ̄ ̄ ̄ ̄ ̄ヾ            |←>>94 __ _   
、_人_,ノ⌒)}─┐    .,,;:':;}#;;'         ノ──  __     ─
  _,,ノ´  └───;イ;゚;'        j/          ─
r‐'´           ..:;::','/;;         ヽ、 ̄ ─── -    _


109 :デフォルトの名無しさん:2006/10/24(火) 12:01:07
いまどきのプログラム言語の作り方 (単行本)
http://www.amazon.co.jp/exec/obidos/ASIN/4839919232/

がなかなかいい感じでした。
諸本に挫折した俺には、わかりやすかった。
Javaで、コードも読みやすいし。
もっとこんな本が出てほしい

110 :デフォルトの名無しさん:2006/10/24(火) 21:23:45
ふーん、俺もいまだにコンパイラ本の読破に挫折し続けているから
読んでみるかなあ


なお、コンパイラ本を読破はしたことないが
コンパイラを作って事はある
読むより書くほうが簡単みたいな希ガス

111 :デフォルトの名無しさん:2006/10/24(火) 21:42:54
設計に向いてないじゃないか。
コンパイラじゃなくてツールとかGUIとか作ってた方が今後のためだろうに。

112 :デフォルトの名無しさん:2006/10/24(火) 21:48:12
>>109
そのタイトルを見ただけで不安を覚えるのは、俺だけじゃないはずだ。

113 :デフォルトの名無しさん:2006/10/24(火) 22:19:15
いまどきのアセンブラプログラミングのことか・・・

114 :デフォルトの名無しさん:2006/10/24(火) 23:06:58
処理系について、もうちょっとちゃんとした勉強をしようと思ったときの導入本としてはコンピュータサイエンス入門とかお勧めだけどなぁ。

115 :デフォルトの名無しさん:2006/10/25(水) 04:48:43
yacc 使い始めたところなんですが、エラー処理がさっぱりわかりません。
再帰下降法のときは手書きだったしエラー処理はわかりやすかったんですが、
yacc使うと、なんというか、エラーが発生したときにどの生成文法のどの箇所でエラーが発生したのかわかりません。
例えば
while-statement : 'while' '(' expression ')' '{' statements '}'
;
という文法があったとして、
while x > 0 { .... }  なら「'('が期待されてるけど見つからないよ」
while (x > 0) ...  なら「'{' が期待されてるけど見つからないよ」
ということをしゃんと出力したいんですけど、参考になるページとかありましたらお願いします。

116 :デフォルトの名無しさん:2006/10/25(水) 14:53:28
しゃん‐と

正しく整ったさま。きちんと。「つづら帽子を―着て」(狂言歌謡)
確定的であるさま。たしかに。浄、薩摩歌「―嫁入つて退ければよいものを」
姿勢・気力などがしっかりしているさま。「背筋を―伸ばす」「年に似ず―している」
【岩波書店 広辞苑第五版】

117 :デフォルトの名無しさん:2006/10/25(水) 22:07:09
しゃきーーーん!

118 :デフォルトの名無しさん:2006/10/26(木) 12:48:12
yaccから先の話しよーぜ

119 :デフォルトの名無しさん:2006/10/26(木) 13:23:37
ANTRL age

120 :デフォルトの名無しさん:2006/10/26(木) 19:23:06
ちょっと前にドラゴンブック買ったら米国で>>8
ちょっと前にホップクロフトのオートマトン2nd.Ed.買ったら米国で3rd.Ed.
             (´Å`)

121 :デフォルトの名無しさん:2006/10/26(木) 20:19:15
lemon秀逸なデザインだがGPLだから用途が限られる。
caperに期待したいとこ。

122 :デフォルトの名無しさん:2006/10/26(木) 22:28:22
caperって有名なの?

123 :デフォルトの名無しさん:2006/10/26(木) 23:04:00
いまどきのプログラム言語の作り方 (単行本)
今から読んでレビューしてみる

124 :デフォルトの名無しさん:2006/10/27(金) 21:27:40
>>121
ぐぐっても関係ないものばかり出て来る

125 :デフォルトの名無しさん:2006/10/28(土) 03:21:22
http://www.hwaci.com/sw/lemon/lemon.html
http://www.chibutsu.org/faf/translated/LemonPG/LemonParserGenerator.html

プッシュ型まんせー

126 :12:2006/10/28(土) 04:42:35
公開したばっかだよ

127 :デフォルトの名無しさん:2006/10/28(土) 10:14:06
>>125
ざっとみてけど A=B+C と書けること以外、何が良いのかさっぱり分からんな


128 :デフォルトの名無しさん:2006/10/28(土) 11:50:07
ソース見るかぎりpublic domainだけど……
ttp://www.sqlite.org/cvstrac/getfile/sqlite/tool/lemon.c


129 :デフォルトの名無しさん:2006/10/28(土) 12:02:37
As a public service, Hwaci makes the following software available for free in source-code
form. Most of the software here is covered by the GNU Public License.

Lemonは例外でGPLではないのかな。

130 :デフォルトの名無しさん:2006/10/28(土) 12:37:50
>129
それってソースどこ?

lemonを含むSQLite自体がpublic domainだから、lemonもpublic domainの
扱いになっているみたいだけど……
fleshmeatのライセンスが間違っているような気がする。

131 :デフォルトの名無しさん:2006/10/28(土) 12:45:17
>>130

本人のサイトでしょ。
http://www.hwaci.com/sw/index.html

ジェネレーターはソースを吐くから、
普通のソフトとはライセンス問題の事情が違うなぁ。

132 :デフォルトの名無しさん:2006/10/28(土) 13:56:13
>131
それだったら、lemon自体の説明には
 Both the source code to lemon itself and the code that lemon generates
 are in the public domain.
と記載されているから、public domainと考えていいんじゃない?
fleshmeatのは間違いと言うことで。

133 :デフォルトの名無しさん:2006/10/28(土) 20:25:15
public domain だと copyright が守れ無い可能性があるのでは?

134 :デフォルトの名無しさん:2006/10/28(土) 20:26:32
それは問題無い。

135 :デフォルトの名無しさん:2006/10/28(土) 22:27:12
ttp://d.hatena.ne.jp/higepon/searchdiary?word=%2a%5bScheme%5d
チッ。イイ気になりやがって。

136 :デフォルトの名無しさん:2006/10/29(日) 11:47:21
>>37
それ欲しがってたの俺ですけど、例のマニュアルに載ってる分は完成しました。
86系ってインテルだけじゃないし、インテルにしても種類があるので
それだけじゃぜんぜん足りないんだけど、まぁとりあえず出来たってことで。

137 :デフォルトの名無しさん:2006/10/29(日) 15:42:13
        ,-、            ,.-、
        ./:::::\          /::::::ヽ
       /::::::::::::;ゝ--──-- 、._/::::::::::::::|
       /,.-‐''"´          \:::::::::::|
     /                ヽ、::::|
    /                   ヽ|
     l.                         l
    .|    ●                  |
     l  , , ,           ●     l
    ` 、      (__人__丿    、、、   / >>1 糞スレ
      `ー 、__               /
         /`'''ー‐‐──‐‐‐┬'''""´
        ./        ___ l __
         l   ./    /  |/ |
         `ー-<    /  ./  ./
           `ー‐--{___/ゝ、,ノ

138 :デフォルトの名無しさん:2006/10/30(月) 19:34:28
>>12が煽られてる意味がまったくわからん。
>>12乙。
こういうの欲しかった。

139 :デフォルトの名無しさん:2006/10/30(月) 19:52:30
>>138
自演乙

140 :デフォルトの名無しさん:2006/10/30(月) 19:57:05
レモンだけど、bisonもライセンスの制約が全くないと思われるが、
はて?

141 :デフォルトの名無しさん:2006/10/30(月) 20:08:22
coinsってライセンスの記述がサイトに無いけど、制限無しなの?

142 :デフォルトの名無しさん:2006/10/30(月) 22:39:07
bisonて、bison本体はGPLじゃないの?lemonは本体もpublic domain


143 :140:2006/10/31(火) 19:43:04
>>142
その通りだけど、 bison自体をいじるのでなければGPLの縛りはない。

144 :12:2006/10/31(火) 21:45:13
まだ作ったばっかでバグとかあると思うから
そのつもりでヨロピク

細かい仕様に関する突っ込み等も歓迎

145 :デフォルトの名無しさん:2006/10/31(火) 22:19:27
12の自演がキモいレベルにきている件について突っ込みたい

146 :デフォルトの名無しさん:2006/10/31(火) 23:41:44
EBNFとかABNFとか自分で記述して矛盾がないか確かめたいんですけど
やっぱLispとか関数言語叩いて、自分でBNFを処理するプログラムを書く以外
方法ないでしょうかね?なんか、ぽちぽちっと定義して実行とかできないですかね?

147 :デフォルトの名無しさん:2006/11/01(水) 00:27:05
>>146
矛盾っていうのが何を指しているのかがよくわからんが
構文規則がLL(1)に収まっているかとか、LALR(1)に収まっているかとか
を確かめたいだけなら、JavaCCなりANTLRなりyaccなりに文法定義ファイル
を処理させて、conflictが起きないか確かめればいいだけだと思うが
それでは駄目?

148 :デフォルトの名無しさん:2006/11/01(水) 00:41:59
>>145
嫉妬心イクナイ


149 :デフォルトの名無しさん:2006/11/01(水) 01:18:10
>>147
それすらも免土井のは染んだほうがいいですよねw
がんばってかきますw

150 :デフォルトの名無しさん:2006/11/03(金) 06:39:35
どなたか>>115お願いします。

> yacc 使い始めたところなんですが、エラー処理がさっぱりわかりません。
> 再帰下降法のときは手書きだったしエラー処理はわかりやすかったんですが、
> yacc使うと、なんというか、エラーが発生したときにどの生成文法のどの箇所でエラーが発生したのかわかりません。
> 例えば
> while-statement : 'while' '(' expression ')' '{' statements '}'
> ;
> という文法があったとして、
> while x > 0 { .... }  なら「'('が期待されてるけど見つからないよ」
> while (x > 0) ...  なら「'{' が期待されてるけど見つからないよ」
> ということをしゃんと出力したいんですけど、参考になるページとかありましたらお願いします。


151 :デフォルトの名無しさん:2006/11/03(金) 11:31:41
>>150
bison なら、verbose オプションをつけてパーサーを生成すれば
それでOKですよ。普通にyyerror()で目的の出力が得られます。

152 :デフォルトの名無しさん:2006/11/03(金) 12:53:27
クロージャを実現する簡単なスタックマシンの例のソースとか
ないでしょうか?


153 :デフォルトの名無しさん:2006/11/03(金) 13:51:49
>152
スタックマシン上でクロージャを作る必要性ががさっぱりわからないのですが。

154 :デフォルトの名無しさん:2006/11/03(金) 15:47:46
SECDマシンのことじゃまいか?
Palm向けだけどLispMeのソースが読みやすいとおもた

ほんとーはHendersonさんの『関数型プログラミング』がおぬぬめなんだけど絶版なのよね・・・

155 :デフォルトの名無しさん:2006/11/03(金) 18:26:31
tinyschemeもSECD machineじゃないかな。
"SECD Machine" でぐぐれば解説は出てくるよ。

156 :デフォルトの名無しさん:2006/11/03(金) 19:49:26
C++で実装したBasicのインタプリタってどっかにない?

157 :デフォルトの名無しさん:2006/11/03(金) 19:58:01
その要求でぐぐったらすぐに出てきたぞ。質問する前に自分で探せ。

158 :デフォルトの名無しさん:2006/11/03(金) 20:29:00
>>156
ゴミだなコイツはw

159 :デフォルトの名無しさん:2006/11/03(金) 21:18:53
>>156
「IOCCC Basic Interpreter」でぐぐると短いソースが見つかるお( ^ω^)

160 :デフォルトの名無しさん:2006/11/03(金) 22:48:55
>>157
探しても見つけられなかったから訊いたんだよ

>>159
サンクス
別のものだけど、それで検索したらいいのが見つかったよ

161 :デフォルトの名無しさん:2006/11/04(土) 00:37:57
相当探し物が下手なんだな。

162 :デフォルトの名無しさん:2006/11/04(土) 01:07:20
つまり めがね〜めがね〜ってやつだな?

163 :デフォルトの名無しさん:2006/11/04(土) 01:09:24
...

>>159 も罪作りなヤシだ(藁

164 :デフォルトの名無しさん:2006/11/04(土) 01:11:14
ってよく読んだら160が見つけたのは25 linesじゃないのか
ちっ

165 :デフォルトの名無しさん:2006/11/04(土) 01:38:13
>>159

すげープルグラムだな。
読む気なくすよ。

166 :デフォルトの名無しさん:2006/11/04(土) 04:58:10
BNF集があるといいのにな。

167 :デフォルトの名無しさん:2006/11/04(土) 06:03:46
>166
ほれ
ttp://www8.atwiki.jp/e9g92z/

168 :デフォルトの名無しさん:2006/11/04(土) 06:13:30
>>167
ん?これなんか関係あるのか?

169 :デフォルトの名無しさん:2006/11/04(土) 10:28:51
>>167
それは、資産100億のB・N・F氏(わら

170 :デフォルトの名無しさん:2006/11/04(土) 11:34:29
【スクリプトをちょっと紹介させてください】
アドベンチャーゲーム用スクリプトシステム「MICoスクリプト」を開発しました。
軽いこと&商用ゲームでの使用可能な高性能を目指して設計しており
複雑な演出も簡単に作れるシステムです。
詳しい紹介は公開サイトにありますので、よろしければ使ってみてください。

公開サイト
http://mico.x0.com

171 :デフォルトの名無しさん:2006/11/04(土) 11:38:08
うんこ

172 :デフォルトの名無しさん:2006/11/04(土) 13:45:40
>>170
途中でハングした

173 :デフォルトの名無しさん:2006/11/04(土) 14:40:02
こんどはフリーズした…これでマジ商用目指してんの?
サンプルのレベルでこんな簡単にぽろぽろ止まるようじゃ
販売されて一般のPCに入ったらとんでもないことになるぞ

174 :デフォルトの名無しさん:2006/11/04(土) 14:56:46
ノートンが反応した

175 :デフォルトの名無しさん:2006/11/04(土) 14:58:25
Not Found で落とせない……

176 :デフォルトの名無しさん:2006/11/04(土) 15:33:51
>>175
リンク先のURLが
http://mico.x0.com/files\MICo100c.zip
になってるから\を/に直してやれ…

177 :デフォルトの名無しさん:2006/11/04(土) 16:20:38
まぁ、これはどう見ても
出来を知った赤の他人が「紹介」を称して晒してるんだろうな。

178 :デフォルトの名無しさん:2006/11/04(土) 20:28:17
WIN専用ということで、捨てw

179 :デフォルトの名無しさん:2006/11/04(土) 20:31:16
Win専用じゃないのってあったっけ?

180 :デフォルトの名無しさん:2006/11/05(日) 11:23:01
>>170
商用利用(に限らずだけど)してもらうには開発環境が貧弱な気がする・・・
スクリプトのデバッグ方法ってあるのかな?

181 :デフォルトの名無しさん:2006/11/05(日) 11:37:18
>>179
一応、吉里吉里が動かなかったっけ?
前にソース眺めたときにLinux用のソースを見た覚えが

182 :デフォルトの名無しさん:2006/11/05(日) 16:01:52
そういや、すごく前の話 >15 >22 を見てて思ったんだけど、
・LALR(1)
・C++コードを吐き出す
 - パーザーをオブジェクトとして扱える
 - namespaceで閉じている
 - マクロを使わない
・フリーな実装
て、>12以外にあったっけ?
LL(∞)ならboost::spiritなんだろうけど。


183 :デフォルトの名無しさん:2006/11/05(日) 16:20:29
>>170
WinXPマシン(2.53GHzのPentium4、1GBのメインRAM、128MBのVRAM)で
サンプルスクリプトを起動させてみたが、商用ゲームで使用可能な性能を
目指すなら、最低限これの倍以上は軽快に動いてほしい。
そうでないとユーザーとしてはマジでやってられん。

184 :デフォルトの名無しさん:2006/11/05(日) 17:42:52
>>181
(確か)吉里吉里3はLinuxでも動くように開発されてるよ。

吉里吉里は良く出来てる。
動作がもう少し軽ければもっといいのにな。


185 :デフォルトの名無しさん:2006/11/05(日) 18:23:09
>>182
本題からはずれるんだが、LL(∞)って用語は一般的なのか?
LL(*)というアルゴリズム(無限長先読みだけど、先読み文法が
正規言語に限定される)は前に調べたことがあるけど、
LL(∞)というのは、今まであまり聞いたこと無いもんで。

186 :デフォルトの名無しさん:2006/11/05(日) 22:43:07
>>184
吉里吉里って非JITの仮想マシンしか搭載してないくせに結構速かったような

(ここにベンチがある)
ttp://gamdev.org/w/pukiwiki.php?%5B%5B%A5%CE%A5%D9%A5%EB%A5%C4%A1%BC%A5%EB%C1%AA%B9%CD%5D%5D

187 :デフォルトの名無しさん:2006/11/05(日) 22:47:19
Applying a function pairwise to all data of two trees.
Variable combine:
forall (A: Set), (option A -> option A -> option A) -> t A -> t A -> t A.
Hypothesis gcombine:
forall (A: Set) (f: option A -> option A -> option A)
(m1 m2: t A) (i: elt),
f None None = None ->
get i (combine f m1 m2) = f (get i m1) (get i m2).
Hypothesis combine_commut:
forall (A: Set) (f g: option A -> option A -> option A),
(forall (i j: option A), f i j = g j i) ->
forall (m1 m2: t A),
combine f m1 m2 = combine g m2 m1.

これってどの関数型言語?

188 :デフォルトの名無しさん:2006/11/06(月) 21:30:18
そういえば、志古志古1000というのが無かったっけ?

189 :デフォルトの名無しさん:2006/11/06(月) 23:29:03
>>187 Coq?

190 :デフォルトの名無しさん:2006/11/11(土) 16:00:06
「スモールコンパイラの製作で学ぶプログラムのしくみ」を
買ってしまった。
なんだこの本の内容?買って損した。
First(),Follow()の説明に自分でウソ書いてて気づいてなんだな。
ま、理解できてないまま本出すの勝手だけど、ウソ書いて
混乱させんじゃねーよ。全く。

Follow(S)に $ を加えるのはいいだが、
この著者は 終わりといいう意味の $ を '$'と混同してるんだ。
こっちが理解してやるのに疲れる。
誤記多いし。勘弁してよ〜。

191 :デフォルトの名無しさん:2006/11/11(土) 16:08:08
その様子じゃ、理解出来てないまま非難してるのはお前だなぁ。

192 :デフォルトの名無しさん:2006/11/11(土) 16:39:52
>>191

その通りだ。スマン。。

193 :デフォルトの名無しさん:2006/11/11(土) 17:49:07
素直でよろしい。
これはとても大切。


194 :デフォルトの名無しさん:2006/11/11(土) 18:24:06
パパ乙

195 :デフォルトの名無しさん:2006/11/11(土) 18:25:31
コンパイラの本って少ないな。


196 :デフォルトの名無しさん:2006/11/11(土) 19:52:07
>>190
説明しろ

197 :デフォルトの名無しさん:2006/11/11(土) 22:36:47
りんごタソの本か?
なかなか良かったぞ。

198 :デフォルトの名無しさん:2006/11/11(土) 23:49:56
>>197
あそこの調子はどうですか?

199 :デフォルトの名無しさん:2006/11/12(日) 07:40:53
ぬめってます





























200 :152:2006/11/12(日) 10:10:01
>>154
>>155
凄く遅いレスになりましたが、サンクスです。
地道に勉強してみます。

201 :デフォルトの名無しさん:2006/11/13(月) 22:36:51
たまらんなw

202 :デフォルトの名無しさん:2006/11/14(火) 00:36:34
ここに知ったかぶりをしている人は何人いるでしょうか?


203 :デフォルトの名無しさん:2006/11/15(水) 09:27:44
ハァハァ

204 :デフォルトの名無しさん:2006/11/18(土) 08:57:21
その名もSECDR-schemeというのがあったはずだが。

205 :デフォルトの名無しさん:2006/11/21(火) 02:10:43
caper作った人まだみてる?



206 :12:2006/11/21(火) 22:31:05
たまにみてるよ
最近仕事忙しくてcaperいじってないけど

207 :デフォルトの名無しさん:2006/11/22(水) 00:00:42
お仕事で使おうとして上司に
「caperだよね」
「自動生成だよね?」
って釘指されてワラタです


208 :12:2006/11/22(水) 07:26:03
まじで仕事に使うの
チャレンジャーすぎw

209 :デフォルトの名無しさん:2006/11/22(水) 11:12:15
設定ファイルの定数に数式入れたいだけだからね。
文字で書かれた簡単な数式をdoubleで計算とかそういうライブラリあるかと思ったら
yaccやらbisonやらのサンプルばっかりで以外と見つからなくてさ。

ぶつくさいいながら再帰下降パーサ書くくらいならとおもって使わせてもらいました。


210 :12:2006/11/23(木) 12:14:56
ohそれはすばらしい

バグや気に喰わない使用があったら教えてね

211 :デフォルトの名無しさん:2006/11/24(金) 20:34:47
このスレでCoinsの話題って禁句?

212 :デフォルトの名無しさん:2006/11/24(金) 21:12:57
>>211
推奨だよ

213 :デフォルトの名無しさん:2006/11/24(金) 21:33:51
log読んでたら>58 >148がスルーされてたから、駄目なのかなと
特に話題はないんだけど

214 :デフォルトの名無しさん:2006/11/25(土) 03:25:29
58と148の関連性が全くワカラン


215 :デフォルトの名無しさん:2006/11/25(土) 09:55:30
このスレでLISPの話題って禁句?

216 :デフォルトの名無しさん:2006/11/25(土) 11:31:07
>>215
高度粘着性のキチガイを召喚する可能性が高いのでやめといたほうがいい


217 :デフォルトの名無しさん:2006/11/25(土) 11:35:20
スレちがい。
実装の話ならOK。

218 :デフォルトの名無しさん:2006/11/25(土) 16:19:24
いや実装の話でも止めてくれ

219 :デフォルトの名無しさん:2006/11/25(土) 16:37:59
お前の事情なんざ知るか。
イヤならもっと面白い話題を振って乗っ取ってみろや。

220 :デフォルトの名無しさん:2006/11/25(土) 16:46:29
実装の話は、そもそもついてこれるヤツがろくにいないだろ
Lispに限らずな、コンパイラ作れるヤツがろくにいねえ

221 :213:2006/11/25(土) 16:47:39
ごめん、間違った。148じゃなくて>141


222 :デフォルトの名無しさん:2006/11/25(土) 17:58:16
>>215
やめとけ、そのうちRuby坊も出て来るから。

223 :デフォルトの名無しさん:2006/11/25(土) 21:11:48
>>220
いや、実装の話の方が実は簡単なんだよ。

224 :デフォルトの名無しさん:2006/11/26(日) 01:54:45
その簡単な話よりさらに簡単な話しか
殆どのヤツはついて来れねえんじゃねえの?

あとまあ、どこぞの誰かの作ってる糞言語の
実装の詳細なんぞ興味がないから、
ついていけても、食いつかねえってのもあるが

225 :sage:2006/11/26(日) 01:56:44
シグウィンというコンパイラを手に入れたのですが、ソケットヘッダがあるのに使えないのです。どなたかわかる人いませんか?また他に使い易い、コンパイラあったら教えてください。

226 :デフォルトの名無しさん:2006/11/26(日) 01:58:04
その簡単な話よりさらに簡単な話しか
殆どのヤツはついて来れねえんじゃねえの?

あとまあ、どこぞの誰かの作ってる糞言語の
実装の詳細なんぞ興味がないから、
ついていけても、食いつかねえってのもあるが

227 :sage:2006/11/26(日) 02:10:34
シグウィンというコンパイラを手に入れたのですが、ソケットヘッダがあるのに使えないのです。どなたかわかる人いませんか?また他に使い易い、コンパイラあったら教えてください。

228 :デフォルトの名無しさん:2006/11/26(日) 03:02:45
ここはコンパイラの実装等をお話するスレで使い方のスレではないですお

229 :デフォルトの名無しさん:2006/11/26(日) 07:04:19
データフロー解析のソースコード付き簡単説明が欲しいです。

230 :デフォルトの名無しさん:2006/12/04(月) 15:32:32
HendersonのSECDマシンの、DUM,RAP,ATOMがまだわかりません。
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap6.html
これの、6.4がわからん。くそう、わからんぞー。
頭悪いんだなぁ。
SECD Maniaとかのソースは古くてごちゃごちゃしすぎてる気がするし。。。
なかなか、時間もないけど、能力もないので嫌になってきました。

231 :デフォルトの名無しさん:2006/12/04(月) 17:58:54
>>230
それ、LispMeの論文の超適当かつ端折りまくりの日本語訳だろ。
SECD machineでぐぐるとそいつが上位でマッチするというのは害悪のような気がする。

その論文はoriginal SECD machineとLispMeの差分について述べてるんであって、
original SECD machine の仕様も押さえながら読まなきゃ理解できんぞ。
特にLDF (クロージャを作る操作) がそこには書いてないんだから。

232 :デフォルトの名無しさん:2006/12/10(日) 12:30:47
ちょっとスレ違いかもしれないけど質問です。

今、プロトタイプベース(移譲中心)の俺言語を作っているんですけど、
ダイアモンド継承の処理の方法に悩んでいます。

ダイアモンド継承についての良さげな文献とかありません?


233 :デフォルトの名無しさん:2006/12/10(日) 16:06:21
>>232
C++のD&Eを見れば、なんか参考になることが書いてあるかも。

234 :232:2006/12/10(日) 17:05:23
>233
見ました。良い本だよね。D&E

「vtblを間接参照する」までは載ってたけど、流石に同一仮想ベースクラスを
効率的に検索する実装までは載っていませんでした。

プロトタイプだと、下手すると変数を参照するたんびに移譲先を探さなきゃ
いけないので、このあたりの処理は悩ましいですよね……


235 :デフォルトの名無しさん:2006/12/10(日) 17:28:08
>>234
じゃ、そこらのC++コンパイラでvtblをどのように扱ってるか解析するのが近道かもね。
以前、ダイアモンド継承してるオブジェクトのデータ構造を調べたらなんかへんちくりんな構造してたけど。

236 :デフォルトの名無しさん:2006/12/10(日) 21:35:14
プロトタイプベースでダイアモンド継承というのが理解できない。
プロトタイプベースってことは分裂+突然変異でオブジェクトができるんじゃないの?

237 :デフォルトの名無しさん:2006/12/10(日) 22:02:46
二つをくっつければいいんだよ


238 :デフォルトの名無しさん:2006/12/10(日) 22:59:47
>>232
うーむ。日本語でSECDマシンのいい解説があるといいのだけどなぁ。
ほかの英語の論文をちまちま訳しながら、勉強してるところです。

239 :デフォルトの名無しさん:2006/12/11(月) 01:08:16
>236
ダイアモンド継承と言ったのはちょっとまずかったかな?
実際にはちょっと違います。

俺言語では、こんな感じで
A <= B
a|  a|
α<= β
参照aを持つオブジェクトAに委譲するオブジェクトBがある時、
Bからaを参照する場合は、参照先αをそのまま使わずに、αに委譲した
プロキシβを作成してそれを参照するようにしています。

で、何が問題かというと、Aに同じオブジェクトを参照する参照が2つある場合、
A <=== B
a|b  a| |b
α<= β |
  <=== β'
こんな感じでBの参照aと参照bが別のプロキシになってしまいます。
C++のダイアモンド継承の問題もこんな感じだよね?
 

240 :デフォルトの名無しさん:2006/12/12(火) 01:56:15
SECDてこれ?
ttp://en.wikipedia.org/wiki/SECD_machine
面白そうですな。ちょっと読んでみるよ。

241 :デフォルトの名無しさん:2006/12/12(火) 20:19:43
CodeZine:JavaScriptでつくるSchemeインタプリタの基礎の基礎(lisp)
http://codezine.jp/a/article/aid/739.aspx


JavaScriptでLispwwwwwwwww

242 :デフォルトの名無しさん:2006/12/12(火) 22:28:17
>説明の簡略化のため、マクロ、末尾再帰の最適化、継続などの実装は省きます。

それSchemeじゃねぇwwwwwwwww
普通にLispて言やいいじゃん


243 :デフォルトの名無しさん:2006/12/12(火) 23:37:30
JavaScriptってほとんどschemeやん

244 :デフォルトの名無しさん:2006/12/13(水) 10:17:13
(゚Д゚ )ハァ?

245 :デフォルトの名無しさん:2006/12/13(水) 23:55:42
scheme with C's clothing?

246 :230:2006/12/14(木) 18:33:54
>>240
遅レスですが、それです。

HendersonのSECDマシンの実装は出来てるっぽいのだけど、
DUMとRAPの使い方がわかってるような、わかってないような。
JavaScriptだと、
function plus(a){ return a + 1; }(10);

(LDC (10) LDF (LD (1 . 1) LDC 1 SUB RTN) AP STOP)
となる。と言った感じの、まともに動くサンプルをつくりたいんだけど。


247 :デフォルトの名無しさん:2006/12/15(金) 02:33:39
>>246
どうしてそこでSECDの本来のターゲットであるSchemeで考えないのか
とっても不思議なんだけど。
DUMとRAPの用途は、letrec。

そこまで自分のわかってないことがわかったなら、あとは
LispMeのソースを眺めてどういう風に使われるか見れば一発でしょ。

コンパイラとかSECDのコアとかなら、Palm依存のコードを除いて
手元のPCで実行できるようにするのもさして難しくはない。
動かさなきゃ理解できないようなものでもないが。

248 :230:2006/12/15(金) 15:14:25
SECDマニアのHendersonのプログラムをコンパイルして弄ってみたのだけど
((letrec a (a lambda (b) b)) 1)

(LDC (1) DUM LDC NIL LDF (LD (0.0) RTN) CONS LDF (LD (0.0) RTN) RAP AP STOP)
ということでいいのかしら?とりあえず、思ったとおりに動いているのだけど。
letrec用途であることはわかるのだけど、自分で作って動かすとなると動かなくて。


249 :デフォルトの名無しさん:2006/12/15(金) 23:55:06
coins verup

250 :デフォルトの名無しさん:2006/12/16(土) 17:49:21
coins使ってる人っている?

251 :デフォルトの名無しさん:2006/12/16(土) 18:08:30
いません

252 :デフォルトの名無しさん:2006/12/16(土) 18:09:27
今時Javaって・・気が触れたとしか思えん

253 :デフォルトの名無しさん:2006/12/16(土) 18:31:30
>>252
あなたなら、今なら何が、コンパイラを作るのにいいと思いますか?

254 :デフォルトの名無しさん:2006/12/16(土) 19:18:43
Ruby か Haskell だろ

255 :デフォルトの名無しさん:2006/12/16(土) 19:26:02
そーか? HaskellはともかくRubyは……
作り始めはいいかも知らんが、だんだんチェックが欲しくなってくるから
型がルーズな言語はしんどいよ。

256 :デフォルトの名無しさん:2006/12/16(土) 20:12:38
C++
boostあれば色んなことできるようになるし。

257 :デフォルトの名無しさん:2006/12/16(土) 20:16:35
http://hp.vector.co.jp/authors/VA000092/jokes/strup.html

258 :デフォルトの名無しさん:2006/12/16(土) 20:21:25
>>256
お前は4年前の俺か

259 :デフォルトの名無しさん:2006/12/16(土) 20:30:50
4年の間にどんなカルト宗教に洗脳されちゃったんだろう

260 :デフォルトの名無しさん:2006/12/17(日) 02:04:03
適当になれた言語で一応動くものを作ったあと、自己記述化

261 :デフォルトの名無しさん:2006/12/17(日) 03:09:43
しかし、処理系作るなんておまいらすごいですね。
自分も何れは、自分で設計したスクリプト言語のインタプリターでも作りたいと思ってるんだけど。

ところで、知ってる言語が、C/C++, VB, PHP, Ruby, BASIC なんだけど
インタプリター実装に使う言語としては、この中だとどう考えても、C/C++ になるよね?
あと、こういうのって、ある程度汎用的に使える様な構文解析エンジンみたいなのはフリーで良いのが公開されてる?
それとも、Boostとかの正規表現ライブラリとか使って、自分で解析エンジンとかも製作するの?

262 :デフォルトの名無しさん:2006/12/17(日) 03:20:04
bison, flex


263 :デフォルトの名無しさん:2006/12/17(日) 03:43:51
ほほうー これでparserクラスとか作るわけかー
いつか作ろう。

264 :デフォルトの名無しさん:2006/12/17(日) 18:33:51
いまからbison+flexを覚えるくらいなら最初からantlrに取り組んだ方がいいと思う。
いろんな言語向けのコード生成できるし。

265 :デフォルトの名無しさん:2006/12/18(月) 23:13:40
C++でお勧めありますか? 今はspiritでシコシコやってます。
まあ、Forthチックだから大したの要らないんだけど。


266 :デフォルトの名無しさん:2006/12/19(火) 00:46:02
>>265
spiritを使う気になる環境ウラヤマシス



267 :デフォルトの名無しさん:2006/12/19(火) 02:03:08
>>265
antlrじゃダメなの?処理系自体もC++で書いてあることが要件なのかな。
大袈裟なのが必要ないならcaperでいいんじゃない?

268 :デフォルトの名無しさん:2006/12/19(火) 23:22:57
>>250
ソース拾ってきて、眺めて終了してしまってます。。。
もっと、面白い記事がネット上にあればなぁ、思います。


269 :デフォルトの名無しさん:2006/12/19(火) 23:39:56
>>265
時間の無駄だからやめたほうがいいよ

270 :デフォルトの名無しさん:2006/12/20(水) 02:02:13
>>265
FORTHチックじゃ構文が分かち書きで切った部分が直接命令に還元されるって事かい?
なら構文解析コード使う事自体に意味がないだろう?

むしろできあがったコードの中身をJITでネイティブに落とすとかそっちの話の方がメインじゃないのかい?


271 :デフォルトの名無しさん:2006/12/26(火) 20:30:48
来月のPOPLってどうよ?

272 :デフォルトの名無しさん:2006/12/27(水) 09:30:59
GCCってもっと速くならないの?

273 :デフォルトの名無しさん:2006/12/27(水) 11:22:09
GCCの何を速くしてほしいの?

274 :デフォルトの名無しさん:2006/12/27(水) 18:43:19
coinsは遅くなったらしい。

275 :デフォルトの名無しさん:2006/12/28(木) 04:22:39
中田先生がファビョってるようにしか見えない
もっと落ち着いてメールして欲しい
公の場なんだから

276 :デフォルトの名無しさん:2006/12/28(木) 15:44:19
たしかにメールの勢いはひどいが
INFOがうざいのも事実。

277 :デフォルトの名無しさん:2007/01/04(木) 07:30:40
あけおめ

278 :デフォルトの名無しさん:2007/01/04(木) 11:43:19
COINSのMLどうなった?
スレッドがぐちゃぐちゃで読む気がしないんだけど

279 :デフォルトの名無しさん:2007/01/06(土) 18:56:49
COINSのMLってどうやったら読めるのですか?


280 :デフォルトの名無しさん:2007/01/08(月) 11:09:30
COINS使いたいのですが、ヘッダのGCC拡張エラーになります
ヘッダを入れかえるのは、パッケージ管理しているのでやりたくありません
どう対処するのが一般的ですか?


# FreeBSDでは問題無く動いてます

281 :デフォルトの名無しさん:2007/01/08(月) 11:42:48
超能力者募集中か?>>280


282 :デフォルトの名無しさん:2007/01/08(月) 11:51:12
>>281
お前には想像力が無いことだけは解った。

283 :デフォルトの名無しさん:2007/01/08(月) 12:34:19
想像力で補ってどうするよ。いくつ可能性があると思っているんだよ。
まずは >280 が 『回答者が回答するために必要な情報はなんだろう?』 と想像しろ。
自分の環境を特定しようとしないやつに質問する資格は無いわ。

284 :デフォルトの名無しさん:2007/01/08(月) 12:36:15
>>283
過剰反応。
子供か、君は。

285 :283:2007/01/08(月) 12:43:16
>284
お前は誰だよ。ちゃんと名乗れ。
これだからIDの無い板は……。技術系の板でID無しって腐ってるよな。

ただ正論言っているだけだよ。 現実世界と違って >280 に気を使う必要無いしな。
早い話、>280は質問の仕方を覚えないと技術系としてはやっていけないよということで。


286 :デフォルトの名無しさん:2007/01/08(月) 12:50:45
>>285
鬱憤晴らしで初心者いびりがしたいだけだろう?

287 :デフォルトの名無しさん:2007/01/08(月) 12:51:36
>>286
SOREDA

288 :デフォルトの名無しさん:2007/01/08(月) 12:52:44
環境もワカラン、どのコンパイラつかってるのかもワカランでどうしろっての?

莫迦?


289 :デフォルトの名無しさん:2007/01/08(月) 12:59:58
>>288
解らんことがあれば聞け。
ただそれだけだろ。
お前は普段の仕事で、解らんことがあるのでこの仕事はできません、なんて言うつもりか?

290 :283:2007/01/08(月) 13:21:34
>286
そりゃそうだ。こんなマヌケじゃなぁ……

>288
おまっ、それマジで言ってんの?????

「相手が根気良く確認してくれるのはなぜか?」ということ考えたことある?
確認する側にメリットがあるからじゃないか。
仕事なら『業務を遂行する=自分の業績に繋がる』というメリットがあるけど
こんな匿名掲示板で根気良く確認しても何のメリットもねぇだろ。
逆に、質問する側は『疑問点を解消する』というメリットがある。
ある意味一方的な関係だ。

だから、こういうところでは回答者に積極的に協力しないとシカトされてお仕舞いなんだよ。
そんなに手取り足取り確認したけりゃCOINSのサポートに頼め。

COINS コンパイラ・インフラストラクチャ協会も無償奉仕みたいだから、>280みたいな
質問の仕方だと、「何いってんの、お前」というのをやんわりと言われるかもしれんがな。


291 :デフォルトの名無しさん:2007/01/08(月) 13:36:54
仕事のような熱心さで、280の質問に答えてくれる人、
募集中というところかw

292 :デフォルトの名無しさん:2007/01/08(月) 14:17:30
libc の header に gcc 拡張が使われていて
coins が gcc 拡張を理解できないからエラーになるんだろ?

いいじゃん glibc なんか捨てて *BSD 使えば

293 :デフォルトの名無しさん:2007/01/08(月) 14:23:58
むしろsolarsiのでばんですよ

294 :デフォルトの名無しさん:2007/01/09(火) 01:28:52
>>279
中の人に頼み込む。

295 :デフォルトの名無しさん:2007/01/09(火) 03:38:44
自分の質問の馬鹿さを指摘されたあと見せる無駄なエネルギーの半分でいいから、
元の質問文の練り込みに使えばいいのにな。

296 :デフォルトの名無しさん:2007/01/09(火) 10:04:22
くっ、スルー力が足りないっ

297 :デフォルトの名無しさん:2007/01/09(火) 10:49:06
>>296
スラドにお帰りください

298 :デフォルトの名無しさん:2007/01/09(火) 12:16:33
>>297
omochiの日記読んでしまって鬱


299 :デフォルトの名無しさん:2007/01/16(火) 21:56:39
中田先生の本、ちゃんとした日本語でわかりやすいね。
しかし数学家のせいか、変な数式化するやつには参るな
A = {P,S}とか{a} =  a |aa | aaa....とか


300 :デフォルトの名無しさん:2007/01/16(火) 22:17:20
慣れれば普通だよ

301 :デフォルトの名無しさん:2007/01/20(土) 16:58:13
パーサジェネレータとかって勉強するにはどういう本を探せばいいのでしょうか?
いままで自作言語ばっかり書いてきたんですけど、パーサジェネレータってもんがあることを最近知りました。
でも、勉強しようにも難しくてサイトみてもよくわからない状態です。
なにかわかりやすいオススメ書籍とかないでしょうか?

302 :デフォルトの名無しさん:2007/01/20(土) 22:37:09
中田先生の本はアレだな。理論の説明はいいんだけど、その理論を実際どういうときに使うのかもう少し詳しく書いてくれればもっとわかりやすくなるな。
できれば1つ1つの理論とC言語のコードを対にして書いてほしい。

303 :デフォルトの名無しさん:2007/01/22(月) 23:39:17
コンパイラの構成と最適化を読んでいて再帰的下向き構文解析のところまで読んだのですが、
構文解析と字句解析の区別がよくわからないのです。

再帰的下向き構文解析だと、例えば B -> aAb は
B(){ aを読む; A(); bを読む; } みたいになるのですが、
全ての生成規則を書いていくと
結局は字句解析がいらないことになってしまいませんか?

304 :デフォルトの名無しさん:2007/01/23(火) 01:33:19
Wikipediaさんに聞くと良いと思うよ。
字句解析:入力を字句(プログラムの最小単位)に分割する
http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90
構文解析:字句同士の関係を解析するhttp://ja.wikipedia.org/wiki/%E5%AD%97%E5%8F%A5%E8%A7%A3%E6%9E%90

乱暴に単純化すると、字句解析は正規文法で扱える範囲を処理して、
構文解析は文脈自由文法で扱う範囲を処理する。


boost::spiritみたいに両者をシームレスに処理するのもあるけど、
普通は分割して扱ったほうが分かり易い。


305 :デフォルトの名無しさん:2007/01/23(火) 17:37:37
>>303
字句解析しないということは、文字単位で構文解析することになるけど、
f 一文字を読んで、予約語の for なのか、ただの識別子なのか判断つかないのが下向き構文解析だとちょっと困る。

LR構文解析の場合は、字句解析を分けた方がメモリや計算の手間がだいぶ減るような気がする(今の計算機だと大した差ではないけど)。

306 :デフォルトの名無しさん:2007/01/23(火) 19:06:48
C++みたいに、文脈情報が無いと字句解析できない場合はわけない方がいいのかも。
最近流行? のcombinator parserも基本はわけないよね。

307 :デフォルトの名無しさん:2007/01/23(火) 19:07:45
Lispなら(ry

308 :デフォルトの名無しさん:2007/01/24(水) 20:40:02
>>306
あと、同じく最近流行?のPackrat Parserでも字句解析は分けないね。
個人的には、字句解析というのはあくまでLALRとかLLなどのよくある
構文解析アルゴリズムで処理できるようにするためであって、本質的には
要らないというか有害ですらあると思う。例えば、最近の言語だと文字列
(普通は字句解析で処理される)の中に式(構文解析で処理される)を埋め込む
ことができる言語が普通にあるが、こういうのは字句解析と構文解析が分かれて
いると非常に実現しにくい。

309 :デフォルトの名無しさん:2007/01/24(水) 20:58:24
packrat parserって下降型のparserだっけ?
左再帰は大丈夫?

310 :デフォルトの名無しさん:2007/01/24(水) 23:34:14
後戻りできるようなものを作ろうとすると、
字句解析と構文解析が分かれていたら非常にやりにくい。

311 :デフォルトの名無しさん:2007/01/24(水) 23:56:34
ループ以外の左再帰って使う機会あるの?

312 :デフォルトの名無しさん:2007/01/25(木) 23:13:20
>>309
左再帰はNG。そういうのは繰り返し(*)を使って書くのが定石。
右結合の演算子の場合は、右再帰で書くけど。

313 :デフォルトの名無しさん:2007/01/26(金) 08:21:29
21世紀にもなったというのに、左再帰を人手で展開せなあかんのか…
あれ、文法が汚くなるから嫌いなんだよな

e ::= e + e | n



e ::= n (+ e)*

になるのはつらい。

314 :デフォルトの名無しさん:2007/01/26(金) 12:03:23
>>313
まあ、その辺はトレードオフということで
ちなみに、俺はトップダウンparsing的な発想がデフォだから
左再帰を人手で展開するというよりも、展開系がまず先に
思い浮かぶ

315 :デフォルトの名無しさん:2007/01/26(金) 20:44:33
>>301
自己レス。同じ疑問をもった人へ。
いまどきのプログラム言語の作り方
http://www.amazon.co.jp/%E3%81%84%E3%81%BE%E3%81%A9%E3%81%8D%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E8%A8%80%E8%AA%9E%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-randy/dp/4839919232/ref=pd_sim_b_4/
がいいと思う。
字句解析と構文解析がわかればどういうもんか一発で理解できると思う。

316 :デフォルトの名無しさん:2007/01/26(金) 23:22:55
つ ttp://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2005/index.html
  ttp://kmaebashi.com/programmer/devlang/yacclex.html
  >2-3
まずはこんなところじゃね?
 

317 :デフォルトの名無しさん:2007/01/27(土) 02:35:40
>>316
いや、自分にはこの↓説明がいかんかったです。

字句解析
ソースプログラムを、「字句(トークン)」の並びに分割する処理です。
構文解析
トークンの並びから、解析木を構築する処理です。

何度読んでもさっぱりわかりませんでした。
>>315の本はこのわからん部分がわかるのでいいと思いました。
これが他とちょっと違う部分です。

318 :デフォルトの名無しさん:2007/01/27(土) 02:38:38
>>317
理論抜きでもイイから、他のちっこいスクリプトをまねして、
とにかく一回でも、実装してみれば、
ああーんそうか、って納得できるんだけどね・・・。


319 :デフォルトの名無しさん:2007/01/27(土) 04:17:50
パーサコンビネータの論文ありますか?

320 :デフォルトの名無しさん:2007/01/27(土) 13:27:52
最適化って、結局はグラフの操作がメインになるんだけど、
あれは、ややこしいねぇ・・・

(プロトタイプ的に)ナイーブな実装をしようとしただけでも、
普通のグラフライブラリなんて殆ど役にたたないし・・・

良いグラフライブラリがあれば、教えてください。


321 :デフォルトの名無しさん:2007/01/29(月) 02:42:01
>>320
最適化って例えばどんなやつ?
それによって変わるような気がするけど。

322 :デフォルトの名無しさん:2007/01/30(火) 07:53:13
>>321
"ほにゃららほにゃらら elimination" とか、
データフロー解析に絡む
あの一連のやつ。


323 :デフォルトの名無しさん:2007/01/31(水) 00:31:19
>>322
フローグラフ上のデータフロー解析なら
自分で実装するのがたぶん一番楽。

データフロー方程式を解くシステムは昔からあったと思うけど
なんかいまいち流行ってないし。


最近はCTLモデル検査とかで最適化する人もいるらしい。

324 :デフォルトの名無しさん:2007/01/31(水) 13:34:45
フローグラフ解析かぁ。
coins.flowあたりみればいいのかと思ったけど、さっぱりわからないです。
超簡単なソースどっかにないかなぁ。


325 :デフォルトの名無しさん:2007/01/31(水) 16:59:50
>>324
coins.backend.ana.LiveVariableBitMap
とか結構簡単だと思われる。

326 :デフォルトの名無しさん:2007/02/01(木) 23:47:32
>>323
手で書くのが難しいレベルの最適化って論理式で書けるの?
実行時間は?

327 :デフォルトの名無しさん:2007/02/02(金) 02:26:28
>>326
データフロー方程式を解くのと同程度のことなら書けるらしい。
それ以上だとたぶん無理。

実行時間はデータフロー方程式解くのと同じくらいかと。

328 :デフォルトの名無しさん:2007/02/02(金) 18:36:34
へー
おもしろそうだね

329 :324:2007/02/03(土) 12:44:06
>>325
おおー、理解できる予感!!

「コンパイラの構成と最適化」を見ながらソース読んでみてます。

LiveVariableBitMapのBitMapはBitMapSetのことですよね。
BitMapSetクラスは単なる0か1かが入ってる配列の管理クラスみたいなもんと。
live variable 解析は「12.2.7 変数の生と死の解析」のこと。

この「変数の生と死の解析」の結果を使って「12.2.8 無用命令の削除」等が出来ると。


330 :デフォルトの名無しさん:2007/02/04(日) 01:03:22
俺スクリプトがようやっと文字列結合まで回るようになった……

誰か、クラス設計とかで参考になりそうな資料ご存知ですか?
……Rubyのクラスを参考にしようかな


331 :デフォルトの名無しさん:2007/02/04(日) 03:30:00
>>330
つ 諦めろ

332 :デフォルトの名無しさん:2007/02/04(日) 04:39:42
>>330
http://www.squeak.org/Download
http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=smalltalk

333 :デフォルトの名無しさん:2007/02/04(日) 11:21:15
squeakね。クラスはこんな感じか。
ttp://squeak.qp.land.to/wiki/index.php?%E3%82%AF%E3%83%A9%E3%82%B9%E8%A7%A3%E8%AA%AC

Collectionが充実しとりますな。何でそうなったかの経緯はわからんけど……
マクロ的なものが無かったからかね?

334 :デフォルトの名無しさん:2007/02/04(日) 11:31:37
>>333
そこのサイト並べ方がよろしくないね。
継承関係がわかるように入れ子で表示するとコレクションがどういう方向でできてるのかよくわかるのに。
smalltalkならクラスブラウザで眺めるだけでいいから必要感じないのかもしれんけど、知らない人が見たらたくさんあってパニック起こすだけじゃないかと思った。

つーわけで330は一度squeakを実行してみるよろし。


335 :デフォルトの名無しさん:2007/02/04(日) 12:02:38
>334
「自由自在〜」持ってたので、それを参考にブラウズしてみました。
……すごい数ですな。GUI系を飛ばして眺めてみます。


336 :デフォルトの名無しさん:2007/02/06(火) 23:24:01
質問です。

スクリプト言語を作ろうと思って、まずはC++でC言語コンパイラ作ってるんですが、
typedefの処理に困っています。

ソースファイル内の全ての構文解析完了後に、
構文木をたどって意味解析処理の一部としてtypedefの解析をしています。
この方法だと構文解析機がtypedefで定義された型名を使用して変数を宣言しようとしたとき、
typedef定義された型名を型名として認識できません。

解決方法として2つを考えています
・構文解析中にtypedefを検出してtypedef定義テーブルを作成する
・構文解析を2回行う(1回目はtypedefを含めたシンボルの検出、2回目が本当の構文解析?)

皆さんどちらの手法でやっているのでしょうか。
それとも、こんな現象は発生しない?

337 :デフォルトの名無しさん:2007/02/07(水) 03:04:23
有名な問題なのでぐぐれ。

338 :デフォルトの名無しさん:2007/02/12(月) 01:34:47
>>303
その疑問はもっともだと思う。

字句解析と構文解析が別れている主な理由は、
yaccを真似たコンパイラ・コンパイラが多いことと、
字句解析には字句解析ならではの問題があるため。
他には、コンパイラの教科書でも字句解析と構文解析が分けられている
ことなんかが挙げられるかもしれない。

一般的に字句解析では、構文解析で使われるLR(k)やLALR(1)よりも
一段制約が多く、より高速に動作する正規表現という文法を使う。
普通こういうことは考えないけど、
正規表現はLALRなどのよく知られている文脈自由文法により常に表現可能で、
(逆は無理な場合がある)
原理的には字句解析を構文解析に組み込むことはできる。

ただし、現実の字句解析が教科書的で単純な方法で行われることは稀で
普通は予約語のマッチを一通り試した後、
どれにもマッチしない場合はそれを識別子として扱うという
バックトラック的な処理が必要になる。
これが普通のLALRなどではできないので、
よく知られたコンパイラ・コンパイラ、yaccやbisonなんかでは
字句解析と構文解析を一緒にやることは無理ではないかと思う。
また、速度的な観点から避けられることもある。

一昔前(yaccが作られたのは1970年代)は、
パソコンの性能が今では考えられないくらい低かったし、
理論の構築も進んでいなかったので
この二つを分けることが絶対に必要だった。
もうこの考え方は古いのかもね。

339 :デフォルトの名無しさん:2007/02/12(月) 04:57:43
無理してやればできるんでないの?

symbol ::= alphabet alpabet_or_digits

終端でない記号が爆発的に増えてコンパイルできなくなりそ。
遅延評価で空間量を時間量に置き換えてどうたらかな。

340 :デフォルトの名無しさん:2007/02/12(月) 08:05:49
大まかに言うと字句解析は正則言語(⊆文脈自由言語)の解析、構文解析は文脈自由言語の解析なんだから、字句解析の部分も構文解析でできるに決まってるでしょ。

処理が二つに分かれている理由は、字句解析を有限オートマトン風に処理するアルゴリズムは、既知の構文解析のアルゴリズム(LL等)よりはるかに高速なこと。
それと構文解析木の底辺(=字句解析前の入力文字列)を字句解析で押し上げれば、構文解析の入力の個数を(定数分の一に過ぎないが)減らせること。
木構造の性質を考えれば、底辺の要素数は、木全体の底辺以外の全要素数より多くなるでしょ(ε生成を除去できることから)。

基本的には理論的な背景がある。

341 :デフォルトの名無しさん:2007/02/12(月) 16:20:44
正規言語を受理するlexerを、文脈自由言語を受理するparserで置き換えることができる
のは当然だが、これは今の話に余り関係ない。
字句解析-構文解析と処理をわけなかった時の一番の問題は、>338で言われている通り、
バックトラックもしくは予約語の最大長分の先読みが必要になること。
packrat parserはバックトラック演算子があるんだっけ?

342 :デフォルトの名無しさん:2007/02/12(月) 16:43:34
>>341

packrat parsingではバックトラック演算子があるわけじゃなくて、
デフォルトの動作がバックトラック。つまり、

A | C

という式があった場合、まずAにマッチするかどうかを試して、失敗した場合Cを
試すという動作になる。ただ、これだけだと困る場合があるので、そういうときは
syntactic predicateという無限長の先読み演算子を併用することになる

343 :デフォルトの名無しさん:2007/02/12(月) 19:05:13
なるほど。サンクス。
Cのparserでも書いてみるかな。

344 :デフォルトの名無しさん:2007/02/22(木) 21:52:02
再帰下降構文解析をするときに、
深いところで起きたエラーを戻り値で次々と伝えて行くやりかたは
かっこ悪いですよね?

345 :デフォルトの名無しさん:2007/02/23(金) 23:36:50
例外はどうでっしゃろ?

346 :デフォルトの名無しさん:2007/02/24(土) 00:18:45
>>345
投げられない言語もあるからなぁ。


347 :デフォルトの名無しさん:2007/02/24(土) 03:44:41
そこでデータとして定義したステートマシンを各文法ごとに用意して
スタックにそれのステートを積んで行き
本質的には再帰だけどループで実行できて
エラーがあったときはただそのループを止めるだけ
なんてのはどうでしょう

ギャグで言ってます

348 :デフォルトの名無しさん:2007/02/24(土) 05:59:51
人間bison!
まさかコレが「件」って奴?


349 :デフォルトの名無しさん:2007/02/24(土) 11:07:55
>>345
if( !is_ident(context) ){
 throw syntax_error("hoge hoge");
}

こんな感じのプログラムが、カッコいいとは到底思えない俺がいる

350 :デフォルトの名無しさん:2007/02/24(土) 15:00:14
再帰だとスタックを使い過ぎてオーバーフローしないだろうかと
不安だった、そういう時期が僕にもありました

351 :デフォルトの名無しさん:2007/02/25(日) 05:04:58
Rubyのインタプリタはスタックオーバーフローで死んだりする……

352 :デフォルトの名無しさん:2007/02/26(月) 08:53:12
どんだけスタック食いつぶすスクリプト書いたんだwww

353 :デフォルトの名無しさん:2007/02/26(月) 19:14:21
>>352
Mac OS Xのデフォだと簡単に食いつぶす。
なのでulimitでスタックの制限をunlimitedにしなきゃならん。

354 :デフォルトの名無しさん:2007/02/27(火) 20:25:27
>>352
たらいまわしとかだろw

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

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

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