「コンパイラ・スクリプトエンジン」相談室11 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
06/10/15 11:38:10
プログラミング言語処理系の開発に興味のある人達のスレッドです。

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

過去スレ
1 URLリンク(pc.2ch.net)
2 スレリンク(tech板)
3 スレリンク(tech板)
4 スレリンク(tech板)
5 スレリンク(tech板)
6 スレリンク(tech板)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
関連リンクは多分 >>2-10 あたり

2:デフォルトの名無しさん
06/10/15 11:38:42
Wikiのまとめページ
URLリンク(www6.atwiki.jp)

★コンパイラ一般

・色々なツールの紹介
 URLリンク(catalog.compilertools.net)
・コンパイラ関連のリンク集
 URLリンク(www.ulis.ac.jp)
・スクリプティング言語資料室(仮) (リンク集)
 URLリンク(www.kt.rim.or.jp)
・Compiler Construction
 URLリンク(www.ie.u-ryukyu.ac.jp)
・情報システム工学実験 III コンパイラ・コンパイラ
 URLリンク(math.cs.kitami-it.ac.jp)
・OS/Programming 簡単な C コンパイラ
 URLリンク(www.csg.is.titech.ac.jp)
・正規表現
 URLリンク(hp.vector.co.jp)
・コンパイラ研究・開発情報の一集積所
 URLリンク(compilers.cs.uec.ac.jp)
・Links and Selected Readings
 URLリンク(www.gnu.org)
・国産のコンパイラ共通インフラストラクチャCOINS
 URLリンク(www.coins-project.org)

3:デフォルトの名無しさん
06/10/15 11:39:14
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 URLリンク(www.linux.or.jp)
・Turbo Pascal Lex/Yacc
 URLリンク(www.musikwissenschaft.uni-mainz.de)
・Jim Roskind's LALR(1) C++ Grammar
 URLリンク(www.empathy.com)
・Flexと Bisonを同時に使う
 URLリンク(guppy.eng.kagawa-u.ac.jp)
・KITE_ASM (yacc,lex)
 URLリンク(www.arch.cs.kumamoto-u.ac.jp)
・bison用のC++ LALR skeleton
 URLリンク(www.bj-ig.de)
・ANTLR(非yaccのパーサジェネレータ)
 URLリンク(www.antlr.org)
・JavaCC(Java Compiler Compiler)
 URLリンク(javacc.dev.java.net)
 URLリンク(village.infoweb.ne.jp)
 URLリンク(www.asahi-net.or.jp)
・CUP, JLex, JFlex
 URLリンク(www.cs.princeton.edu) (JLex, CUP)
 URLリンク(www.jflex.de)
・SableCC
 URLリンク(www.sablecc.org)
・¬<><∪∪ (notavacc)LALR(1)
 URLリンク(ne.cs.uec.ac.jp)
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 URLリンク(spirit.sourceforge.net)
 URLリンク(boost.cppll.jp)(マニュアル日本語化プロジェクト)
 URLリンク(www.fides.dti.ne.jp)

4:デフォルトの名無しさん
06/10/15 11:39:49
★ごみ集め

・GC FAQ -- draft
 URLリンク(www.iecc.com)
・A garbage collector for C and C++
 URLリンク(www.hpl.hp.com)
・一般教養としての Garbage Collection
 URLリンク(www.is.s.u-tokyo.ac.jp)
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
 URLリンク(www.amazon.com)

★処理系,スクリプト

・kikyou.info (吉里吉里というゲームのスクリプト)
 URLリンク(kikyou.info)
・tiny C コンパイラ (C)
 URLリンク(www.watalab.cs.uec.ac.jp)
・6809用 Micro C コンパイラ
 URLリンク(www.axe-inc.co.jp)
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
 URLリンク(users.pandora.be)
・自作コンパイラの部屋(PL/1, Pascal等)
 URLリンク(www.tokumaru.org)
・『Rubyソースコード完全解説』サポートページ
 URLリンク(i.loveruby.net)
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
 URLリンク(www.okisoft.co.jp)
・MSによるPEフォーマット仕様書(日本語)
 URLリンク(www.interq.or.jp)

5:デフォルトの名無しさん
06/10/15 11:40:24
★学会

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

6:デフォルトの名無しさん
06/10/15 11:40:56
★参考書籍

・コンパイラ 原理・技法・ツール 1&2
 URLリンク(www.amazon.co.jp)
 URLリンク(www.amazon.co.jp)
 通称ドラゴンブック。バイブル。
・コンパイラ構成法 原田 賢一
 URLリンク(www.amazon.co.jp)
 URLリンク(www.hara.cs.keio.ac.jp) (ソース、正誤表のダウンロード)
・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
 URLリンク(www.amazon.co.jp)
 一冊で済ませたい人へ。
・コンパイラの構成と最適化 中田 育男
 URLリンク(www.amazon.co.jp)
 最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。
・コンパイラの仕組み 渡邊 坦
 URLリンク(www.amazon.co.jp)
 薄い奴(185p)を読みたい人に。
・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
 URLリンク(www.amazon.co.jp)
 まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
 URLリンク(www.cbook24.com)
 初心者向けの優しい解説本。

7:デフォルトの名無しさん
06/10/15 11:50:25


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

・Compilers: Principles, Techniques, and Tools(Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
 URLリンク(www.amazon.co.jp)

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

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

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

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

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

動かなかったらごめん

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

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

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


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



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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

35:デフォルトの名無しさん
06/10/18 00:01:05
URLリンク(nanashi.info)

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

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


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

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

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

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

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

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

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

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

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

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

46:デフォルトの名無しさん
06/10/18 13:00:47
>>37
URLリンク(freshmeat.net)

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

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

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


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

>>49

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

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

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

53:12
06/10/18 22:56:08
動かなかったらごめんね

54:デフォルトの名無しさん
06/10/18 23:11:42
>>50
URLリンク(go.microsoft.com)

55:12
06/10/18 23:19:28
インスコはした

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

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

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

57:12
06/10/18 23:59:40
そんな違うの?

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

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

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

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

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

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

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

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

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


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

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

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

66:12
06/10/19 21:25:35
おうthx

>>65
割れば?


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

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

詳細(ry


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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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


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

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

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

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

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

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

89:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/10/22 03:40:30
>>86

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


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

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

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

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

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

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

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

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

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



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

HSPを使う意味ね〜

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

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

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

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

conflicts: 31 shift/reduce

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


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

103:デフォルトの名無しさん
06/10/23 05:02:19
つSpirit
URLリンク(boost.cppll.jp)

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

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

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

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

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


109:デフォルトの名無しさん
06/10/24 12:01:07
いまどきのプログラム言語の作り方 (単行本)
URLリンク(www.amazon.co.jp)

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

125:デフォルトの名無しさん
06/10/28 03:21:22
URLリンク(www.hwaci.com)
URLリンク(www.chibutsu.org)

プッシュ型まんせー

126:12
06/10/28 04:42:35
公開したばっかだよ

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


128:デフォルトの名無しさん
06/10/28 11:50:07
ソース見るかぎりpublic domainだけど……
URLリンク(www.sqlite.org)


129:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/10/28 12:37:50
>129
それってソースどこ?

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

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

本人のサイトでしょ。
URLリンク(www.hwaci.com)

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

132:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/10/28 20:25:15
public domain だと copyright が守れ無い可能性があるのでは?

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

135:デフォルトの名無しさん
06/10/28 22:27:12
URLリンク(d.hatena.ne.jp)
チッ。イイ気になりやがって。

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

167:デフォルトの名無しさん
06/11/04 06:03:46
>166
ほれ
URLリンク(www8.atwiki.jp)

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

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

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

公開サイト
URLリンク(mico.x0.com)

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

(ここにベンチがある)
URLリンク(gamdev.org)

187:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/11/06 21:30:18
そういえば、志古志古1000というのが無かったっけ?

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

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

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

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

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

その通りだ。スマン。。

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



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4761日前に更新/194 KB
担当:undef