- 1 名前:nanashi de fault [02/05/12 02:05]
- 前スレ1より
>yaccやlexの使い方やら言語仕様やらの話題。 前スレ 【コンパイラ・スクリプトエンジン】相談室 pc.2ch.net/test/read.cgi/tech/981672957/ 前スレアーカイブ(かちゅ用) www.1me.jp/hp/prg_c-s_lab 前スレに張られたリンク + x >>2-6
- 536 名前:int [03/03/23 09:37]
- ちょっと聞きたいんだけど、いわゆるスクリプトと呼ばれるインタプリタ処理系は、
(中間言語を含め)内部で事前コンパイルしてるものなのでしょうか?
- 537 名前:デフォルトの名無しさん mailto:sage [03/03/23 09:52]
- してるよ
- 538 名前:int [03/03/23 10:15]
- それは、事前に全ソース(つまり頭から尻尾まで)変換してから
実行しているってことですか?
- 539 名前:デフォルトの名無しさん mailto:sage [03/03/23 10:25]
- >>538
大抵は一括変換だけど、 ある単位(関数や変数など)ごとに変換していくのもあるよ
- 540 名前:デフォルトの名無しさん mailto:sage [03/03/23 10:26]
- ∩
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´Д`)// < 先生!こんなのを発見シマスタ! / / | / /| / \ saitama.gasuki.com/sinagawa/ __| | .| | \ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \_____________ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
- 541 名前:デフォルトの名無しさん mailto:sage [03/03/23 10:29]
- ↑ブラクラなので踏まない様に
- 542 名前:デフォルトの名無しさん mailto:sage [03/03/23 10:52]
- >>533
自分はあきらめて空の unistd.h をシステムインクルードディレクトリに入れてしまいました。
- 543 名前:int [03/03/23 17:16]
- >>539
文字通り1行毎に逐一変換&実行している言語はないのでしょうか? なんか、そのほうがインタプリタ(スクリプト)というイメージに ぴったりなんですが。。。
- 544 名前:デフォルトの名無しさん mailto:sage [03/03/23 17:17]
- N88BASIC?
- 545 名前:デフォルトの名無しさん mailto:sage [03/03/23 17:24]
- >>543
sh
- 546 名前:ろうひ男爵 mailto:sage [03/03/23 18:55]
- >>544
N88BASICも、入力されたときに中間コードに落とすんじゃなかったですっけ? >>543 GOTOなどのジャンプ先のアドレス解決を毎回やると、 検索だけで重くなってしまうので実用的ではないのでは?
- 547 名前:デフォルトの名無しさん mailto:sage [03/03/23 19:16]
- >>543
自分の場合は、スクリプトとして自働実行する以外に、コマンドラインのインターフェイスを 持たせたいときは、そういうことをする場合もあります。 ただ・・・ 構造化された構文がこれだと作りにくいんだ、 だからある程度派手な構文を持つ場合はパースするか、コマンドラインだけ文法限定して 別パーサーで作っていたりします。 ちなみに、古いベーシックなんかが一行入力時にそのつどパースしてるんじゃないかな。 いまどきの文法はちょっと苦しいかも。
- 548 名前:int [03/03/23 23:05]
- やはり、実行速度がもんだいのようですね。
いろいろとありがとうございました。
- 549 名前:デフォルトの名無しさん mailto:sage [03/03/24 09:24]
- >>547
だからshのソース嫁。gotoはないけどブロックはある。
- 550 名前:デフォルトの名無しさん mailto:sage [03/03/24 11:02]
- >>549
まあできんことは無いんだが・・・ たんに大変だなとか思ってね。
- 551 名前:デフォルトの名無しさん mailto:sage [03/03/24 12:52]
- >>546
実行時にsyntax errorが出るくらいだから、それはないと思う。
- 552 名前:デフォルトの名無しさん mailto:sage [03/03/24 12:57]
- >>551
たしか予約語を中間コードに置き換えるようなことはやってたと思うが。 でも構文チェックをしたり構文木を作ったりは当然しない。
- 553 名前:デフォルトの名無しさん mailto:sage [03/03/24 16:41]
- >>551
N88しか知らないけど、runした瞬間に出るエラーもあるよ。 for〜nextの対応関係だったかなぁ。
- 554 名前:デフォルトの名無しさん [03/03/26 22:14]
- その中間言語って、なにか規格みたいなものあるの?
それともデファクトスタンダードな仮想マシンがあるの???
- 555 名前:デフォルトの名無しさん mailto:sage [03/03/26 22:19]
- >>554
そんなもんは無いです、当時は中間コードの利用目的は高速化とプログラムのメモリー占有サイズの削減が目的。 わずか数キロバイトにプログラムを収めるのにTEXTデータは大きすぎたのです。
- 556 名前:デフォルトの名無しさん [03/03/27 03:20]
- つまらんこと聞きますが、まぁバグはあるにせよ、VC++って異常に的確な
エラーメッセージを吐き出しますよね。 LALR(1)で解析してて、あんなことってできるもんなんですか? yaccとかだと、ちょっとerrorを突っ込んだだけでconflict起こしますよねぇ。 LR(1)とかだったらそこいらじゅうに、擬似シンボル埋め込めばできなくも なさそうな気はしますが、、、 そのへんってどうなんでしょう?
- 557 名前:デフォルトの名無しさん [03/03/27 03:54]
- >>555
THANX
- 558 名前:デフォルトの名無しさん mailto:sage [03/03/27 11:42]
- >>556
「異常に的確なエラーメッセージ」の例を挙げないと、 答えづらいと思うよ。
- 559 名前:デフォルトの名無しさん [03/03/27 20:00]
- >>556
異常に典型的なミスを犯しているだけでは?(w
- 560 名前:デフォルトの名無しさん mailto:sage [03/03/28 17:07]
- VCのエラーメッセージって異常に意味不明なものが多いと思うがな。
- 561 名前:デフォルトの名無しさん mailto:sage [03/03/29 01:13]
- 「予期せぬ EOF が検出されました」
のどこが的確なメッセージなのかと、小一時間t(ry
- 562 名前:デフォルトの名無しさん [03/03/29 16:28]
- やはり、>>559だろう
- 563 名前:デフォルトの名無しさん mailto:sage [03/03/29 18:30]
- >>556
>つまらんこと聞きますが、まぁバグはあるにせよ、VC++って異常に的確な 具体的にどの辺が的確なエラーメッセージだと思ったのか、書け。
- 564 名前:デフォルトの名無しさん mailto:sage [03/03/29 19:04]
- >>559-563
煽りは死滅スレでやれや
- 565 名前:563 mailto:sage [03/03/29 19:24]
- >>564
煽りに見えてのはお前だけだと思われ。 もし>>556=>>564だとしたら被害妄想だよ。 死滅スレ居座りすぎて病気になったか(w 説明不足を解消せよってだけ。
- 566 名前:デフォルトの名無しさん mailto:sage [03/03/29 19:27]
- >>565
>>558がもう指摘してるじゃん。
- 567 名前:563 mailto:sage [03/03/29 19:45]
- >>566
んなことわかってるよ。 これじゃ話が進まないから催促してるの。
- 568 名前:デフォルトの名無しさん mailto:sage [03/03/29 21:15]
- 563 は "(w" とかつけている段階で論外。
毎日見ていない人もいるだろう、そのうち書かれた時に理由を考えればいい。 ただ煽るだけで意味のないことするな。
- 569 名前:デフォルトの名無しさん mailto:sage [03/03/29 21:49]
- 結局556がアホなだけだな。
- 570 名前:デフォルトの名無しさん [03/03/30 20:24]
- インタプリタの中間コードは8ビットが普通ですか?
いきなり32ビットとはしてるものはありますか?
- 571 名前:デフォルトの名無しさん mailto:sage [03/03/30 20:35]
- >>570
Java。全て4バイトがベース。
- 572 名前:デフォルトの名無しさん [03/03/30 20:52]
- 皆さんのお力でぜひぬるぽをageて下ちい。
∧_∧ ( ´∀`)< ぬるぽ ぬるぽ 投票ヨロシク pumpkinnet.to/ranking/words/
- 573 名前:デフォルトの名無しさん mailto:sage [03/03/30 21:50]
- Javaは8bitじゃないのか?
- 574 名前:デフォルトの名無しさん [03/03/31 00:29]
- そういえば、java関係の本はそれこそ腐るほど(?)あるが、
バイトコードとか仮想マシンの説明をしてるものってある?
- 575 名前:デフォルトの名無しさん mailto:sage [03/03/31 00:49]
- >>574
オライリがバーチャルマシン仕様の解説本出してるよ。
- 576 名前:デフォルトの名無しさん mailto:sage [03/03/31 00:50]
- >>574
本屋で立ち呼んだ記憶があるからあるんじゃない?
- 577 名前:デフォルトの名無しさん mailto:sage [03/03/31 02:52]
- ソースコード読めばいんじゃないの?
そこまでやるのはちょっと、、、という のなら、そもそもVMの勉強なんてしなくても いいんじゃないの?
- 578 名前:デフォルトの名無しさん mailto:sage [03/03/31 03:31]
- Structured Computer Organization by Andrew S. Tanenbaum
www.amazon.com/exec/obidos/tg/detail/-/0130959901/ にちょっとだけ説明があります。 オペコードが1バイトで全体としては1〜3バイトのがほとんどだそうです。 java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html のどこかに説明あるかと思いましたが、発見できませんでした。 見落としあるかもしれません。 あとamazon.comをjava virtual machineで検索すると7冊ほどひっかかりますね。 www.amazon.com/exec/obidos/search-handle-url/index=books&field-keywords=java%20virtual%20machine&search-type=ss&bq=1
- 579 名前:デフォルトの名無しさん [03/03/31 04:36]
- WSHとかってプログラム上から使ってその結果を受け取ることは出来ないのでしょうか?
MSDNを見ますと「IActiveScript」と言うのが在るのですが, いまいちサンプルが乏しくて困っています.
- 580 名前:デフォルトの名無しさん mailto:sage [03/03/31 04:43]
- 一通りの使い方ならRuby256本の邪道編に書いてあった気がするが。
スレ違いじゃないか?
- 581 名前:579 mailto:sage [03/03/31 19:20]
- IActiveScriptってWSHにRubyとかの他の言語拡張するための
インターフェイスなのですか? 今考えているソフトでWSHスクリプトファイルをユーザに用意してもらい, そこに書いているスクリプトを実行することによってアプリケーションの 挙動を変化させたいと思っています. WSHあるいはJSCRIPT,VBScript等をプログラム上でロードして実行させる 方法が知りたいです. よろしくお願いします. 環境: VC++ 6.0 IE Ver 6.0.2
- 582 名前:デフォルトの名無しさん [03/03/31 20:09]
- >>577
何のソースコードを読めばいいの? VMのソースコード?それって公開されてるの?
- 583 名前:デフォルトの名無しさん mailto:sage [03/03/31 20:19]
- 良い子は検索したり、過去ログ読んだりします。
- 584 名前:デフォルトの名無しさん mailto:sage [03/04/01 01:40]
- <死ね>
www.amazon.co.jp/exec/obidos/ASIN/490090063X/qid%3D1049128711/250-2465643-1535410 www.amazon.co.jp/exec/obidos/ASIN/489471356X/qid=1049128646/sr=1-1/ref=sr_1_2_1/250-2465643-1535410 VMはオープンソースのプロジェクトがいくつかあったはず。 GNUにもあった気がする。 俺が知ってるのはOSがマイナーなんで言ってもしょうがない。 </死ね>
- 585 名前:デフォルトの名無しさん mailto:sage [03/04/01 01:43]
- <死ね target=">>582">
www.amazon.com/exec/obidos/ASIN/3540420886/qid=1049128836/sr=2-2/ref=sr_2_2/104-8886811-5842366 全部読んだわけではないが書き方が変わってるんでVMの勉強としては素直に薦められない。 www.amazon.com/exec/obidos/ASIN/0201432943/qid=1049128836/sr=2-1/ref=sr_2_1/104-8886811-5842366 は上にあげたとおり邦訳が出てるんでそっちを読め。訳に問題はない。 あとの洋書は大体到着待ち。 </死ね>
- 586 名前:デフォルトの名無しさん mailto:sage [03/04/01 02:32]
- >>582
www.kaffe.org とか…
- 587 名前:デフォルトの名無しさん [03/04/05 17:27]
- いろいろと参考になりますね、この擦れ。
ところで、JAVAのVMがやはり事実上のスタンダードになりつつあるのでしょうかね?
- 588 名前:デフォルトの名無しさん mailto:sage [03/04/05 17:33]
- 現状はそう。
でもCLRとかParrotとか、未来の可能性は閉じてはいない。
- 589 名前:デフォルトの名無しさん [03/04/05 17:35]
- >>587
なんの事実上のスタンダード? VMといえばJavaのVMってことか?
- 590 名前:デフォルトの名無しさん [03/04/05 17:57]
- >>581
やり方が分かったら連絡してくれ.
- 591 名前:デフォルトの名無しさん mailto:sage [03/04/06 02:48]
- >>587
スタンダードというか、参照・参考にするのに比較的お手軽なのは確か。
- 592 名前:デフォルトの名無しさん [03/04/08 21:55]
- VMってJAVAスクリプト自体は解釈できんのね?
- 593 名前:デフォルトの名無しさん mailto:sage [03/04/08 22:17]
- JavaとJavaScriptは何の関係も無い(たしか)
- 594 名前:名無し mailto:sage [03/04/09 01:24]
- VMが理解できるのはバイトコードだけかと
- 595 名前:デフォルトの名無しさん mailto:sage [03/04/09 11:34]
- はぁ?
- 596 名前:デフォルトの名無しさん mailto:sage [03/04/09 13:44]
- >>593
そだね最初はNetscape社のLiveScript。でJavaが現れて なんとなく名前をJavaScriptに変更。 www.howtocreate.co.uk/jshistory.html つうかこれくらいはgoogleですぐ見つかるんだが…
- 597 名前:デフォルトの名無しさん mailto:sage [03/04/10 11:47]
- Javaを意識してみたという点では、まったく無関係でもない。
- 598 名前:デフォルトの名無しさん mailto:sage [03/04/10 12:40]
- >>597
ばーか
- 599 名前:コンパイラを勉強するには? [03/04/10 15:41]
- 今まで、業務でJavaを1年半使った以外、プログラム経験はありません。そのJavaもWeb系が主です。
こんな僕でも、コンパイラの事を理解する事ができるでしょうか?JavaCCと言うのをやろうとしているのですが、 これをやるには、Java以外の知識よりもプログラム全般に詳しくないとできないですよね? 『おまえには、まだ無理だ。そんなんじゃJavaCCなんて理解できるはずはない。』なんてことは、皆さん思いませんか? それとも、私ほどの経験でもJavaCCを理解する事は可能なんでしょうか? 何年かかっても良いので、最良の道を行きたいと思っています。 それには、やはりC言語などからプログラムというものを理解し、一般のコンパイラ事情を知ってから、JavaCCに行った方が良いのでしょうか? よろしくお願いします。
- 600 名前:デフォルトの名無しさん mailto:sage [03/04/10 15:50]
- 愛さえあればできるよ。
- 601 名前:デフォルトの名無しさん mailto:sage [03/04/10 15:52]
- できちゃった♥
- 602 名前:デフォルトの名無しさん mailto:sage [03/04/10 16:15]
- >>599
個人的にゃJavaって泥臭いとこを隠してるから一回Cでそういう所を 見た方がいい気がする。 UNIX使えるならシェル書いてみるのはどうよ。
- 603 名前:デフォルトの名無しさん mailto:sage [03/04/10 16:17]
- Java慣れてるならJavaでいいじゃん。
なんで遠回りすんの?>602
- 604 名前:デフォルトの名無しさん mailto:sage [03/04/10 16:28]
- んー?別にCで全部やれっちゅうワケじゃないのよ。
ただ、作ろうとしてるモンはJavaでもCでもない「別の言語」 だから他の言語との違いを知っとった方がいいかと思う。
- 605 名前:デフォルトの名無しさん mailto:sage [03/04/10 16:34]
- あ、でもJavaってアプリ自身がJavaで書かれたコードを実行する機能を
持たれられた気がするな… マクロとかだとそっちの方が早いか?
- 606 名前:デフォルトの名無しさん mailto:sage [03/04/10 17:50]
- >>599
C yacc lex は書籍が多いから、それがいいかもね。 とりあえず C をマスターしておいて、整数だけbasicからjavaへのトランスレータとか作ってみたらどう? でき上がったものは無意味だけど、やり方は理解できると思うよ。
- 607 名前:デフォルトの名無しさん mailto:sage [03/04/10 18:05]
- (´-`).。oO(>602 コンパイラ作るのになんでシェルが関係あるんだろう?)
最終的に機械語やバイトコードに落とす必要は必ずしもないのだし、 そこまでいくには道のりは遠いので、まずは構文解析できるように なればいいのでは。 ただ、言語を作るのはただツールをいじっていればなんとかなるものでもない。 きちんとしたものを作れるようになるには知識が必要なので、しっかりした 解説を読むべし。 Java + JavaCC で書いてあるwebなり本なりが見つかればそれでもいいし、 見つからなければCを覚えて本を読む方がいい。理論がわかればツールを使うの はJavaCCだろうがyaccだろうがたいしてかわらない。 過去ログを見ればweb上の講義ノートもあったと思う。(前スレだったかも)
- 608 名前:デフォルトの名無しさん mailto:sage [03/04/10 18:24]
- シェルスクリプトあたりからってことじゃないの
- 609 名前:デフォルトの名無しさん mailto:sage [03/04/10 18:40]
- だとしてもなんでshなんだよ。
まだLISPでもやってた方がいいぞ。
- 610 名前:コンパイラを勉強するには? [03/04/10 19:55]
- どうも、皆さん幅広いご意見ありがとうございます。
大変参考になったのですが、やはり難しそうですね。しかし、生まれつき、計算とかが 好きなものですから、話しを見ているだけで、とてもわくわくしてきます。 やはり、いきなり、JavaCCに入るのではなく、他の方から入っていく事にします。 もっといろいろ読みたいので、良ければみなさん、またいろいろ書いておいてください。 よろしくお願いします。
- 611 名前:デフォルトの名無しさん mailto:sage [03/04/10 20:36]
- >>610
yacc lex なら、そんな難しいものじゃないから、習うより馴れろでガンガンいけばいいよ。 ただCは押さえて置かないと進むものも進まないから、Cはがんばってね。 多分なじみの薄い物で参考資料も少なく、yacc を使うにあたって必要不可欠なCの概念は union だと思います。 そこは気合で行ってくれ。
- 612 名前:コンパイラを勉強するには? [03/04/10 21:32]
- 気合で行くわ。
- 613 名前:デフォルトの名無しさん mailto:sage [03/04/10 21:38]
- どうも、仕事で簡易スクリプトを作ることになりそう。
基本的には、引数付の関数呼び出しと変数への値代入程度 で済ませたいけど、制御構造も作らざるを得ないかも・・・。 まあ、ちょうどよい勉強と思ってやってみるつもりです。
- 614 名前:デフォルトの名無しさん mailto:sage [03/04/10 23:03]
- 仕事なら既存のやつ使った方がいいんじゃねーの?
- 615 名前:デフォルトの名無しさん mailto:sage [03/04/11 00:59]
- この時期だし研修用でそ
- 616 名前:デフォルトの名無しさん mailto:sage [03/04/11 09:34]
- >>614
アプリケーション組み込み物のスクリプトだと既存という訳にはいかんよ、作るしかないです。 仮にソースが取得できたとしても、殆どがGPLに侵されたコードで再利用は不可能だからね。
- 617 名前:デフォルトの名無しさん mailto:sage [03/04/11 12:46]
- >>616
perlもpythonもrubyもtclもGPL以外での利用を認めてるが。
- 618 名前:デフォルトの名無しさん mailto:sage [03/04/11 13:17]
- >>617
たとえば www.ruby-lang.org/ja/LICENSE.txt とかは? 近は過激な運動家がいたりして危ないから、そういう報流すのは良くないよ〜
- 619 名前:デフォルトの名無しさん mailto:sage [03/04/11 13:18]
- 近→最近
- 620 名前:デフォルトの名無しさん mailto:sage [03/04/11 13:37]
- つーかGNU謹製のguileですら非GPLソフトへの組み込みを認めていたりするのだが。
- 621 名前:デフォルトの名無しさん mailto:sage [03/04/11 13:45]
- >>620
お仕事用というのだから、組み込みよりもソースの公開が問題なんじゃないの?
- 622 名前:デフォルトの名無しさん mailto:sage [03/04/11 14:16]
- >>621
GPLと互換性のないライセンスのソフトに組み込める==ソース公開の義務がない(スクリプトエンジン以外は)
- 623 名前:デフォルトの名無しさん mailto:sage [03/04/11 14:25]
- >>622
その解釈は結構きわどいと思うな・・・
- 624 名前:デフォルトの名無しさん mailto:sage [03/04/11 14:46]
- スクリプトエンジンに手を加えずに使うんだったらいいんじゃない?
手を加えたくなってもフィルタで済ます。
- 625 名前:デフォルトの名無しさん mailto:sage [03/04/11 19:46]
- >>618
> www.ruby-lang.org/ja/LICENSE.txt 「または以下に示す条件で」って書いてあるじゃん。 rubyに関しては何度かMLでもそういう話があるが、結論としては 「迷惑をかけないでくれ」だけのはず。 ところで過激な運動家って何だ?
- 626 名前:デフォルトの名無しさん mailto:sage [03/04/11 21:34]
- Qちゃん
- 627 名前:デフォルトの名無しさん mailto:sage [03/04/12 00:43]
- >>626
過激だったのか。中の人も(ry
- 628 名前:デフォルトの名無しさん mailto:sage [03/04/12 06:46]
- そろそろスレ違い気味なのでGPLスレでも建てて議論してくだちゃい
- 629 名前:デフォルトの名無しさん mailto:sage [03/04/12 12:46]
- ここだな?
【殺しの】ライセンス【道で拾った】 pc2.2ch.net/test/read.cgi/tech/1045006087/
- 630 名前:デフォルトの名無しさん mailto:sage [03/04/12 17:19]
- >>599
JavaCC使うなら、LL解析法だからLALR解析法を使うyaccは勉強しなくていいよ。 ちょっとした簡単な言語のインタプリタを作ったことがかなり前にあるんだけど、 簡単なインタプリタならそんなに難しくないはず。 LL文法とBNFがわかれば、JavaCCは使えるようになると思う。 言語処理系の本を1冊借りてきて、Let's Try!
- 631 名前:デフォルトの名無しさん mailto:sage [03/04/12 17:23]
- 追加。
ドキュメントが英語で分かりにくいから、 ttp://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html ttp://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html この辺を参考に。 大量にサンプルがついてるから、それを参考にして作るといいかも。
- 632 名前:デフォルトの名無しさん mailto:sage [03/04/14 21:08]
- LL(k)らしいんだけど誰か使てる?
spirit.sourceforge.net/
- 633 名前:デフォルトの名無しさん [03/04/16 23:30]
- func();
という長い関数があったとして、これを func1(); func2(); func3(); と分割するようなプログラムを作ってみたいと思ってます。 なにか参考になる情報、またはすでにそういうものがあったら教えてください。 それでは宜しくお願いします。
- 634 名前:デフォルトの名無しさん mailto:sage [03/04/16 23:41]
- >>633
リファクタリングで検索
- 635 名前:デフォルトの名無しさん mailto:sage [03/04/16 23:43]
- >>634
それは手作業でやるのでは?
- 636 名前:デフォルトの名無しさん mailto:sage [03/04/16 23:49]
- >>635
おまえは一体どう分割したいのかと(ry まさか単純にぶった切るつもりか?
|

|