「コンパイラ・スクリプトエンジン」相談室11 at TECH
[2ch|▼Menu]
[前50を表示]
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さんに聞くと良いと思うよ。
字句解析:入力を字句(プログラムの最小単位)に分割する
Wikipedia項目リンク
構文解析:字句同士の関係を解析するWikipedia項目リンク

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


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 無用命令の削除」等が出来ると。



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

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