「コンパイラ・スクリ ..
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 無用命令の削除」等が出来ると。
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でも標準化されてる
たしか言語そのものともうちょっとこまごまとしたものがあったはず
Wikipedia項目リンク
てかアライメントさえ気をつければいいだけなんじゃないか?
> そこにreturnのときにコピーするようなまどろっこしい方法しか思いつきません。
それでいいんじゃなかったかと
369:デフォルトの名無しさん
07/03/18 16:05:59
ついでに呼び出し既約
Wikipedia項目リンク
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みたいなものを使った方がいいんでしょうか。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4767日前に更新/194 KB
担当:undef