「コンパイラ・スクリ ..
[2ch|▼Menu]
27:デフォルトの名無しさん
07/10/04 16:16:32
Low Level Virtual Machine - Wikipedia
Wikipedia項目リンク

The LLVM Compiler Infrastructure Project
URLリンク(llvm.org)

これは外出?

28:デフォルトの名無しさん
07/10/05 01:39:02
俺はGin見て、アイデアが思い浮かんだのでありがてぇ思っただよ


29:デフォルトの名無しさん
07/10/05 12:57:30
Ginって?

30:デフォルトの名無しさん
07/10/07 21:19:06
>>29
javascriptのパーサジェネレータです。
URLリンク(nanto.asablo.jp)


31:デフォルトの名無しさん
07/10/07 23:33:45
やれやれだぜ
もうパーサジェネレータの話は禁止しようぜ
ここからパーサジェネレータから先の話だけな

32:デフォルトの名無しさん
07/10/08 21:38:24
勝手に決めるなよ

33:デフォルトの名無しさん
07/10/09 01:00:16
ANTLR 3 をC言語で扱うサンプルないかな?

それかANTLR3に近いパーサないかな?

34:デフォルトの名無しさん
07/10/10 21:18:42
>>27
まじ凄いんじゃね?
というぐらいしか俺にはわからんが
詳しい人解説たのむ

35:デフォルトの名無しさん
07/10/11 23:51:33
解説も何も見たままだが。
用語が判らんとかなら>>6の本でも読め。

36:デフォルトの名無しさん
07/10/12 10:35:55
そういえば、parrotって完成する日が来るんだろうか

37:デフォルトの名無しさん
07/10/12 13:06:34
>>27
は、最適化されたVMを提供するようだが、
使っている人のサイトとかみると、
実際はまだまだ未完成でバグバグみたい

38:デフォルトの名無しさん
07/11/06 13:39:44
LL(1)は構文木作るの面倒だな。

39:デフォルトの名無しさん
07/11/11 12:18:03
コンパイラ構成法 原田 賢一著

を読んでいっているのですが、理解できないところが多々あります。
演習問題の解答、解説等が載っている本などはありませんか?

40:デフォルトの名無しさん
07/11/12 06:37:16
>>6は切れてるな
あきらめろ

41:デフォルトの名無しさん
07/11/23 00:11:12
東京大学の言語処理系(mini-Python)を作る講義資料 2006年版
URLリンク(www.logos.ic.i.u-tokyo.ac.jp)

2007年版
URLリンク(www.logos.ic.i.u-tokyo.ac.jp)


俺にもPython作れる気がしてきた

42:デフォルトの名無しさん
07/11/23 11:23:55
>41
中身まだ全部見てないけど面白そう。こういう講義受けたかったな。
新しい方(2007年版)って今講義中なのか。



43:デフォルトの名無しさん
07/11/23 22:10:46
LALRのパーサー使ってきたけど、文法が複雑になると、Shift-Reduce衝突を除去するのに
一苦労。で、LL(*)のパーサーを使い始めたが、左再帰除去しないといけないので可読性に多少難あり。
でも、慣れれば、複雑な文法定義するのにLL(*)のパーサーの方が開発しやすいのかも。そんな予感。



44:デフォルトの名無しさん
07/11/25 21:34:15
いいなあ東大。めっちゃ楽しそう
俺の頭では入れなかったよ



45:43
07/11/25 22:08:15
Expr = OrExpr
OrExpr = AndExpr { "OR" AndExpr }
AndExpr = NotExpr { "AND" NotExpr }
NotExpr = "NOT" NotExpr | CompExpr
CompExpr = AddSubExpr { ("="|"<"|">"|"<="|">="|"<>") AddSubExpr
AddSubExpr = MulDivExpr { ("+"|"-") MulDivExpr }
MulDivExpr = Primary { ("*"|"/") Primary }
Primary = NUMBER | ("+"|"-") Expr | "(" ExprList ")"

ExprList = Expr { "," ExprList }

これで、優先順位OR<AND<NOT<比較演算子<2項+-<2項*/<単項+-で括弧付きが最優先になるよな?・
後、単なるスカラー値のみじゃなく、(3,4) = (2,3)や((3,4),(5,1)) + (5,1)
などもacceptできるよな?
LL(*)のやっぱ、楽そうだな。


46:43
07/11/25 22:11:57
いや、上の文法だと単項+-と括弧付きの優先順位まずいかも。うむむ。


47:43
07/11/25 22:14:56
ExprList = Expr { "," ExprList }

ExprList = Expr { "," Expr } だった。

48:43
07/12/01 13:31:25
MulDivExpr = UnaryExpr { ("*"|"/") UnaryExpr }
UnaryExpr = [("+"|"-")] Primary
Primary = NUMBER | "(" ExprList ")"
だった。
LLパーサー何気にいいんだけど、セマンティックアクションの実行されるタイミングがようわからん。
例えば、
AddSubExpr =
 MulDivExpr
  {
   ("*"|"/") MulDivExpr (. アクション .)
  }
で、"*"まではパース成功して、右のMulDivExprで失敗してもアクションが実行される。
うーん。構文チェックだけならいいけど、構文木作ると、エラー時に上手くか書かないと
迷子のノードができて、メモリリークなる。orz



49:デフォルトの名無しさん
07/12/01 13:44:32
確保したメモリをすべてグローバル変数にリンクリスト形式で繋いでいって、パース終了後にまとめて解放、とか

50:デフォルトの名無しさん
07/12/02 00:02:14
Objective-Cで書かれたLisp風のプログラミング言語「Nu」
URLリンク(programming.nu)

Java VM上で動くLisp風のプログラミング言語「Clojure」
URLリンク(clojure.sourceforge.net)

51:デフォルトの名無しさん
07/12/02 00:10:14
Lisp風の言語ならそっくりLispの方がありがたいんだが要するにLisp1等価って事だよな?(RnRSに従わないCommonLispは満たさない)


52:デフォルトの名無しさん
07/12/07 12:47:00
ClojureはASMっていうバイトコードジェネレータを使ってるんですね。
ASMはBCELやSerpより軽量で高速でgroovyでも使われてて
サイズがBCELが350KB、SERPが150KB、ASM 2.2が33KB
だそう。GroovyやJRuby等で使われてるみたい。




53:デフォルトの名無しさん
07/12/12 00:41:53
MikoScript 言語
URLリンク(www.venus.dti.ne.jp)



54:デフォルトの名無しさん
07/12/13 00:17:51
箱?

55:デフォルトの名無しさん
07/12/13 00:29:19
何用の言語なんだろ?
オレオレ言語としては機能が充実してるけど、
何かに特化してるわけじゃなさそうだし。


56:デフォルトの名無しさん
07/12/13 01:11:04
自作エディタに使ってるみたい
URLリンク(www.venus.dti.ne.jp)


57:デフォルトの名無しさん
07/12/13 01:19:08
>>53
『本格的なオブジェクト指向プログラミング』って書いてあるけど、
何が出来たら本格的なんだろうか。そこに書いてある限りでは、
クラスが定義出来てインスタンスが生成出来て継承関係を作れる
みたいだけど、リフレクションとかインスペクトが出来るわけでは
なさそう。

58:デフォルトの名無しさん
07/12/16 16:22:45
プロトタイプベースのオブジェクト指向に対して
クラスベースのオブジェクト指向を本格的といってるのかもしれませんね。


59:デフォルトの名無しさん
07/12/16 16:44:08
本格的とか元祖とかを付けるとウケがいいからだろう
特に意味を考えてるとは思わない

60:デフォルトの名無しさん
07/12/16 16:49:40
自分の言語ならそのへんはこだわりを持ってるのが普通じゃないか?
「本格的オブジェクト指向ってなんですか」とでも訊けば語ってくれるよ多分。

61:デフォルトの名無しさん
07/12/16 16:52:28
あくちぶべーちっくは本格的ですか?

62:デフォルトの名無しさん
07/12/19 07:42:19
そもそもオブジェクト指向みたいな現場から発生した醜いパラダイムに
本格的も糞もないだろうにw

63:デフォルトの名無しさん
07/12/19 09:22:44
ほー、PARC は現場なのか。へー。

64:デフォルトの名無しさん
07/12/19 09:37:58
そうだよ

65:デフォルトの名無しさん
07/12/19 12:55:53
>>62をゴールドバーグ女史が読んだらなんと言うだろう

66:デフォルトの名無しさん
07/12/19 14:01:54
申し訳ない、私は日本語は読めないんです
という主旨のことを言うのでは

67:デフォルトの名無しさん
07/12/19 22:55:40
HTTPのRFCを見るとヘッダの文法がBNFで書かれていました。なので、yaccとlexを使えばHTTPヘッダを解析できるかなと思った
のですがlexで入力をトークンに分割するのが難しそうで行き詰まりました。Java等のプログラム言語だと、コメント部分でもない
限りトークンの区切りは空白文字でよいし、+を見たらPLUSとか適当なトークンとして認識すればよいしで字句解析部分はわりと
簡単そうですが、HTTPだと、たとえばAという文字を見たときに、UPALPHAと認識すればよいのか、HEXと認識すればよいのか、
それとも状況(lexの状態?)に応じて、数文字まとめて別のトークンとして認識したほうがよいのか、よくわかりません。UPALPHA
とかHEXというのは、URLリンク(rfc-ref.org) に載ってる終端記号名です。

こういう場合、どう字句解析を行うのがよいでしょうか?どういう細かさのトークンをyaccに上げればよいでしょうか?
練習として、BNF通りのヘッダであればどんなに複雑なものであってもパースできるパーサを作ってみたいのです。

アドバイスをお願いします。


68:デフォルトの名無しさん
07/12/19 22:58:51
まずは日本語をしっかりな。

69:デフォルトの名無しさん
07/12/20 06:11:47
BNFで表現してあったって文脈自由とは限らないと思うんだぜ。
まあパーサからレクサへ状態を渡すとかするんだけど、それはそれで大変だし
何もlex使わなくてもパーサを手書きすればいいじゃん。
自分で手書きできない人だったらlex/yacc使ってもあまりいい目は見ない気がする。

70:デフォルトの名無しさん
07/12/20 11:16:55
>>69
BNFで表現できるのは文脈自由文法であると習いましたが違うんですか???

パーサ手書きでもいいんですが、たとえばどのような構成にするのでしょうか?


71:デフォルトの名無しさん
07/12/20 18:06:38
とりあえず、英大文字・小文字は1文字づつyaccにあげればいいんじゃ?
で16進数の構文をyaccで定義すれば?


72:デフォルトの名無しさん
07/12/20 18:23:56
yacc デカルチャー

73:デフォルトの名無しさん
07/12/20 18:59:52
>>72
なんつー古さだ(20年前ぢゃねぇか:実はperlネタのところでも見かけた)

74:デフォルトの名無しさん
07/12/20 21:00:53
>まあパーサからレクサへ状態を渡す
こんなことできたっけ?


75:デフォルトの名無しさん
07/12/20 22:10:24
レクサーを自前なら可能だけど、lexではできない。flexはしらね


76:デフォルトの名無しさん
07/12/20 22:18:47
(f)lexはlexer内で状態遷移できるよ。Cのコメント分を字句解析するときに使う奴。

77:デフォルトの名無しさん
07/12/20 22:51:15
>>71
本当に1文字づつ以外読まないのなら、字句解析を一切していないのと変わらないと思うんだがw

78:デフォルトの名無しさん
07/12/21 03:07:51
>>73
最近よく見かけるようになったのは
再放送してるからだろうw

79:デフォルトの名無しさん
07/12/21 07:11:04
>>77
字句解析一切していないからってそれがどうしたんだよ。


80:デフォルトの名無しさん
07/12/23 13:48:08
字句解析が不要ってこと?

81:デフォルトの名無しさん
07/12/23 18:55:50
え?字句解析してない?しまった〜〜下手こいた〜〜〜

ズン・ズン・ズン・ズン

82:デフォルトの名無しさん
07/12/23 19:00:40
ツマンネ

83:デフォルトの名無しさん
07/12/26 02:32:43
>>53
MikoScript面白いですね。

リレー型関数コール演算子は、Rubyみたいに、下手な既存classの拡張をせずとも、
メソッドを追加したように見せかけたり、
既存の関数を、作成したclassのメソッドのように見せかけたりできる。

puts("hoge");

"hoge"'puts;
と書いたり、

a = int(1234.56)

a = 1234.56'int
と書いたり。

代入型の関数コール形式は、

言語仕様としては、シンタックスシュガーの域を出ないが、
全てがオブジェクトではない、言語にはよさそうな仕様。

コマンド型の関数コール形式は、ま、いらんなw

ところで、箱がいまいちわからん???

84:デフォルトの名無しさん
07/12/26 02:33:12
> 代入型の関数コール形式は、
>
> 言語仕様としては、シンタックスシュガーの域を出ないが、
> 全てがオブジェクトではない、言語にはよさそうな仕様。

代入型の関数コール形式も、
言語仕様としては、シンタックスシュガーの域を出ないが、
全てがオブジェクトではない、言語にはよさそうな仕様。

ミス・・・

85:デフォルトの名無しさん
07/12/26 03:49:24
どのへんが本格的なの?

86:デフォルトの名無しさん
07/12/28 13:42:40
xtal
URLリンク(code.google.com)

87:デフォルトの名無しさん
08/01/01 16:03:44
>>41

こんな感じで他の大学も講義の資料公開(?)してくれると嬉しいな。
講義で使ってる本の紹介だけでもいい。
アメリカみたいに講義をpodcastで公開してくれなくてもいいから

雑誌も減ってきてるし、なかなか体系だって勉強できるネタが少ないのが最近の悩みだから

88:デフォルトの名無しさん
08/01/01 16:14:04
おっぱいそん入門

ぷりんとぼいん ”こんにちは おっぱい!”

89:デフォルトの名無しさん
08/01/01 16:16:58
>>87
ガベージコレクションが気になった
mallocをGC_MALLOCに変えるだけでfleeいらずとはこれいかに

90:デフォルトの名無しさん
08/01/01 16:29:50
>>89
Keep your dog free from flea!

91:デフォルトの名無しさん
08/01/01 16:32:08
>>90
OK. I understand!!! Thanks. :D

92:デフォルトの名無しさん
08/01/01 19:07:36
これいかに、ってベームGCだろ条項

93:デフォルトの名無しさん
08/01/02 01:25:54
ぼえーむじーしーと読んでたのは俺とお前だけの秘密だぜ

94:デフォルトの名無しさん
08/01/02 01:53:27
La BohemeGC

95:デフォルトの名無しさん
08/01/02 02:08:29
ぼへむじーしーってよんだmした><

96:デフォルトの名無しさん
08/01/02 10:16:26
オペラだったらボエームって読んでええんでないの?


97:デフォルトの名無しさん
08/01/02 16:06:38
BGCか

98:デフォルトの名無しさん
08/01/12 23:46:38
ふと思ったんだが、バイトコードのコンパイラって可能?
例えば、Javaとか.NETのソースをコンパイルしてできた、バイトコードをネイティブ形式にコンパイルする

99:デフォルトの名無しさん
08/01/12 23:49:11
GCJはclassファイルをネイティブにコンパイルしてるよ

100:デフォルトの名無しさん
08/01/13 00:03:08
>>98
なんのための JIT なんだ?


101:デフォルトの名無しさん
08/01/13 02:19:59
>>99
にわかですまんが
ネイティブってことは逆にVMじゃ動かんの?GCとかどうしてんだ?

102:デフォルトの名無しさん
08/01/13 11:57:23
gcjでネイティブコンパイルしたら本物のネイティブコードになるのでVM上では動かない
GCとかは実行ファイルにリンクするランタイムライブラリ(libgcj)に含まれてる

103:デフォルトの名無しさん
08/01/13 14:22:38
>>101
更にgcjのランタイムにはJVM相当機能も含まれてて.classの実行もできる.
なのでjarの動的ロードとかも可能になってる.
# クラスライブラリ足りなくて実用するのは大変だが…

104:101
08/01/13 15:38:31
>>102-103
なるほど、ありがとう。
しかし、
URLリンク(www.shudo.net)
↑を見る限りパフォーマンスでのメリットがないw



105:デフォルトの名無しさん
08/01/13 18:17:52
caperのなかのひとサルでも分かるチュートリアルつくってorz
特に構文木のところがサパーリ

106:デフォルトの名無しさん
08/01/13 18:26:04
105じゃないけど、caperべんりです、ありがとさんです。


107:デフォルトの名無しさん
08/01/13 20:39:18
caperって?

108:デフォルトの名無しさん
08/01/13 21:32:28
ググレスカ

109:デフォルトの名無しさん
08/01/13 22:33:42
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、

flexを動かそうとすると、bash: flex command not foundとでます
どーやれば、うごかすことができるんすか?

110:デフォルトの名無しさん
08/01/14 01:40:22
>>104
今のJVMは起動時間はクソ遅いけど処理自体はそれなりに速いからねぇ…
gcjでネイティヴバイナリ化するとアプリの起動時間はJVMより速くなる.
が,処理時間は正直速くならんね…

111:デフォルトの名無しさん
08/01/14 12:39:53
URLリンク(www.shudo.net)

でもいい話を聞いた。
VMでどのOS上でも動かせるJAVAがネイティブコンパイルで多分単体で実行できるなら配布しやすいし
多分DirectX使った高速化も・・・・

けどここのサンプルシューティングは動かん。
IE用JavaMV入れただけだけどコマンドラインでJAVA呼び出せるんだけどなんでだろ。
URLリンク(www.hcn.zaq.ne.jp)


112:デフォルトの名無しさん
08/01/14 13:31:46
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、

flexを動かそうとすると、bash: flex command not foundとでます
どーやれば、うごかすことができるんすか?

113:デフォルトの名無しさん
08/01/14 19:14:45
>>105-107
caperおもしろいな
あとは、軽い汎用VMでもあれば、お手軽自作言語が簡単にという夢を見た

114:デフォルトの名無しさん
08/01/14 19:35:25
VMは作るのだけならそんなに難しくないよ。

むしろ既存のVMに乗せる方が困難なんじゃないだろうか。

115:デフォルトの名無しさん
08/01/14 19:59:03
>>114
同意。
組み込みでメモリ制限がきつい時にマクロの一種としてVM作ること多いんだけど、マジでそう思う(VMも似通ってるけど特殊なプリミティブが組み込み対象別なのでメモリ制限の関係でいまいち統一的に扱えない)


116:デフォルトの名無しさん
08/01/15 06:22:07
Pコードか!

117:デフォルトの名無しさん
08/01/15 12:43:14
似たようなもの。
セルフコンパイル、自己デバッグくらいは処理できる(実機ではそんなメモリないけど、エミュをデスクトップ機上に簡単に作れるのでそちらでデバッグ)
32KワードくらいのRAMのうち16K自由にできれば自己完結環境になれるからね>>pcodeがUCSDのだとすると


118:デフォルトの名無しさん
08/01/16 19:58:47
p2cコンパイラをcygwin環境で動かすにはどうしたらいいですか?

119:デフォルトの名無しさん
08/01/19 03:01:23
GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)
URLリンク(wiki.livedoor.jp)

日本語のGC解説は珍しいね

120:デフォルトの名無しさん
08/01/19 11:59:22
おー

簡単な物は大学の授業や演習の資料とかではあるけど
ネット上でブラウザで閲覧可能でまとまってるものはごくわずかだからなぁ

121:デフォルトの名無しさん
08/01/24 19:55:09
MS-DOSのバッチファイルのBNFってどこかに落ちてませんかね。
googleしてみた限りでは見つからないのですけれども・・・。

122:デフォルトの名無しさん
08/01/24 19:57:32
バージョン違いがあるし、難しいんじゃないかなあ?
そもそもコマンドベース言語だし。

過去、バッチを読み込むプログラムは存在してるから、
その作者に連絡とってみるとか。

123:デフォルトの名無しさん
08/01/24 20:00:41
テンプレにある、コンパイラ構成法の正誤表がアクセスできん。

124:デフォルトの名無しさん
08/01/24 20:19:09
GCって昔読んだ説明から、何ひとつ進歩してないような気がする。
気のせいか?

125:121
08/01/24 21:12:43
>>122
レスありがとうございます。
引き続きもうちょっと色々と調べてみようと思います。

126:デフォルトの名無しさん
08/01/25 00:58:25
>>124
> GCって昔読んだ説明から、何ひとつ進歩してないような気がする。
> 気のせいか?

最近の動向を含んだ解説がまだあまり出回ってないから。

個人的に記憶に残っているものをいくつか。
・理論系
 ・URLリンク(home.pipeline.com)
 ・タイトルが思い出せないのだが、リファレンスカウントと
  ガベージコレクションは双対である、とかなんとかそんなの。

・実装系
 ・URLリンク(www.nminoru.jp)
 ・URLリンク(sdc.sun.co.jp)

127:デフォルトの名無しさん
08/01/25 22:47:41
>>124の言う昔が僕の言う昔と違うことだけはわかる。
ここ5年だったらあんまりかわらんが、10年だとだいぶ違う。


128:デフォルトの名無しさん
08/01/26 20:14:12
statements や expression や leftvalue(左辺値) などの意味は分かるのですが、
primary とはどういった時に使われるのでしょうか?
あるいは、どういったものをいうのでしょうか?

129:デフォルトの名無しさん
08/01/26 20:51:11
primary expression (一次式) なら定数や変数など
それ以上分解できない式のことだが

130:デフォルトの名無しさん
08/01/26 22:49:24
GCが進歩したのはJavaのおかげ。
Lispだけではとてもとても。

131:デフォルトの名無しさん
08/01/26 23:39:24
>>129
そういう意味でしたか、どうもありがとうございました。

132:デフォルトの名無しさん
08/01/26 23:49:21
>  ・タイトルが思い出せないのだが、リファレンスカウントと
>   ガベージコレクションは双対である、とかなんとかそんなの。

A Unified Theory of Garbage Collection

133:デフォルトの名無しさん
08/01/27 17:53:05
>>130
Lisper(笑)

134:デフォルトの名無しさん
08/01/30 05:35:37
LisperはN64で使われてるとかいろいろ誇らしげに言うからな
GCは進歩したのもLispのおかげなんだよ

135:デフォルトの名無しさん
08/01/30 08:00:39
>>134
GCに一番寄与したのってSUNのプロダクトだとjavaよりselfじゃないのかな?


136:デフォルトの名無しさん
08/01/30 13:57:09
「A Scala Tutorial for Java programmers」日本語訳 (PDF注意)
URLリンク(homepage.mac.com)

オブジェクト指向+関数型なScalaのチュートリアル
こういう言語の話題はどこもってけばいいんだ

137:デフォルトの名無しさん
08/01/30 14:02:00
ここ(笑)

とは趣旨が違うよなぁ。

なにか新しい言語を、作りたい人じゃなくて使いたい人のためのスレか。

138:デフォルトの名無しさん
08/01/30 14:21:02
OOP言語統合とか、関数型統合とかないからねえ
OOはネガティブなスレしかないw

139:デフォルトの名無しさん
08/01/30 23:24:11
>>119 のid:authorNari がGC本の翻訳希望者つのってる。本気かいな・・・てか需要あるんかいな・・・

140:デフォルトの名無しさん
08/01/30 23:36:23
LISP使いの人が一番だなって感じたことがあるんだけど、
それは、



















プライドの高さ。(マジ

141:デフォルトの名無しさん
08/01/31 00:04:15
>>140
なんで? どの辺が??? そんなプライド高くねぇとおもうぞ………
少なくとも俺のしってる奴は, みんな, C とかアセンブラとか書けるし…
そう言う問題とはちゃう?


142:デフォルトの名無しさん
08/01/31 00:06:54
>>140
ワシはLisp使いだがプライドって旨いのか?

まだ食った事ないぞ


143:デフォルトの名無しさん
08/01/31 00:21:07
Lisp を貶せば自分が高みに上がれると思ってる奴ってまだ居たんだな
この多言語時代に、とっくに絶滅したと思ってたよ

144:デフォルトの名無しさん
08/01/31 00:50:57
にじみ出るプライドが俺を呪い殺そうとしている^p^

145:デフォルトの名無しさん
08/01/31 05:49:48
せっかく煽ったのに、内容がここまで勘違い全開だと恥ずかしいな。

146:デフォルトの名無しさん
08/01/31 09:00:35
>>145
馬鹿が見る豚のケツって言葉を思い浮かべた


147:デフォルトの名無しさん
08/01/31 15:59:54
lisp = 鮫島事件

おや?誰か来た様だ

148:デフォルトの名無しさん
08/01/31 22:44:45
俺はJavaとか使ってる奴とは違う。


149:デフォルトの名無しさん
08/01/31 22:50:39
かわいそうに、java屋以下とは……

150:デフォルトの名無しさん
08/02/01 07:25:09
馬鹿さ比べでjava屋以下になっても
あんまり悔しくないよなぁ

151:デフォルトの名無しさん
08/02/01 08:28:16
所詮Windowsなんて使ってる以上、どちらも一緒

152:デフォルトの名無しさん
08/02/03 15:47:22
ruby v.s. php か

153:デフォルトの名無しさん
08/02/03 15:52:37
お前ら >>1-6 を読め
ただのLL談義はスレ違いだ

154:デフォルトの名無しさん
08/02/03 20:28:11
LL談義は、こちらで盛り上がってるのでどうぞ

【Perl,PHP】LLバトルロワイヤル【Ruby,Python】
スレリンク(tech板)

155:デフォルトの名無しさん
08/02/03 22:16:59
質問です。
bisonで、下のリストのconflictがどうしても消せません。
通常の式と、定数式を別に扱いたいんですが、両方にある単項マイナスが
解決できないようです。
%precを使ってもうまくゆきません。
どうにかならないでしょうか?

--
%token tkNUM tkVAR
%left EXPC
%left '+'
%right '-'
%%
/* 式 */
exp:
expc %prec EXPC
| tkVAR
| exp '+' exp
| '-' exp
;
/* 定数式 */
expc:
tkNUM
| expc '+' expc
| '-' expc
;
%%

156:デフォルトの名無しさん
08/02/03 22:26:05
>>31

157:デフォルトの名無しさん
08/02/03 22:42:43
ところでみんな、コンパイラ/インタプリタを作るにあたり、
C言語とアセンブリ以外の言語で、という条件だったら、
どの言語使う?

158:デフォルトの名無しさん
08/02/03 22:46:21
C++

159:デフォルトの名無しさん
08/02/03 22:48:48
なんか %prec の使いどころがようわからんのだけど、
単項マイナスのためのおまじないとしか俺理解してないので
なんか変じゃないの? としかアドバイスできない。

160:デフォルトの名無しさん
08/02/03 22:49:14
Cみたくネイティブコードコンパイラがあって
Cよりずっと型安全な言語がいいなぁ
どんな言語があるかよく知らないが

161:デフォルトの名無しさん
08/02/03 22:52:15
GCJ?

162:デフォルトの名無しさん
08/02/03 22:52:22
>>160
その条件だと SML, OCaml, Haskell が該当する。
これらの言語は処理系の実装によく使われるけど、
ランタイムの制約が大きいので要注意。

163:デフォルトの名無しさん
08/02/03 22:52:22
何も考えずにHaskell

164:デフォルトの名無しさん
08/02/03 22:54:36
ランタイムの制約って何?

165:デフォルトの名無しさん
08/02/03 22:59:35
>>164
自前で GC を用意したいとか、Int は 32bit ないと嫌だとか、
細かい処理系の実装を弄りたい向きには合わない

楽したいならむしろ良いのかもしれんけど

166:デフォルトの名無しさん
08/02/03 23:03:38
>>165
なるほど、インタプリタの話か
コンパイラ書くことしか考えてなかった
真面目にインタプリタを書くなら、Haskellで書かれたバイトコードコンパイラ+Cで書かれたバイトコードインタプリタ
みたいな構成にすれば良いかな

167:デフォルトの名無しさん
08/02/03 23:16:27
%prec EXPC が変だな。

168:155
08/02/03 23:29:15
>>167
%precがないとexpの'+'とexpcの'+'でconflictが起きるんです。

169:デフォルトの名無しさん
08/02/03 23:44:41
expとexpcを混ぜて定義しようとするからconflictするわけで

exp: tkVAR | tkNUM | exp '+' exp | '-' exp
expc: tkNUM | expc '+' expc | '-' expc

170:155
08/02/03 23:54:08
>>169
それだと定数式もexpになってしまいます。
要するに、
a + 2 + 3
を、
tkVAR + expc
としてパースしたいんです。

パーサの段階で定数式を最適化したいんです。
難しいですかね?

171:デフォルトの名無しさん
08/02/04 00:45:31
パーサの時点で定数式の最適化って
2 + a + 3
とか最適化できなくね?

172:155
08/02/04 01:27:57
>>171
それはできなくて良いです。

つか>>155のやり方でもうちょっと書いてみたけど、
演算の優先順位でも問題が発生したのでやっぱり
諦めることにしました。

面白いアイディアだと思ったんだけどなぁ…

173:デフォルトの名無しさん
08/02/04 01:27:58
「パーサの段階で定数式を最適化したい」んならアクション中で最適化すればいいだろ
文法レベルで最適化する意味が分からん

174:デフォルトの名無しさん
08/02/04 09:49:13
構文のレベルで弁別しといたほうが楽、という理由はあるかも。

優先順位付けで誤魔化すんじゃなくて、きちんと優先順位を組み込んだ
構文規則にして、あと、何かテクニックがあったような気がするんだけど...

175:155
08/02/04 12:01:23
>>173
tkVAR '=' exp
tkCONST '=' expc
みたいに書けると良いかなと思ったんですよ。

>>174
> 何かテクニック
参考になる資料があれば是非教えて頂きたいです。

176:デフォルトの名無しさん
08/02/04 13:30:58
Haskellでインタプリタか・・・
Haskellってメモリ気にし無さすぎだからヤバそうなイメージがあるけど、
実験用と以外で使われているんだろうか

177:デフォルトの名無しさん
08/02/04 13:31:41
ああああ、アホか俺は。
そんなのは処理系依存だよな。
スマソ。

178:デフォルトの名無しさん
08/02/04 22:14:06
%right '-' も変でないか
その構文では2項演算子じゃないよね

179:デフォルトの名無しさん
08/02/04 23:33:08
確かに

180:デフォルトの名無しさん
08/02/04 23:49:25
衝突の消し方は、Rubyを256倍使うための本 無道編、で読んだような気もする。記憶が正しいという自信はない。
とりあえず衝突が出なくなるところまでコナしてみたわけなのだが、これで希望する構文規則になっているだろうか。
%token tkNUM tkVAR
%%
/* 式 */
exp:
exp_
| expnc '+' expc_
| expc '+' expnc_
;
exp_:
expnc
| expc
;
expnc:
expnc_
| expnc '+' expnc_
;
expnc_:
tkVAR
| '-' expnc_
;
/* 定数式 */
expc:
expc_
| expc '+' expc_
;
expc_:
tkNUM
| '-' expc_
;
%%

181:デフォルトの名無しさん
08/02/05 00:58:18
%token tkVAR tkNUM
%left '+'
%right UMINUS
%%
program
:
| program line
;
line
: '\n'
| exp '\n'
;
exp
: expr { printf(" expr\n"); }
| cexpr { printf(" cexpr\n"); }
;
cexpr
: cexpr '+' cexpr { printf(" c+"); }
| tkNUM { printf(" %c", $1); }
| '(' cexpr ')'
| '-' cexpr %prec UMINUS { printf(" cneg"); }
;
expr
: expr '+' expr { printf(" +"); }
| expr '+' cexpr { printf(" +"); }
| cexpr '+' expr { printf(" +"); }
| tkVAR { printf(" %c", $1); }
| '(' expr ')'
| '-' expr %prec UMINUS { printf(" neg"); }
;
%%

182:デフォルトの名無しさん
08/02/05 00:58:50
続き
int yyerror(char *msg) {
printf("%s\n", msg);
return 0;
}

int yylex(void) {
int ch;
while (isspace(ch = getchar()) && ch != '\n')
;
if (isalpha(ch)) {
yylval = ch;
return tkVAR;
}
else if (isdigit(ch)) {
yylval = ch;
return tkNUM;
}
else {
return ch;
}
}

int main(void) {
yyparse();
return 0;
}


183:デフォルトの名無しさん
08/02/05 16:31:40
メンバーアクセスと呼び出しの構文規則を考えていたんですが、
expr:
  mem-expr

mem-expr:
  invoc-expr ['.' invoc-expr]*

invoc-expr:
  prim ['(' [arg]* ')']*

prim:
  ident
  |(expr)

こんな感じで C++ や Java 風の式を評価できますか?
結合順とかは問題なさそうでしょうか?

184:183
08/02/05 16:36:02
一応、こんなのは全部許したいです。不正なものは意味解析ではじく方向で。
foo.bar.baz; foo.bar.baz(); foo.bar.baz()(); foo.bar().baz; foo.bar().baz(); foo.bar()().baz; foo.bar()().baz(); foo.bar()().baz()();
foo().bar.baz; foo().bar.baz(); foo().bar().baz; foo().bar().baz(); foo()().bar.baz; foo()().bar.baz(); foo()().bar().baz; foo()().bar().baz();
foo()().bar()().baz; foo()().bar()().baz(); foo()().bar()().baz()(); (foo).bar.baz; (foo).bar.baz(); (foo).bar.baz()(); (foo).bar().baz; (foo).bar().baz();
(foo).bar()().baz; (foo).bar()().baz(); (foo).bar()().baz()(); (foo()).bar.baz; (foo()).bar.baz(); (foo()).bar().baz; (foo()).bar().baz(); (foo()()).bar.baz;
(foo()()).bar.baz(); (foo()()).bar.baz()(); (foo()()).bar().baz; (foo()()).bar().baz(); (foo()()).bar()().baz; (foo()()).bar()().baz(); (foo()()).bar()().baz()();

185:デフォルトの名無しさん
08/02/05 23:14:41
うぜえ・・
それぐらい自分で判断しろ
半年ぐらい既成の文法眺めてろ

186:デフォルトの名無しさん
08/02/06 00:33:07
ヨミ肉w

187:183
08/02/06 08:45:44
>>185
既存の文法クレクレ

188:デフォルトの名無しさん
08/02/06 10:56:48
>>31

189:183
08/02/06 12:11:15
再帰下降のパーサを手書きしてるからパーサ【ジェネレータ】の話じゃない。

190:デフォルトの名無しさん
08/02/06 14:10:11
URLリンク(java.sun.com)

191:デフォルトの名無しさん
08/02/06 15:58:18
>>183
Javaは関数ポインタないから(hoge)() とか hoge()() はできないよ。
Javaの構文規則みても、あんまし参考にはならないと思う。

192:デフォルトの名無しさん
08/02/06 16:17:49
C言語の本に書いてあるよ

193:デフォルトの名無しさん
08/02/06 16:34:15
1.6で関数型ができるという話はどうなってるの? Java

194:デフォルトの名無しさん
08/02/06 17:24:46
そんな話ないよ

195:デフォルトの名無しさん
08/02/06 17:38:13
ごめん、7だった。

196:デフォルトの名無しさん
08/02/06 19:43:36
>>193
あれは func() じゃダメで func.invoke() とかやる事になってる。
名前空間汚れるから互換性捨てないと func() みたいな呼び出しは無理。

197:jonigata
08/02/07 03:08:09
あごめん
しばらく動きなかったからすっごい見てなかった

>>105
どんな解説でしょうか?
caperというよりもっと一般的な話であるなら、
すでにあるものよりうまく説明できる自身がまったくナイデス

256倍のraccのやつとか読むといいと思うけど
まだ売ってるのかな

>>106
用途とかバグとかウザいところとかあったら教えてください

.....
書き込みから20日もたってるのでいまさらだけどw

198:jonigata
08/02/07 03:16:47
つーか今になって見ると
俺が読んでもわからんですね

たとえばTutorial 1:
> 7行目のupcastは、各非終端記号の型から、Parserのインスタンス化のときに
> テンプレートパラメータとして与える「値集合すべてをあらわす型」への変換を提供する関数です。
> セマンティックアクション関数がひとつでもある場合、安全な型変換のために
> この関数が定義されていなければなりません。

ハア? わけわかんねーよバカじゃねーの

って感じw

とはいえこれはこれで「yacc使ったことある人」対象であれば
簡潔にまとまっているような気もしないでもない

気が向いたら読み直して書き直してみます


199:デフォルトの名無しさん
08/02/07 06:12:26
なんかワロタ

200:デフォルトの名無しさん
08/02/07 16:25:28
作者キター
caperでJavaScript生成させると
 this.get_arg = function( base, index )
  {
   return this.stack[ this.stack.length - ( 3 * ( base-index ) + 2 ) ];
  }
みたいなコードが出てくるけど
 this.get_arg = function( base, index )
  {
   return this.stack[ this.stack.length - ( 3 * ( base-index ) ) + 2 ];
  }
の間違いじゃないすか?

201:jonigata
08/02/07 21:58:54
javascript普段使わない上
3時間くらいで書いたコードなのでまったく思い出せない……


そのようですね

現在のコードだと、
パーサは動くけど
セマンティックバリューにぜんぜん意味わかんないものが返ってくるってことかな?
>>200さんはそれでわかったのでしょうか?

202:デフォルトの名無しさん
08/02/07 23:36:20
え?どれを3時間だって?

203:jonigata
08/02/08 11:48:35
>>202
jsジェネレータ(caper_generate_js.cpp)です。
といっても、自分に興味がほとんどないので
上のようなバグ出しちゃうわけですが……

C#やDのジェネレータを書いてくださった方もいらっしゃるので、
他の人でもさほど難しくなさそうですよ。

PHPも需要がありそうなんで挑戦しようとしたんですが
PHPの仕様のアレさにやる気が失われました。
難しくはないと思うのですが。

週末久しぶりにバージョンアップしようかと思います。
上のバグ直してC#やDのジェネレータを取り込んだバージョン。


204:デフォルトの名無しさん
08/02/08 22:43:41
>>203
乙!


205:jonigata
08/02/10 13:44:07
む、C#のジェネリクスってduck typingできないのか
もらったコードバグっててちょっと使えないな……

C#はいったんなしにするか

206:jonigata
08/02/10 13:49:27
Dは普通に動いたっぽい

C#ジェネレータはundocumentedでだして
誰か得意な人に見てもらおう

207:デフォルトの名無しさん
08/02/10 17:31:53
スレチガイ

208:デフォルトの名無しさん
08/02/11 17:16:50
パーサジェネレータのスレってどこにあるん?

209:デフォルトの名無しさん
08/02/11 18:57:29
>>208
今のところここがもっとも近い、そういう意味じゃ>>207は微妙な指摘というか言葉たらず。
独白に近いのでそういう事はBlogでやれって意味じゃまさに207の指摘どおり。



210:デフォルトの名無しさん
08/02/12 11:44:05
趣味で(ほぼ無意味ですが)C++とほぼ同等のコンパイラを作っています。
当然テンプレートとかはないですが、文法がそっくりという意味です。

質問なのですがC++は何故、クラスの定義がファイルの行数的に先に行なわれていないとコンパイルエラーになるのでしょうか?
例えば

CHoge test;

class CHoge
{

};

こういう順番だと、CHogeって何?未定義なんだけど。ってエラーになりますよね。
ファイルの上から処理して言ってるのだから当たり前なのは分かってます。
ですが先に class などの定義系を先に処理してからにすれば回避できる問題かと思います。

「先に全ファイルをチェックして定義系を処理してから、再度全ファイルを処理する」
という2度処理が、C++が生まれたころのマシンスペックではもったいなかったのでしょうか?

211:デフォルトの名無しさん
08/02/12 11:53:55
過去の名残。

212:デフォルトの名無しさん
08/02/12 12:09:17
>>210
Cのstructの仕様をそのまま引き継いでるだけかと。
C++というよりは、Cが生まれたころのマシンスペックだろう。

213:デフォルトの名無しさん
08/02/12 13:02:39
>>211-212
なるほど、ありがとうございました。
無理にそこを真似する必要はなさそうですね

214:デフォルトの名無しさん
08/02/12 14:39:58
最初のC++コンパイラはCへのトランスレータだったような気がする。(SS1の頃でメモリも16M位が標準だった)


215:デフォルトの名無しさん
08/02/12 14:55:16
URLリンク(en.wikipedia.org)

216:デフォルトの名無しさん
08/02/12 16:35:10
質問
Javaっぽい言語でスクリプト作ってたんですが、数値型に何も考えずに
int, short, byte, long をつくったんですよ
でもおかげでかなりVMやコンパイラの仕組みが複雑になってしまってコマってます

正直、shortとかbyteってみなさん使ってます?
(メモリーをケチる目的以外で)
バイナリファイルを解析する時とかはさすがにbyte単位で扱えなければ話にならないと思いますけど
ByteArrayStreamみたいなものがあればそれでいいかなぁとか考えてるのですが…


217:デフォルトの名無しさん
08/02/12 16:42:31
Javaっぽいって…

218:デフォルトの名無しさん
08/02/12 16:47:14
>>217
すごい誤解招きそうな文章でしたね

Javaっぽい文法でスクリプトを作ってたんですが〜としてください

219:デフォルトの名無しさん
08/02/12 17:16:56
byteやshortも過去の遺産じゃね?
よっぽどメモリーがきつい環境で無い限り、演算もintのほうが速いわけでもあるしint使うわ

220:デフォルトの名無しさん
08/02/12 17:32:05
あるいは、メモリに常駐するデータ量が2Gか4Gかという差があるとかな

221:デフォルトの名無しさん
08/02/12 17:35:56
確かにそれくらいメモリーの差が出るなら考えるなw
まぁそれもByteArrayStream?があればそっちでいいわけで
Javaのものだと仮定すれば、あれランダムシークもできるし(Byte型の配列とほぼ同義として扱える)

222:デフォルトの名無しさん
08/02/12 17:56:28
>>216
JavaVMも配列とかフィールドにはbyteやshortがあるけど、スタック中ではint扱いっすよ
いちいち丸め処理が入るだけで
long, float, double や参照は別扱いだけど

223:デフォルトの名無しさん
08/02/12 20:25:44
C でも汎整数拡張とかあって、
式中では勝手に int に格上げされるな。

224:デフォルトの名無しさん
08/02/12 22:23:46
でも、エンジニアリングモデルでは普通に使ってるよ。

225:jonigata
08/02/16 12:32:02
先週末にバージョンアップするとかいっときながら遅れましたが
caperバージョンアップしました。

URLリンク(tinyurl.com)

例によってうまく動かなかったらごめんなさい。

C#ジェネレータとか一応組み込んだけど
普段使わない言語でぜんぜん要領を得ないので
詳しい人がいたらここかブログ( URLリンク(d.hatena.ne.jp) )に
なにかアドバイス等いただけるとうれしいです。

226:デフォルトの名無しさん
08/02/21 23:44:59
場違いかも知れませんが、宜しくお願いします。yacc/lexはc言語での
作りですが、perl言語で同様の処理をしたいのですが、処理系はあるの
でしょうか?

以前は、随分と前に見た事はあるのですが、最近は見かけなくなりまし
た。知っている方、どうかそのインストール方法...等アドバイス宜
しくお願いします。


227:デフォルトの名無しさん
08/02/21 23:56:50
Racc

228:デフォルトの名無しさん
08/02/22 09:04:34
kmyacc

229:デフォルトの名無しさん
08/03/04 08:45:05
構文解析のアルゴリズムが沢山載っている「Parsing Techniques - Second Edition」
URLリンク(www.cs.vu.nl)

230:デフォルトの名無しさん
08/03/07 09:20:44
>>27>>37
LLVMはMac OS XのOpenGLスタックで使われてるよ。
PyPyもターゲットの一つにしてる。

URLリンク(llvm.org)

231:デフォルトの名無しさん
08/03/09 01:53:45
gnu makeのBNFとかってありますかね?

232:デフォルトの名無しさん
08/03/15 14:32:59
やはり新しい言語の方が優れてるのですか?

233:デフォルトの名無しさん
08/03/15 14:42:55
兄より優秀な弟などいない

234:デフォルトの名無しさん
08/03/15 15:05:15
>>233
イギリス皇室の方ですか?

235:デフォルトの名無しさん
08/03/15 17:16:19
>>233
ラオウ乙

236:デフォルトの名無しさん
08/03/15 17:48:49
>>235
ジャギでは

237:デフォルトの名無しさん
08/03/15 18:32:44
>>231
GNU Make のソースツリーの中に無いの?
知らないけど。

238:デフォルトの名無しさん
08/03/15 22:05:11
Lisp 最高〜!

239:デフォルトの名無しさん
08/03/16 18:03:56
そういえば、昔どこかのサイト(海外)で、
プログラミング言語の上下関係を図式化したものがあった。
そこでは確かに Lisp が一番上位に来ていたような…

何がいいのかさっぱりわからんがw

240:デフォルトの名無しさん
08/03/17 08:26:38
>>239
原文を見てない範囲での推測だが、
S式という情報の取扱形式が
全ての上位に来ると言う意味なら判らなくもない。
ただそういう比較は扱う人の主観でしか有り得ない。


241:デフォルトの名無しさん
08/03/18 13:19:49
ここにそれっぽいのがあるね
URLリンク(www.geekpage.jp)

242:デフォルトの名無しさん
08/03/18 16:18:53
Adaのマルチタスクプログラミング舐めてるのか!

243:デフォルトの名無しさん
08/03/18 17:29:15
Lisp - C の連結はありえない

244:デフォルトの名無しさん
08/03/18 18:16:28
>>241
これは面白いな。
ところで、最近のマクロという名のプログラムはどこに?

245:デフォルトの名無しさん
08/03/18 18:23:52
面白くないぞw

246:デフォルトの名無しさん
08/03/19 06:10:35
>>241
部分部分を見るとアレだけど、大まかな流れは頷けなくもない。
LanguagesではなくProgrammersを扱った図だからね。言語の宗教論争とはちょっと事情が違う。
「上位」プログラマは、多くの場合「下位」プログラマ"でもある"(その言語を使える)か、
あるいは"すぐにそうなれる"(パラダイムを十分把握していて、表面の違いを学ぶだけでいい)状態にある。
きっちり成立しているとは言わないけど、少なくとも、同じ事を上下逆に考えるよりは成立している。
だから全体を、あくまで曖昧なレベルで、クラス図の比喩として見ることができるんじゃないかと。

別の言い方をするなら、この図は、
「あなたが言語Xと言語Yを使えて、どちらかの言語名+プログラマ、でしか自称してはいけないと言われたら、
どちらを口にすれば、自分のスキルや経験値をよりあますことなく示唆できるだろうか?」
っていう「ソート」の結果であり、実際、まんざらデタラメな結果ではないと思う。
LispとCが使える人だったら、この図の「Lispプログラマ」に自分を置くし、たぶんそれで正解だろう。
逆を自称するよりは、その人の経験してきたことの「より多く」を伝えられると思う。たぶん。

247:デフォルトの名無しさん
08/03/19 07:11:51
> クラス図の比喩として見ることができるんじゃないかと。

そんな必要はないだろ。
その見方から何が得られたかも書いてないし。
クラス図言いたいだけと違うんかと

248:デフォルトの名無しさん
08/03/19 07:30:39
>>247
よくわからん返しだな。

249:デフォルトの名無しさん
08/03/19 09:06:36
ジョークにマジレスしてる>>246もよくわからんのだが…

250:デフォルトの名無しさん
08/03/19 09:23:52
>>249
ジョークがまんざらでもないことを面白がってるんだよ。

251:デフォルトの名無しさん
08/03/19 13:37:47
「そうそうあるある」ってのが笑いどころのネタだしな

252:デフォルトの名無しさん
08/03/19 14:59:48
まんざらでもないからこそジョークとして成立してるところに
「いやこのジョークはまんざらでもないんだよ!」と解説しちゃうところが無粋すぎ。
ってかスレ違いすぎだな…

253:デフォルトの名無しさん
08/03/19 19:01:19
そうとも思わないが?スレチ
なかなかおもしろいと思う。

254:デフォルトの名無しさん
08/03/19 21:27:09
使用者のヒエラルキーなんてマ板の範疇だろ・・・
スレ違いどころか板違いだ

255:デフォルトの名無しさん
08/03/19 22:36:37
糞つまらなねえ >>241


256:デフォルトの名無しさん
08/03/20 05:34:52
まぁ、自分が悪く言われているジョークが面白くないのは自然だ。

257:デフォルトの名無しさん
08/03/20 13:23:29
>>241の元ねたの最下位カーストだけ妙に具体的なのは
おもしろかったw


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

5329日前に更新/92 KB
担当:undef