「コンパイラ・スクリプトエンジン」相談室11at TECH
「コンパイラ・スクリプトエンジン」相談室11 - 暇つぶし2ch2:デフォルトの名無しさん
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
素直でよろしい。
これはとても大切。


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

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


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

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

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

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





























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

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

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


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

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

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



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

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


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

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

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


210:12
06/11/23 12:14:56
ohそれはすばらしい

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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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


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

239:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/12 01:56:15
SECDてこれ?
URLリンク(en.wikipedia.org)
面白そうですな。ちょっと読んでみるよ。

241:デフォルトの名無しさん
06/12/12 20:19:43
CodeZine:JavaScriptでつくるSchemeインタプリタの基礎の基礎(lisp)
URLリンク(codezine.jp)


JavaScriptでLispwwwwwwwww

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

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


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

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

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

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

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

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

248:230
06/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:デフォルトの名無しさん
06/12/15 23:55:06
coins verup

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

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

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

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

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

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

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

257:デフォルトの名無しさん
06/12/16 20:16:35
URLリンク(hp.vector.co.jp)

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

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

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

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

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

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


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

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

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


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



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

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


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

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

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


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

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

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

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

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

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

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

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

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


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


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

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


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

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

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

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

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


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

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

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

莫迦?


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

304:デフォルトの名無しさん
07/01/23 01:33:19
Wikipediaさんに聞くと良いと思うよ。
字句解析:入力を字句(プログラムの最小単位)に分割する
URLリンク(ja.wikipedia.org)
構文解析:字句同士の関係を解析するURLリンク(ja.wikipedia.org)

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


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


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

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

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

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

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

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

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

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

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

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

e ::= e + e | n



e ::= n (+ e)*

になるのはつらい。

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

315:デフォルトの名無しさん
07/01/26 20:44:33
>>301
自己レス。同じ疑問をもった人へ。
いまどきのプログラム言語の作り方
URLリンク(www.amazon.co.jp)
がいいと思う。
字句解析と構文解析がわかればどういうもんか一発で理解できると思う。

316:デフォルトの名無しさん
07/01/26 23:22:55
URLリンク(www.hpcs.is.tsukuba.ac.jp)
  URLリンク(kmaebashi.com)
  >2-3
まずはこんなところじゃね?
 

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

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

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

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


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

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

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

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


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

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


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

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


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

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


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

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

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

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

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

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

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

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

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


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

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


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

332:デフォルトの名無しさん
07/02/04 04:39:42
>>330
URLリンク(www.squeak.org)
URLリンク(www.cincomsmalltalk.com)

333:デフォルトの名無しさん
07/02/04 11:21:15
squeakね。クラスはこんな感じか。
URLリンク(squeak.qp.land.to)

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

symbol ::= alphabet alpabet_or_digits

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

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

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

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

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

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

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

A | C

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

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

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

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

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


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

ギャグで言ってます

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


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

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

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

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

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

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

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

355:デフォルトの名無しさん
07/03/02 02:44:15
>>354
スクリプトの実行でスタック食いつぶすなら再帰呼び出しすればいいだけだけど、インタプリタのスタックを食いつぶすってことは、やたら深いネストや式を自力で書くとか(もしくは何らかのプログラムでわざと生成?)しなきゃ無理ですな。

356:デフォルトの名無しさん
07/03/02 02:54:05
>>355
……え?

357:デフォルトの名無しさん
07/03/02 03:00:47
なるる

358:デフォルトの名無しさん
07/03/03 23:21:19
ちょっと質問良いですか?

行末に対してはセミコロンを省略しても良いようにしたいんですけど、
pnuts がやってるみたいに 『改行入れても良い部分を全部明示的に指定する』 よりもっとスマートな改行な方法あります?
当方 JFlex と Jay を用いております。

359:デフォルトの名無しさん
07/03/04 08:46:19
>>358
Pnutsのような方法以外だと、Lexerに改行を無視する状態と無視しない状態の
2つの状態を持たせて、ParserからLexerの状態を明示的に状態を遷移させる
という方法がある。ただ、それほど楽にはならないと思うけど。

360:デフォルトの名無しさん
07/03/17 12:21:14
>>358
つまりPnuts式はStatelessなlexerであり、lexerは楽できるけどParserがめんどい。
>>359の方法はlexerがstatefulになって少し面倒くさくなるぶんparserがすこし楽になる。
トレードオフだな。

しかし昔に比べて過疎ってるな。

361:デフォルトの名無しさん
07/03/17 23:54:30
俺言語を造っている変態が減ったんだろ
……俺言語の設計ってけっこう楽しいけど、破綻しないように作るのはしんどいよね。


362:デフォルトの名無しさん
07/03/18 15:23:34
構造体についての実装方法が載っている良書を教えてもらえませんか?
サンプルソースがあるとベターです

どうもCのサブセットと言いつつ構造体を省いている本しか持ってないので・・・

363:デフォルトの名無しさん
07/03/18 15:39:23
別に何を悩むこともないと思うんだが。

364:デフォルトの名無しさん
07/03/18 15:48:44
磯Cでいいんでない?

365:デフォルトの名無しさん
07/03/18 15:50:43
それが関数の呼び出しで詰まりまして
ある関数のreturnで構造体を返した場合ですが
呼び出し前に返値用のスタックを確保しておいて
そこにreturnのときにコピーするようなまどろっこしい方法しか思いつきません。

それと、動的配列を有している構造体など
どうしてるのかいなと思いまして

366:デフォルトの名無しさん
07/03/18 15:56:41
磯Cてなんですか?検索掛けたら考古学関連がでましたが・・・

367:デフォルトの名無しさん
07/03/18 16:01:48
動的配列のポインタを持っている構造体で無く?
そのものを持っているのですか?

368:デフォルトの名無しさん
07/03/18 16:04:55
>>366
CはISOでも標準化されてる
たしか言語そのものともうちょっとこまごまとしたものがあったはず
URLリンク(ja.wikipedia.org)

てかアライメントさえ気をつければいいだけなんじゃないか?

> そこにreturnのときにコピーするようなまどろっこしい方法しか思いつきません。 
それでいいんじゃなかったかと

369:デフォルトの名無しさん
07/03/18 16:05:59
ついでに呼び出し既約
URLリンク(ja.wikipedia.org)

370:デフォルトの名無しさん
07/03/18 16:10:44
そこらがどう実現すればいいのか解らないのですが
やりたいことは、

struct test
{
  string s;←これを動的にしたい
  int i;
}

のような感じです

371:デフォルトの名無しさん
07/03/18 16:12:10
>磯C
なるほどISoのことでしたか。
有り難うございます見てみます。

372:デフォルトの名無しさん
07/03/18 16:54:50
>>370
stringって何者?

373:デフォルトの名無しさん
07/03/18 17:24:34
>>372
流れからして>>362のスクリプトにあるファーストオブジェクトだと思うが

動的にサイズが変わるんだとiへのオフセットも毎回変わるの?


374:デフォルトの名無しさん
07/03/18 19:11:26
>>370
普通
struct string {
size_t currentBufSize;
 char *pStrBuf;
//なにやらいろいろ定義
};

とかなってないかえ?

375:デフォルトの名無しさん
07/03/20 17:21:18
日本語が扱えないと話にならないコンパイラを作ることになったのですが、
マルチバイト文字の扱いが一番楽なパーサジェネレータはどれですか?
Unicode固定でいいです。
・日本語を含む文字列を普通に解析できる
・文法定義中でも日本語が使える(\uxxxxのような書き方でなく)
SableCCはどちらもいけるようですが、ドキュメントが貧弱なので不安です。
ANTLRは後者が駄目でした。

376:デフォルトの名無しさん
07/03/20 21:59:16
パーサと文字コードは全く関係ない。
字句解析コードも出力する機能があるタイプなら関係する。

たとえば私は今、lemonを使ってるけどトークン番号を渡すだけ。

377:デフォルトの名無しさん
07/03/20 22:34:26
rubyのraccは字句解析部分をrubyのパターンマッチで記述しているので日本語もいけそう。
構文解析やその他の部分で機能が十分かどうかは不明。


378:デフォルトの名無しさん
07/03/20 23:11:19
raccでHTML用のテンプレートエンジンを作ったけど、特に問題なしです。

……まあ、UTF-8のみでOKなら、ダメ文字もバイト切れ目問題も無いから
あんまり気にする必要が無いような気がするけど……

379:デフォルトの名無しさん
07/03/21 04:54:50
>>375
日本語はparserでなくlexerの方の問題では?

380:デフォルトの名無しさん
07/03/21 07:25:13
lexのもんだいだよな・・・

381:デフォルトの名無しさん
07/03/21 09:24:02
URLリンク(www.mainichi-msn.co.jp)
訃報:J・バッカスさん82歳=コンピューター言語開発者

 ジョン・バッカス氏(コンピューター言語の開発者)AP通信が20日
伝えたところによると17日、オレゴン州アシュランドで死去。82歳。
 デラウェア州ウィルミントン生まれ。米コンピューター大手IBMで1
950年代に、プログラム作業の大幅な効率化に貢献したコンピューター
言語「フォートラン」を開発。コンピューターが扱う言語の文法を定義す
るのに用いる「バッカス・ナウア記法」も開発し、今日でも幅広く使われ
ている。77年にコンピューター分野のノーベル賞といわれるチューリン
グ賞を受けた。(共同)

382:デフォルトの名無しさん
07/03/21 09:31:15
正規表現を状態遷移図に変換するツールalamo。
現在WIN32バイナリのみリリース、
まだシフトJISのみ入力可能。

使用方法:
標準入力から正規表現を入れると標準出力にdot言語のソースが出力される。
A>alamo < textfile | dot -Tjpg > out.jpg
トンプソンの構成法でなくεを消去した状態のNFA。
出力をファイルに落としてからUTF8に変換すれば漢字も出た。

URLリンク(capslockabcjp.kitunebi.com)

※動作条件としてURLリンク(www.graphviz.org)が必要

383:デフォルトの名無しさん
07/03/21 10:00:12
>>381
うお、マジか。ご冥福をお祈りします。

384:デフォルトの名無しさん
07/03/21 10:41:19
「可愛そうなジョージ、病気になる前まではソートルーチンもちゃんと動いていたのに・・・」

385:デフォルトの名無しさん
07/03/21 14:03:48
>>384
これなんだっけ!?すげーみたことあるんだけど・・・・

386:デフォルトの名無しさん
07/03/21 16:16:51
スレリンク(scienceplus板)
【訃報】ジョン・バッカス氏 FORTRANを開発

387:デフォルトの名無しさん
07/03/21 17:07:33
>>384
本物のプログラマおつ

388:デフォルトの名無しさん
07/03/21 23:25:45
lemonがWindows上ではlemapar.cがカレントにないと動かないので、
調べてみるとlemonのpathsearchという関数がバグっている。
6行程度の修正で直る。

URLリンク(capslockabcjp.kitunebi.com)

389:デフォルトの名無しさん
07/03/22 13:50:39
かわいそうなのはジョージじゃなくてソートルーチンなんだろ。

390:デフォルトの名無しさん
07/03/22 14:03:45
ジョージかわいいよジョージ

391:デフォルトの名無しさん
07/03/22 18:31:34
どうしてもMOTHERを連想する

392:デフォルトの名無しさん
07/03/24 17:14:38
MをとったらOTHER、他人です。

393:デフォルトの名無しさん
07/03/24 18:15:58
other単体では他人になりません。

394:デフォルトの名無しさん
07/03/26 13:12:56
another

395:デフォルトの名無しさん
07/03/26 14:16:18
bother

396:デフォルトの名無しさん
07/03/28 12:12:32
商用ゲームで使うスクリプトのコンパイラ・エンジンを作ることになったんですが、
そういったプログラムに関してはわからないことが多いので悩んでいます。
組み込み系言語のLuaを使うという選択肢もあるんですが、とりあえず自作する方向で勉強してます。
flex&bisonあたりは使うつもりなのですが、他にも使って便利なツールってあるでしょうか?
初心者はnasmとかalinkみたいなものを使った方がいいんでしょうか。

397:デフォルトの名無しさん
07/03/28 13:20:54
ANTLR

398:デフォルトの名無しさん
07/03/28 14:13:22
なぜLuaを使わないかの理由が知りたい。

399:デフォルトの名無しさん
07/03/28 16:30:15
何故インタプリタ型のLuaとコンパイラ型の言語設計(nasmなどを挙げている事から
の類推)を並べているのか分からないのだけど、コンパイラ作るだけならパーサ
ジェネレータ以外に必要なものは無いし、それ以上の補助ツールも無いと思う。

nativeに落とすのであればWindowsならcoffなどのフォーマット参照、コンソール
なら各ベンダの資料とか、自前でニモニックを変換するのはかなり泥臭い話なんで
可能ならnasmとかを使う方が遥かにお手軽、最適化を自前実装するのでなければ、
期待できるコンパイラの性能にも拠るけどCとかにトランスレートする方が高速な
動作を期待できるかもしれない。

というかゲームの種類と環境でコンパイラなのかVM型のインタプリタとかで良い
のか、デザイナー向け簡易スクリプトなのか汎用言語タイプなのか良く分からない。
単純に上から言われたのならもう少し何が欲しいのか詰めた方が良いんじゃないかと
心配してしまったのだけど。

400:デフォルトの名無しさん
07/03/28 16:55:23
BNFのコンフリクトを解決しやすいツールって何かないですか?

401:デフォルトの名無しさん
07/03/28 20:08:47
つ-vオプション

402:デフォルトの名無しさん
07/03/28 21:28:51
つ熟練者の直感

403:デフォルトの名無しさん
07/03/28 22:08:45
>>399
具体的なことを言えば、
社内のスクリプトのシステムを作っていた前任者が大分前に辞めてしまい、
いい加減作り直さなきゃね、という状況で自分がやることになり、
前任者の作ったものを解析した結果、
yac&lexを使い、自前ツールでアセンブリ言語に変換し、そこから先はnasm+alinkのようなツール(実際は別物)
でマシン語にしたものを実際のゲーム側で読み込んで使っていました。
それで、そういう方向でいろいろ調べているという状況です。
>>398
Luaは存在は知っているのですが、具体的なことはまだ知りません。
上記のような状況なので調べるものとしてLuaの優先順位が今は低いだけで、
一度しっかり調べて検討するつもりです。

404:デフォルトの名無しさん
07/03/28 22:40:22
>>403
>yac&lexを使い、自前ツールでアセンブリ言語に変換し、そこから先はnasm+alinkのようなツール(実際は別物) 
>でマシン語にしたものを実際のゲーム側で読み込んで使っていました。

それは「スクリプトのシステム」ではなく、「コンパイラ」ではないかと・・・

405:デフォルトの名無しさん
07/03/28 22:59:46
難儀ですな、、、
自分がコンパイラ作った時はyaccで文単位で構文木を作ってそれをリストに格納、
ニモニック変換時は各文ごとに構文木を辿ってテンプレートに従ってコード出力、
言語に型システムがある場合はニモニック生成前に構文木を一旦辿って型の文脈
を決定、その後ニモニック生成ってカンジですた。

自分の場合スタック型VMだったんでレジスタ割付の最適化とかは知らない、アキュムレータ
とメモリ間接に限定すれば簡単だけど、アセンブラがシンボル対応ならアドレス解決
は不要かな。

後はリファレンスカウンタまでならNativeでも比較的安易に作れるけどFull GCだと
スタックや変数領域をどう扱うか、スレッドの管理までフレームワークを用意する
形なのである程度事前設計が要ると思う。

まぁ参考になるか分かりませんが、、、


406:デフォルトの名無しさん
07/03/29 00:08:48
もう前任者のはいったん捨てた方がいいかもシレン
ちゃんとしたドキュメントがあるなら別だが

407:デフォルトの名無しさん
07/03/29 01:00:32
>>406
レオもそう思う

408:デフォルトの名無しさん
07/03/29 01:40:53
>>403
>でマシン語にしたものを実際のゲーム側で読み込んで使っていました。

ここまでやってるってことは、普通にインタプリタじゃパフォーマンスが足りないってことかな?

なら、CやC++言語へのトランスレータ作ったほうが簡単だし、
工数もかからないんじゃないかな。

俺は商業じゃないけど、EXCEL->C++へのトランスレータ作って使ってる。

場合によってはC++そのままの機能も埋め込めるし、既存言語に足りない機能足すだけだから、
それこそあっという間に完成するぞ。


409:デフォルトの名無しさん
07/03/29 06:38:39
ちなみにLuaのVMはJITを搭載しているから、他のスクリプト言語と比べてバフォーマンスはだいぶ高い。

410:デフォルトの名無しさん
07/03/29 12:01:35
>>404-409
返答ありがとうございます。参考になります。

>>408
最低限のレベルで要求されているのは、メモリや速度の面で問題ないということと、
前任者のスクリプトがCライクな仕様で、社内メンバーがそれに慣れているので
それに合わせなければなりません。

>>409
とりあえず、前任者のものをある程度理解できたのでこれからLuaを勉強しようと思ってます。


411:デフォルトの名無しさん
07/03/29 16:26:26
>>410
作りなおすってことは、前任者の作った言語に不満があるってこと?
どんな不満があるのか(機能が低い、言語使用が貧弱、とか)によっても
作り方が変わってくるんじゃないかと思う。
(トランスレータにするのか、インタープリタで間に合うのかとか…)

412:411
07/03/29 16:27:10
訂正:言語使用 → 言語仕様


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