[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 10/19 19:42 / Filesize : 260 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

「コンパイラ・スクリプトエンジン」相談室13



1 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 20:49:02 ]
プログラミング言語処理系の開発に興味のある人達のスレッドです。

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

過去スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/
3 pc5.2ch.net/test/read.cgi/tech/1070089173/
4 pc5.2ch.net/test/read.cgi/tech/1100097050/
5 pc8.2ch.net/test/read.cgi/tech/1106129164/
6 pc8.2ch.net/test/read.cgi/tech/1115335709/
7 pc8.2ch.net/test/read.cgi/tech/1129287390/
8 pc8.2ch.net/test/read.cgi/tech/1131273918/
9 pc8.2ch.net/test/read.cgi/tech/1135082582/
10 pc8.2ch.net/test/read.cgi/tech/1146844753/
11 pc11.2ch.net/test/read.cgi/tech/1160879890/
12 pc11.2ch.net/test/read.cgi/tech/1188688416/
関連リンクは多分 >>2-10 あたり

349 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:10:04 ]
スレチだけど、言語実装の話でもあるので、ちょっとRubyの話を続けると、
組み込みに向かないのは、evalがあるのが大きいと思う。
そのせいで、パーサとVMが独立できないので、言語まるごと組み込む必要が
あるのが大変なんじゃないかと。
1.9でその辺は変わったみたいだけど。

350 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:27:07 ]
行の1文字目で処理を分ける程度でいいんじゃね?


351 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:33:22 ]
1文字で思い出したけど、変数名が1文字の場合はハッシュ使わないで
26個のテーブルってのどう?

352 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:41:29 ]
いつの時代のBASICだよ

353 名前:デフォルトの名無しさん [2009/08/13(木) 15:08:53 ]
Rubyの話をもちっと聞かせてくれ。
俺も拡張機能用にPythonを組み込んだアプリは良く見るが
Rubyを組み込んだアプリは見たことが無い。
これは単にRubyが歴史が浅いからなのか、それともRubyが組み込みで使えない深い理由があるのか?


354 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:33:13 ]
>>352
難読化したjQueryとかじゃね?

355 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:00:40 ]
じゃあこのスレっぽく話を広げようか
俺341だけど、言いだしっぺっぽいので

まず指摘されてたけど、メモリ管理の点で、1.8時代はネイティブスレッドとは
破滅的に相性が悪かったし、ウィンドウシステム・3D・DirexX関係も
相性はあまりよくない。

それに対してPythonは参照カウントとマーク&スイープの組み合わせで、
マーク&スイープもおとなしいタイプ。
参照カウントってのはちょっとダサいが、質実剛健だしその点では好感。

あと、これは俺の想像だけど、Pythonの作者は、PythonからCを使うってのと
CからPythonを使うってのを対称的で対等なものとして考えている雰囲気があるし、
技術的に変なこだわりはなくて、いろんなところに配慮しながら無難な実装をしてる。

Rubyは実装技術オタクのMatzが作ったので、変なところでこだわってたり
無駄に離れ業やってたりしてタチが悪い
ただし、Rubyは将来的にはマルチVMも可能にしようという方向で動いてるようだから
そこらへんは変わってくるかもしれない

356 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:56:15 ]
とりあえず Google SketchUp が Ruby 組み込みだったはず。

357 名前:デフォルトの名無しさん [2009/08/14(金) 01:20:18 ]



Q. 64bitプログラムとは、どのような文を書くといいのですか

A. コンパイラが64bitコンパイルできるなら何でも64bitプログラムになります




心底「ダメだこのバカ」と思った






358 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 09:35:58 ]
>>357
つぶやきはtwitterで

359 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:41:34 ]
>>357
スレ違い

64bitのソフトウェアってどうやって作るの?
pc12.2ch.net/test/read.cgi/tech/1170481037/

そのセリフの人物によっては

ハズレの外注を引いたときの対応 2人目
pc11.2ch.net/test/read.cgi/prog/1147161173/
【まるで】使えない新人 0x1C
pc11.2ch.net/test/read.cgi/prog/1249835909/

など

360 名前:デフォルトの名無しさん [2009/08/14(金) 21:52:07 ]
トークンという物について質問させてください。
例えば s = "ABC"; という文があった場合トークンは、
1. s
2. =
3. "
4. ABC
5. "
6. ;
でいいのでしょうか? とくに文字列が "ABC" で1つのトークンなのか
"とABCと"で3つのトークンなのかがわかりません。



361 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:59:32 ]
s
=
"ABC"
;
と分けるのが一般的かと思います

362 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:06:09 ]
Forthは"が単独トークンになるね。

363 名前:345 mailto:sage [2009/08/15(土) 00:07:23 ]
スクリプトエンジンのスレだから、
「組み込み用途における技術的観点での比較」に絞ってレスする。
宗教戦争を煽る気はない。

>>346
>あまりその辺の分野は活発ではないような気がする。

Rubyは組み込みの実績が少ないし活動が活発ではないという理由かな。
それは技術的な理由からは外れている気がする。そうなった理由(背景)がこのスレの主題。

>>349
>そのせいで、パーサとVMが独立できないので、言語まるごと組み込む必要が
>あるのが大変なんじゃないかと。

Rubyが言語まるごと(パーザ+VM)組み込む必要があるのは事実。
ただし、個人的な感覚として、アプリケーションにスクリプトを組み込む目的の多くは、
ユーザによるアプリケーション機能の自由な拡張(スクリプティング)なのだから、
まるごと実装は欠点にはならないと思う。(JavaVMのようなコンパイラ系は別)

(長いので続く)

364 名前:345 mailto:sage [2009/08/15(土) 00:10:47 ]
(>>363の続き)

>>355
>まず指摘されてたけど、メモリ管理の点で、1.8時代はネイティブスレッドとは
>破滅的に相性が悪かったし、

Rubyとネイティブスレッドとの破滅的な相性の悪さは事実なので同意。
ただし、多くのアプリケーションでは、ネイティブスレッドが前提とはならない
(あるいはRubyの疑似スレッドでもかまわない)ケースが大半を占めるのではないかと思う。

>ウィンドウシステム・3D・DirexX関係も相性はあまりよくない。

RubyもGNOME, WxWidget, Qt, Cocoa, SDLとウィンドウ(GUI toolkit)は揃っているし、
3DもOpenGL拡張ライブラリがあるから、相性が悪い理由にはならない。
DirectXは(おそらく)Rubyで対応しておらず、Phytonの実績が多いのかも(?)しれないが、
それは実績が多いという事実の言明だけであって、具体的な技術面の指摘ではない。
そもそも、これらは拡張ライブラリであってエンジン組み込みではないからスレ違い。

>それに対してPythonは参照カウントとマーク&スイープの組み合わせで、
>マーク&スイープもおとなしいタイプ。

GC制御に関わる所有ルールの難解さは、RubyにもPythonにも同様に存在する。
またGC方式の差異は、組み込み用途の利点とは直接的に結びつかないのでスレ違い。
(もし関連性があると考えているなら、具体的に差異を説明してください)

>あと、これは俺の想像だけど、Pythonの作者は、PythonからCを使うってのと
>CからPythonを使うってのを対称的で対等なものとして考えている雰囲気があるし、

対称性はRubyも変わらない。実装の難易度も同等というのが、個人的な実感。

(まだ続く)

365 名前:345 mailto:sage [2009/08/15(土) 00:15:27 ]
(>>364の続き)

>技術的に変なこだわりはなくて、いろんなところに配慮しながら無難な実装をしてる。

これは(スレ違いだけど)同感で、PythonがSimple is bestを追求してるのは好感。ただし、

>Rubyは実装技術オタクのMatzが作ったので、変なところでこだわってたり
>無駄に離れ業やってたりしてタチが悪い

については、組み込み用途とは無関係だし、Rubyがスキャナとパーザの実装で
離れ業をしている事を除けば、具体性の無いMatzへの個人批判でしかないのでスレ違い。

以上、個人の印象/主観を除いたRubyの組み込み用途における技術的な問題点をまとめると、

- 言語まるごと(パーザ+VM)組み込む必要がある
- ネイティブスレッドとの破滅的な相性の悪さ

の二点のみ。組み込み用途に限れば、Pythonと比較した決定的な欠陥は見当たらない。
実際、拡張ライブラリ(Ruby->C呼び出し)を自作できるRubyプログラマであれば、
Ruby組み込み(C->Ruby呼び出し)も難儀な実装作業ではない、というのが個人的な実感。
(PythpnでもPython->C呼び出しが実装できない人であれば(その逆の)組み込みが難しいのは同じ)

(ゴメン、次で最後だから許して)

366 名前:345 mailto:sage [2009/08/15(土) 00:18:02 ]
(>>365の続き)

あと(技術的な観点ではないけど)付け加えるとすれば、
Pythonは公式文書として組み込み方法が解説されているのに対して、
Rubyはインタプリタソース(ruby-1.8.x-xxx.tar.gz)に含まれるごく簡単な解説が
唯一の公式文書であるため、自力でネット/書籍から情報を得る必要があるという差異が、
組み込み実績という結果に大きく影響していると思われる。

これだけだと何の事か分かりずらいと思うので、最後に具体的なアドバイスをまとめる。

- RubyプログラマはRuby組み込みで、PythonプログラマはPython組み込みを選ぶのが楽
- ただし、ネイティブスレッドが前提なアプリケーションであれば、Pythonしかない
- どちらも知らない人は、(解説文書が整備されている)Phyton組み込みが無難な選択(=お勧め)
- ただし、言語の選択は、システム全体を見渡してから判断すべき(解説文書の有無だけで
 言語を選択すると、本末転倒になる恐れがある(木を見て森を見ず))

長文/連投のスレ汚し、失礼しますた。

367 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:43:35 ]
元々の話のゲームのスクリプト用途とかなら
既に挙げられてはいるけど lua みたいな
最初から組み込み用に作られたものを使うのが無難じゃないかな
変に難しいこと考えなくても楽に組み込めるし



368 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:53:25 ]
長過ぎて読んでないが、
結局Rubyを無理やり組み込む人はいないと

369 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:53:49 ]
これだけ長文でレスしたくせに、中身がほとんど無いじゃないか。
スレ違いをいちいち長ったらしく指摘しなくていいからもっと短くまとめろよ。

> あと(技術的な観点ではないけど)付け加えるとすれば、
> Pythonは公式文書として組み込み方法が解説されているのに対して、
> Rubyはインタプリタソース(ruby-1.8.x-xxx.tar.gz)に含まれるごく簡単な解説が
> 唯一の公式文書であるため、自力でネット/書籍から情報を得る必要があるという差
> 異が、組み込み実績という結果に大きく影響していると思われる。

付け加えじゃなくて、ここが一番重要なところだろ。

370 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:58:42 ]
機能的にはschemeやjavascript辺りのサブセットがVMで動けば十分
バランスが取れたのがlua
実際にスクリプトを書かせる対象を想定しないとな

371 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 01:04:13 ]
>>366
まず、俺の主観が入っているってのはその通り。その点はすんまそん
てかあまり深く考えずに書き込んだけど、363氏の説明の方がほとんど
正しいと思います。

いくつか書きたいのは、

PythonのGCは停止時間(いわゆるレスポンス)が悪くない。
循環参照を解消するために定期的に
マーク&スイープする必要があるけど、そのタイミングは制御できる。
たとえばゲームでいえばシーン暗転の時にやるとか。
Rubyは逆で、楽だけど大味な制御しかできない
以前に256倍網道編でarton氏がpure rubyでゲーム作ってたけど、
実際実行すると結構カクカクだった

ついでにいうとCから使ってるとファイナライザが欲しくなるが、
CPythonならスコープはずれたら解放されることが(個別実装の仕様として)
保証されるので楽。

これらが決定的な利点・欠点かどうかは状況に依存するね。もちろん

あと実装じゃなくて完全にスレチだけど、ライセンスが違うのと、
(用途によるが)配布の際にバイトコード化可能かいう点もある。

以上で撤収します

372 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 01:40:39 ]
forthってGCってあるんだっけ?
あれ?ディクショナリ内にメモリって確保するんだっけ?

373 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 01:48:28 ]
組み込み用スクリプトのインタプリタとライブラリのデバッグに時間を掛けたくないよね
ゲーム本体よりも大きいと本末転倒だし
ソースがせいぜい2〜3ファイル、合計数百行程度、使えるライブラリは関数をテーブルに登録ぐらいが理想か

374 名前:345 mailto:sage [2009/08/15(土) 02:21:05 ]
>>371
>まず、俺の主観が入っているってのはその通り。その点はすんまそん

こちらこそネチネチ書いてスマンかったです。ただ主観/印象で論議すると
宗教戦争に陥りがちだから、それを避けたかった。分かってくださいませ。

>Rubyは逆で、楽だけど大味な制御しかできない

RubyもGCを明示的に起動できますよ。シーン暗転前に起動すればいいと思いますが....。

>実際実行すると結構カクカクだった

カクカクになるのは、GCとは別の要因ではないかと思います。
GCが原因なら、(比較的あいた間隔で)実行が固まったように見えるはずですから。

>CPythonならスコープはずれたら解放されることが(個別実装の仕様として)
>保証されるので楽。

これは、(Cスタック上に)auto変数としてPythonVMを確保すれば、そのVMと実行環境が
まとめて自動的に解放されるということでしょうか?
もし本当なら、(Rubyと比較して)かなりプログラマの負担が減りますね。
あと同一プロセス上でのマルチVM(インタプリタ)も簡単に実現できると思われますし。

>あと実装じゃなくて完全にスレチだけど、ライセンスが違うのと、

Rubyライセンスは、とっても緩やかなものです。Matzは言語オタクだから、
(権利の主張よりも)自分の作品を使ってくれることに喜びを感じてるのだと想像させるほどに。

>(用途によるが)配布の際にバイトコード化可能かいう点もある。

これも、(オプソなプロジェクト以外では)採用を決めかねない大きなPythonの利点ですね。
ソース非公開というニーズは多いと思いますから、>>363の最後の段落は撤回します。

375 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 02:49:20 ]
いまさらなんだが既存のスクリプトエンジンを組込む話は
組込み系言語スレがふさわしいと思う。

376 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 03:05:22 ]
javascriptはBOTとかのチートツールで使われてる

377 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 03:08:01 ]
>>375
でもあそこでpとかrとか言ったら荒れるんだよね




378 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 08:17:18 ]
>>355
> 参照カウントってのはちょっとダサいが、質実剛健だしその点では好感。

mark & sweepと併用するやり方は、
どっちをメインにするとしても、極めて有効なやり方だよ。

379 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 09:46:27 ]
Rubyは実装として美しくない
最近の高スペックPC当て込んだ

バブル言語だろ

380 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 10:16:03 ]
Forthは基本的にはライブラリ(辞書)管理もFILOだから、
GCという概念がない。動的なデータ構造も(スタック以外)ないし。

PostScriptは確かスナップショットのようなものを取って、
明示的に指定してそのスナップショット以降に確保されたものを
解放するとかそういう機能がある、と思った。

381 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 11:29:43 ]
おれ科学計算系で、3回くらいPythonが組み込まれてるソフトを
触ったことがあるよ。個人的な感想だが、pythonの微妙に面倒臭いところが、
組み込みだと逆にぴったり使いやすいんだわ。説明しづらいけど。
Rubyの自由さは組み込み向けだと正直いらない。

382 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:30:14 ]
>>363-366
おおむね同意だが、>>349に対するレスはやや違うと思う。
漠然とスクリプトエンジンと題した場合、真っ先に求められるのは
書いたスクリプトをその場で実行できる手軽さであり、
必然的にインタプリタの要件を満たすことになる。
これに現在主流がバイトコンパイル式であることを勘案すると
言語まるごと(パーサ+VM)を組み込むことがほぼ確定になる。

まあオレがオレオレ処理系を作るときはスクリプトのコンパイラは
事実上のジェネレータとして実装して、
生成物は汎用のスクリプトの処理系に渡してしまうから
自作部分は純粋なコンパイラになるわけだが。

開発用にはそれとは別にスクリプトのタイムスタンプを見て
自動的にコンパイル作業を行う機能を追加することになるだろう。

383 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:32:25 ]
ruby のライセンスは GPL よりは緩いけど
他の組み込み向け言語に比べると
だいぶめんどくさい方だと思うけどな
まぁライセンス云々はスレ違いだけど


384 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:58:23 ]
>>382
パーサーの要不要は用途次第かと
ゲーム用とかだと開発時は素早く試行錯誤したいが
リリース後は基本的にはスクリプトをいじる必要がないので
そういう場合パーサーは無駄なので最終的には外せる方が良い
実行環境がプアなものは特に



385 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:58:43 ]
これが噂の「すり合わせ」というやつか

386 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:01:08 ]
生インタプリタも、中間形式分離型も両方ある奴がほしい、という
要望ってこれからも大きいかな?

今のところメジャーなもので、実現したものってないような気がするけど。

387 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:41:29 ]
Ruby, Python等のダイナミック言語でパーサを分離するのは無理じゃないか?
例えばPerlだと、実行せずに静的にパースすることは不可能なわけだし。
ttp://perlmonks.org/?node_id=663393&



388 名前:345 mailto:sage [2009/08/15(土) 18:25:09 ]
>>387
Pythonであれば、以下のようなカキコがあるから、
パーザとVMは分離できるように見えるけど、違うの?
Pytonにはevalは存在しないみたいだし(>>349参照)

>>371
>(用途によるが)配布の際にバイトコード化可能かいう点もある。


389 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:16:11 ]
>>380
> Forthは基本的にはライブラリ(辞書)管理もFILOだから、
> GCという概念がない。動的なデータ構造も(スタック以外)ないし。

それは嘘。
FORTHを採用する場合、
後置記法を採用するくらいだから、
非常に小さいインタプリタが必要とされている局面。
だからプアな処理系が多いと言うだけで、
GCをバッチリ実装した処理系はあってもいい。

データがFILOで済むというのも嘘。
辞書に登録したら不必要になる順序はプログラム次第。

390 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:56:55 ]
まあ誰もスクリプトでFORTHなんか使いたくないからどうでもいいけどなw

391 名前:387 mailto:sage [2009/08/15(土) 20:03:53 ]
>>388
実際にPythonやRubyでパースが曖昧になるようなケースは知らないが、
evalがあると分離しにくいのは確かだろうね。ちなみにPythonにもevalはある。

392 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:33:03 ]
そこれりすぷれすよ

393 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:35:35 ]
Rubyが使われないのは単に実績がないからなんでしょ
どんどん使えばいいと思うよ

394 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:45:11 ]
組み込みスクリプト用のLispってあるの?

395 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:50:20 ]
emacs lisp

396 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:02:09 ]
Ypsilon

397 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:35:53 ]
elisp



398 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:43:00 ]
ruby

399 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:05:29 ]
>>394
小さな独自Lisp系ならいくらでもあるよ(CLとかSchemeとかの規格準拠じゃなければ8ビット機でだって動くんだもの)



400 名前:345 mailto:sage [2009/08/16(日) 01:27:27 ]
>>391
え、Pythonにもevalあるんですか?!うーむ
どちらが真実かは、結局は自分で調べなさいということですな。

401 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 01:36:23 ]
python -c 'print eval("1+1")'

402 名前:345 mailto:sage [2009/08/16(日) 01:52:09 ]
>>401
再現しますた。わざわざありがトン。

403 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 02:37:35 ]
>>394
LISPerは自分用のがあるから
他人の糞LISPなんて使わない


404 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 02:50:00 ]
>>403
というか、そんな結論ありきな考え方をするやつなら
そもそもこんなスレに来る必要がないわけだが。

405 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 08:26:25 ]
> データがFILOで済むというのも嘘。
> 辞書に登録したら不必要になる順序はプログラム次第。

少なくとも伝統的なFORTHなら辞書は一方向リンクトリストで最後に
登録されたものから順につながってるし、最後に登録されたワードを
グローバルなワークエリアが指している。
FORGETワードは、特定のワード以降に登録されたワードを全部捨てて
しまう。

そういう構造だから、基本的にGCはない。

406 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 10:10:39 ]
>>394
ISLISP

407 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:10:05 ]
ABAPのEBNFください



408 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 11:13:52 ]
ANTLRで苦戦していて質問したいのですが、このスレでいいでしょうか?
もしくは専用スレを立てる?


409 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 11:40:06 ]
このスレでいい。

410 名前:408 mailto:sage [2009/08/31(月) 11:58:13 ]
お言葉に甘えて。

ng
  : n=TOKEN (v=INT|v=FLOAT)
    -> ^(PARAM $n $v)
  ;

ok
  : n=TOKEN v=(INT|FLOAT)
    -> ^(PARAM $n $v)
  ;

ngルールみたいな書き方はダメでしょうか?
antlrは通るのですが、C言語からそれを呼び出すと
セグメンテーションフォールトします。


411 名前:408 mailto:sage [2009/08/31(月) 11:59:43 ]
ごめん。ngルールとokルールが逆だった。
v=(INT|FLOAT)がNGで(v=INT|V=FLOAT)がOK.
ANTLR的にv=(INT|FLOAT)という書き方はNGなのでしょうか?


412 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:10:45 ]
出来ればツール頼らずに
手続き型言語作りたいんだけど
どのくらい大変なん


413 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:16:35 ]
コンパイラもアセンブラもリンカもエディタもツールですよ・・・

414 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:40:42 ]
Brainfuckならパンチカード手打ちしてもできるんだろうな

415 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:42:28 ]
TinyBASICくらいの規模なら机上でいけるんじゃないかな

416 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:49:12 ]
ツールってyaccとかlexのことか?
なくても大差ないと思うよ

417 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:57:54 ]
>>412
LLで混乱しない文法なら問題ないんじゃないの?
このスレだったと思うけどμplanとかpascalの構文なら自己記述できるし




418 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:00:52 ]
>>412
どういうコードに落とし込むかってあたりが問題になる位で落としやすいVMを設計すれば32Kワードもありゃ言語コンパイラは書ける
UCSD p-systemとかが実際そんなものだ

案ずるより産むが易しってあたりの言語なら悩む前に書き始めてみればいい
コード公開してもいいのなら行き詰まってから助けを求めに此処に戻ってこい


419 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:09:00 ]
いまどきこだわることはないと思うが、
たいがいの言語ならちょいと工夫すればだいたいトップダウンパーザで書ける。

420 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:10:26 ]
>>412
PerlやRubyで書けば、素で描いてもまあ2週間くらいで。

421 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 23:56:56 ]
LISPだと数分〜数時間

422 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:03:58 ]
yane lispおすすぬ

423 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:42:09 ]
Lisperあっち行け

424 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 12:57:23 ]
おおっ
わからない単語がいっぱいでてきた
たくさんレスありがとう

>>416
そういうことです

>>418
Lispなら作れたからアルゴリズムで行き詰る事は多分無いんだけど
Lispに比べると全然ソース量が桁違いになりそうでヘタレてる・・・

>>420
2週間!!
以外と速い
頑張ってみます

425 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:43:59 ]
Lispすげー

426 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:46:38 ]
Lisp作れたならその上でマクロ書けば数日で手続き型言語作れないか?

427 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 10:19:06 ]
LISPのインタプリタの作り方ならLISPの入門書の最後に例題で出ているレベル
JavaとかのGC機能が前提の言語ならそんなに難しくないはず
コンパイラなら知らん

LISPのインタプリタと手続き型言語のインタプリタはつくりがまったく違うと思うけどなあ



428 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 11:44:23 ]
↓このスレの住民なら1レス以内に作れるレベル

429 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 11:57:33 ]
LISPで全部できると思うならそうすればいい。
ただ、なぜいつまで経ってもLISP系が主要プログラミング言語にならないかの理由についても考慮すべき。

>>424
パーサー、構文木構築、構文木消化・変換、出力を順番に作って中間出力を目で確認する。
中間出力はPerlならData::Dumper、RubyならYAMLで。
この辺がC/C++ではしち面倒くさすぎてスクリプト言語でコンパイラを実装する理由。
よほど大規模なマイ言語のスクリプトを構築しない限りは速度面の不満も出ないしね。

430 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:03:55 ]
>>429
C++はSTLとかを使えば面倒な部分がなくなってスプリクト言語で実装するレベルにならない?

431 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:20:47 ]
>>424
Lispの処理系を書いたことがあるってことは、コンパイラ理論は知っているんだよな?

インタプリタ、中間コード吐いてVM上で動かす、ネイティブバイナリ吐く、
と色々パターンがあるが、基本はまず、再起下降パーサー書いて抽象構文木に
落として、実行するインタプリタを書く。それが出来たら(中間表現に落として
最適化して)コード生成。

432 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:33:59 ]
>>430
C++のSTLでYAML並みの読み書き柔軟性得るのにどれだけコストが必要か考えてみて。

433 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:11:55 ]
boost:serialization ってものも

434 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:19:38 ]
ruby信者は痛いので気づいたらそれ以降触らないようにしてる

435 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 14:33:52 ]
大体IRを一々ファイルに書き出す必要もねーだろw
Pretty-printerを書いとけば十分

436 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 16:19:41 ]
>>432
シリアライゼイションを覚えたての子供ですね?

437 名前:デフォルトの名無しさん [2009/09/08(火) 16:33:32 ]
ANTLR3でトークンとしてヒットするけど出力しないトークンはどうやって定義すれば良いのでしょうか。
このTOKENでDQを無視してSTRINGだけツリーパーサーで欲しいのですが…
SKIP()はセグメンテーションフォールトで落ちました.

TOKEN
: DQ STRING DQ ;

fragment
DQ : '"' ;

fragment
STRING : ( ES | ~('\\'|'"') )* ;

fragment
ES
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\');




438 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:46:52 ]
ADD 3 TO 4

という文があった場合
BNFするとしたら、どうするのがカッコいいですか?

439 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:52:46 ]
<文> ::= "ADD" "3" "TO" "4"

440 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 21:57:39 ]
>>439
ATSにする場合どうすればいいの?

441 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 22:39:18 ]
キンコンキンコンキンコンキンコンキンコンキンコン

442 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 19:04:29 ]
AST? ATS?

443 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:50:35 ]
>>442
AST
AST
AST
たすけてください

444 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:53:29 ]
>>439みたいな文法だったらツリーにする必要なくね

445 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:01:21 ]
だね。
リスト(線形)でじゅうぶん。

446 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:02:35 ]
自然言語を再現したいのか
本当に "ADD" <NUM> "TO" <NUM> なのかでずいぶん違うよな

447 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:17:13 ]
"ADD" <NUM> "TO" <NUM>
なのです

その跡にFROMとかつくかもしれないのです
お願いします



448 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:23:58 ]
それでも再帰構造さえなければツリーはいらん

449 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:30:25 ]
でも、その後学のために
作ってみたいのです

お願いします






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<260KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef