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


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

『コンパイラ・スクリプトエンジン』 相談室 2



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

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
まさか単純にぶった切るつもりか?




637 名前:デフォルトの名無しさん [03/04/16 23:52]
単純にぶったぎりますが、ちゃんと途中経過を保存・復元する部分を付け加えたいです。


638 名前:デフォルトの名無しさん mailto:sage [03/04/17 00:11]
>>633の説明だけで何を判れと言うのか。

639 名前:デフォルトの名無しさん mailto:sage [03/04/17 00:20]
>>637
ローカル変数を全部構造体に入れてfunc()で確保、
func1(),func2(),func3()にそいつのポインタを渡してアクセス。

真面目にやるならフロー解析が必要。

640 名前:山崎渉 mailto:(^^) [03/04/17 15:16]
(^^)

641 名前:デフォルトの名無しさん [03/04/19 08:22]
荒したい策の保守あげ

642 名前:デフォルトの名無しさん mailto:sage [03/04/19 15:36]
荒らしたい 策

643 名前:山崎渉 mailto:(^^)sage [03/04/20 03:02]
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

644 名前:山崎渉 mailto:(^^)sage [03/04/20 03:41]
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

645 名前:デフォルトの名無しさん [03/04/23 03:52]


646 名前:棄教者 ◆egKIKYO7cg mailto:sage [03/04/24 15:18]
最近 Perl の Parse::Yapp というモジュールで遊んでいます。
Yacc の Perl 版です。
これで何かハックした神の報告を待つ。



647 名前:デフォルトの名無しさん [03/05/23 14:24]
♥ 

648 名前:名無し@沢村 [03/05/23 16:07]
おまいらよ、コンパイラをつくっただけじゃ言語はできんぞ。
リンカの解説はないか?

649 名前:デフォルトの名無しさん [03/05/23 18:15]
>>84
超遅いレスだけど、漏れも同じところで詰まっている。
P82までは何とか理解できたけど、LL(1)文法の理論説明になると急に難しくなる。
かなり前のページで定義したことが突然出てきたりするし。

コンピューター学科や数学科出身の人を前提にしているのだろう
漏れは情報学科出身ではないから読んでいてつらい・・・

しかも時間の空いているときに少しづつ読むような読み方では、前回読んだことを
覚え続けるのが困難。

650 名前:649 [03/05/23 18:26]
First集合,Follow集合,Director集合は、
ある文法がLL(1)文法かどうかを調べるためだからとりあえず読み飛ばすことにします・・・

651 名前:649 [03/05/23 18:30]
>>648
去年、"Linkers & Loaders" (John R.Levine著 ポジティブエッジ訳・オーム社)を読んだのですけど、
説明がかなり大雑把で実装レベルで直接役立てるのはちょっと無理な気がしました。

652 名前:デフォルトの名無しさん mailto:sage [03/05/23 18:31]
大したこと書いてないので、斜め読みで十分。
とにかく、実際に作ってみるのが○

653 名前:652 mailto:sage [03/05/23 18:34]
中田育男の「コンパイラ」本のことね。

654 名前:649 [03/05/23 18:48]
>>652-653
レスありがとうございます。
私は情報工学は素人なので、斜め読みするほどの能力はありませんが、
理論から導き出される結論自体はそれほど難しいとは思っていないので
なんとか最後まで読んで見ます。

655 名前:逆コンパイラ [03/05/23 20:16]
EXEファイルをC言語に戻す逆コンパイラソフトを教えてもらえませんか。

656 名前:デフォルトの名無しさん mailto:sage [03/05/23 20:22]
戻す?



657 名前:デフォルトの名無しさん mailto:sage [03/05/23 20:38]
>>655
www.itee.uq.edu.au/~cristina/dcc.html
www.backerstreet.com/rec/rec.htm

658 名前:逆コンパイラ [03/05/23 20:47]
>>657
上の一番のHPのdcc Decompiler はどこからダウンロードしますか

659 名前:デフォルトの名無しさん mailto:sage [03/05/23 22:32]
>>658
Table of Contentsの中に思いっきり「配布」という単語があるわけだが。
辞書とか翻訳サイトつかってでもContentsの一覧ぐらいは一通り嫁。

660 名前:デフォルトの名無しさん mailto:sage [03/05/26 23:13]
↓VMにも色々あるようですが、どういう方式でしょうか?
memory to memory
SICD machine
chemical abstract machine
categorical abstract machine
while-if machine

661 名前:649 [03/05/27 15:02]
中田育男氏のコンパイラを読み終わって、PL/0'のソースコードをざっと眺めていたのですが・・・
字句解析と構文解析以外は普通のプログラミングですね。
結局はyacc&lexの勉強をしろということでよろしいでつか?

662 名前:棄教者 ◆egKIKYO7cg mailto:sage [03/05/27 15:51]
>>661
そりゃ天下のGCCだって構文解析器はBisonを使って書かれているからね。


663 名前:デフォルトの名無しさん mailto:sage [03/05/27 16:02]
>>661>>662
若者ならyaccは無視してantlrをやったほうがいいでしょうか?


664 名前:649 [03/05/27 16:24]
>>663
漏れも良く分からないけどJava環境ならANTLRになるのでは?
漏れはC言語使うのでyaccが魅力的でつ

665 名前:デフォルトの名無しさん [03/05/27 16:30]
>>663
若者ならまずは手書きから始めるのが良いですよ。
言語にもよるけど、再帰的降下法はいちばん単純でわかりやすい。

パーサジェネレータを使う場合にも、一度手書きパーサを経験しておかないと
なにがなんだかわからない、という人が多いようです。


666 名前:デフォルトの名無しさん mailto:sage [03/05/27 16:46]
どうも。やってみます。ただ、23歳はもう若者じゃなかったかもしれません。



667 名前:デフォルトの名無しさん mailto:sage [03/05/27 17:52]
あっというまに

668 名前:649 [03/05/27 17:53]
>>665
手書きの経験が必要でつか?
漏れは若者じゃないからいいや・・・

669 名前:デフォルトの名無しさん mailto:sage [03/05/27 17:56]
手書きの方が速い

670 名前:デフォルトの名無しさん mailto:sage [03/05/27 18:05]
昔、手書きでCコンパイラを作るとかぶちあげて、全く後が続かず、
入院したことにして結局うやむやにした香具師がいたな。


671 名前:デフォルトの名無しさん mailto:sage [03/05/27 18:10]
ただのツール使いはヘタレ。

672 名前:名無し@沢村 [03/05/27 20:29]
おまいらよ、コンパイラは字句解析と構文解析だけではないぞ。
いいか、コンパイラはな、字句解析、構文解析、意味解析、最適化、リンカ、ローダとどれが欠けてもダメよ。わかるか?
おまいらに、コンパイラをつくる能力があるか?

673 名前:デフォルトの名無しさん mailto:sage [03/05/27 20:53]
アセンブラなら作ったことあるぞ。
コンパイラからアセンブリコード吐かせればOKだな。

674 名前:デフォルトの名無しさん mailto:sage [03/05/27 20:59]
最適化はあくまでオブションだし、ローダはOSの仕事だがなw

675 名前:デフォルトの名無しさん [03/05/27 21:14]
>>672
大半の人が作りたいのはスクリプトのコンパイラでないの?
それなら、字句解析、構文解析、意味解析だけで何とかなるのでは。

676 名前:デフォルトの名無しさん mailto:sage [03/05/27 21:30]
>スクリプトのコンパイラ
バイトコードコンパイルという意味だよね?




677 名前:デフォルトの名無しさん [03/05/27 22:40]
>>676
そうっす

678 名前:デフォルトの名無しさん [03/05/27 22:50]
リンカはリンカだろ・・

679 名前:デフォルトの名無しさん mailto:sage [03/05/27 23:07]
>>678
Delphiのよーに、コンパイラがリンクまでやってくれると便利なときがあるよ。
同じシンボルがエクスポートされた.objも、別々のユニットから{$L}で取り込めば呼び分けられるし、
リンクエラーとか名前の衝突とかも、リンカじゃなくてコンパイラのエラーになるので
原因となるソースコード上での位置がわかるし。

680 名前:デフォルトの名無しさん mailto:sage [03/05/28 05:29]
>>674
正直、最近のマシンは最適化してやらないと実力が出ないから
コンパイラ/インタプリタでの最適化は重要だし、
処理系のコード的にも非常に大きな部分を占めてるんだが。

681 名前:デフォルトの名無しさん mailto:sage [03/05/28 05:36]
>>680
追伸:
オプションなのは最適化なんてしなくていいってコトじゃなくて
様々な最適化技法がプログラムの性質によってそれぞれ有効度があり、
あまり効かなかったり却って遅くなるような場合に外したりパラメータを調節するのが目的。
(昔はデバッグを簡単にする目的もあったけど最近のデバッガは優秀だから
最適化されていてもデバッグできたりするらしいね。)

682 名前:デフォルトの名無しさん mailto:sage [03/05/28 06:00]
ほう。最近のデバッガは、最適化で消えた変数も追いかけられるようになったりするの?

683 名前:デフォルトの名無しさん mailto:sage [03/05/28 07:37]
消えたといっても、スタックローカルからレジスタに移っただけだろ? だからレジスタにある間は追いかけられる。

684 名前:デフォルトの名無しさん mailto:sage [03/05/28 10:30]
最適化について知らないなら、まず調べてから書いてください。

685 名前:デフォルトの名無しさん mailto:sage [03/05/28 11:32]
681が言ってるのはインライン展開とか実行順変更程度なら大丈夫という話
682が言ってるのは完全に消えた変数の話
683が言ってるのはレジスタ最適化の話
684が言ってるのは・・・・?

686 名前:山崎渉 mailto:(^^) [03/05/28 12:35]
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉



687 名前:デフォルトの名無しさん mailto:sage [03/05/28 15:24]
Compiler Design in C
www.amazon.com/exec/obidos/tg/detail/-/0131550454/
www.holub.com/software/compiler.design.in.c.html

て読破したかたいらっしゃいますか?
古すぎますかね。

688 名前:名無し@沢村 [03/05/28 16:00]
おまいら、『コンパイラ・スクリプトエンジン』について相談してみろ?

689 名前:674 mailto:sage [03/05/28 17:41]
>>680
672があまりにいいかげんなこと言っていることを踏まえての内容です。
実用性から言えば、680,681に書かれたことは誰でも認める常識かと。

690 名前:デフォルトの名無しさん mailto:sage [03/05/28 17:44]
だから沢村に関わるなとあれ程言ったのに

691 名前:デフォルトの名無しさん mailto:sage [03/05/29 00:33]
ここには↓を解説できる者はおらんのか?
memory to memory
SICD machine
chemical abstract machine
categorical abstract machine
while-if machine

692 名前:デフォルトの名無しさん mailto:sage [03/05/29 00:49]
>>691
つーかどっから拾ってきたの?論文読めよ。
名前間違ってるのもあるし。

693 名前:名無し@沢村 [03/05/29 05:08]
おまいらよ、ここで『コンパイラ・スクリプトエンジン』について知ったかで語ってるやつは多いが、
その割りには世に『コンパイラ・スクリプトエンジン』はそれほど多く出てないが…?
みんな自分だけで使ってんの?
それとも起動したと同時に終了してしまうコンソールアプリケーション?

694 名前:デフォルトの名無しさん mailto:sage [03/05/29 05:18]
自分のアプリケーション用だろ。
はじめから世に出すつもりで作っていない。

695 名前:デフォルトの名無しさん [03/05/29 07:34]
世に出してほすぃ
設計から実装まですべてさらけだしてほすぃ

696 名前:デフォルトの名無しさん mailto:sage [03/05/29 07:42]
さらけ出てるじゃない >>241 >>487




697 名前:デフォルトの名無しさん mailto:sage [03/05/29 08:49]
自分のプログラムにちょっとしたマクロを実装できたらいいなあ〜
って類がこのスレの対象だろ。

698 名前:デフォルトの名無しさん mailto:sage [03/05/29 09:53]
>>693
> それとも起動したと同時に終了してしまうコンソールアプリケーション?
こんなやつかW?

int main() {return 0;}






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

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

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