1 名前:デフォルトの名無しさん [03/11/29 15:59] yaccやlexの使い方やら言語仕様やらの話題。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち) 関連リンクは多分 >>2-8 あたり
709 名前:デフォルトの名無しさん mailto:sage [04/07/01 23:38] xyzzyがWin emacsの筆頭?
710 名前:デフォルトの名無しさん mailto:sage [04/07/01 23:58] >>704 C++でならTypeList or boost::mpl使えば書けそう。 まあ流石に100個も200個も可変長引数を渡されると無理だろうけど。
711 名前:デフォルトの名無しさん mailto:sage [04/07/02 00:12] ECMAScriptを解析してくれて、しかも組み込み関数・オブジェクトを定義できるライブラリが欲しい 自作すると変数宣言と組み込み関数・オブジェクトのみになりそうだ
712 名前:デフォルトの名無しさん mailto:sage [04/07/02 00:38] Schemeは括弧さえ折り合いつけば最高の言語の一つだ
713 名前:デフォルトの名無しさん mailto:sage [04/07/02 14:23] >>711 クロスプラットフォームなら spidermonkey とか、 Windows だけでいいなら ActiveScript とか。 どちらでも簡単にできるよ。
714 名前:デフォルトの名無しさん mailto:sage [04/07/02 17:21] >>709 >Win emacsの筆頭 Meadowの方が広く使われてます。
715 名前:デフォルトの名無しさん mailto:sage [04/07/02 22:36] >>713 SpiderMonkeyはかなりよさげだね しかし英語だらけで組み込めるのは当分先か・・w
716 名前:デフォルトの名無しさん mailto:sage [04/07/03 10:17] >>704 そういうプリプロセサ書いて、差し替えれば済む話だと思うけど。 全部 C/C++ でできますよ。(藁
717 名前:デフォルトの名無しさん mailto:sage [04/07/03 10:38] C/C++ではたしかpreprocessor commandsも規格の一部な罠。
718 名前:デフォルトの名無しさん mailto:sage [04/07/03 11:22] プリプロセッサを差し替えるオプションなんてあるの? Visual C++とgccを見たけど見つからなかった。
719 名前:デフォルトの名無しさん mailto:sage [04/07/03 15:40] >>716 それじゃ「コンパイラ書けばできますよ」ってのと変わらないやん.
720 名前:デフォルトの名無しさん mailto:sage [04/07/03 22:50] >>718 自分のプリプロセッサから、コンパイラ呼べばイイだけじゃない?
721 名前:デフォルトの名無しさん mailto:sage [04/07/04 02:06] >>720 そりゃそうだ。でも差し替えるとは言わんな。下らないことをきいてしまった……。
722 名前:デフォルトの名無しさん mailto:sage [04/07/04 09:28] 差し換えるならspecファイルだろ。
723 名前:デフォルトの名無しさん mailto:sage [04/07/04 11:46] >>718 GCC とかならソースあるんだから、適当に修正して実行ファイル入れ替えれば良いんじゃないのか ? >>719 まあ、そりゃそうだけど、コンパイラ書くより多少難易度は低いだろ。
724 名前:デフォルトの名無しさん mailto:sage [04/07/04 16:57] 結局使い物にはならないと。 普通のアプリケーション書くのに特定のコンパイラのバージョンとそれへのパッ チ込みで保守したくはねーなあ。
725 名前:デフォルトの名無しさん mailto:sage [04/07/04 18:28] まあ、このスレ的にはコンパイラまで作ってしまえって事になるかな。 TinyC->.asm位だったら簡単だしね。 俺は#defineなどC言語準拠なプリプロセッサに アセンブラ風の複数行マクロを使えるような物を作って、 言語ごとに微調整しているよ。 ()を使わないバージョンなどね。 エラーを探知するために、##lineっていう 現在のコンパイル行をプリプロセッサ->コンパイラへ通知する命令をつくって、 デバックもしやすくしているよ。
726 名前:デフォルトの名無しさん mailto:sage [04/07/04 21:39] >>724 て言うか、普通のアプリケーション書くのに >>704 みたいなことはあまり必要ないだろ。 マクロプロセサやプリプロセサが高機能だと色々おもしろいけど、実際のところ後の保守が大変だったりするからあまり使わん。 昔使った PL/I のプリプロセサは、IF 文は当然、FOR/WHILE の制御構造や PROCEDURE/FUNCTION なんかの手続き/関数定義までできた。 だから凝った定義を書けば、ソースを短く書けたけど、プリプロセサ文をデバッグする手間を考えたら素直にソースを手で展開した方が早かったよ。(藁 MASM なんかのマクロアセンブラでも同じような経験したことある人は多いと思うよ。
727 名前:デフォルトの名無しさん mailto:sage [04/07/05 01:31] 俺はわりとしょっちゅう欲しくなる方だな。 Lispのマクロで俺言語を作ることを考えると>>726 も想像はできるけど。 >>726 とは逆に最初書くときはベタに展開したソースを書くけど後から 保守性を考えてマクロでまとめることも。あまり凝ったことはしないけどさ。 cppに変数とifとfor eachだけでもあれば世の中もうちっと良かったろうに。
728 名前:デフォルトの名無しさん [04/07/13 22:28] コンパイラとかの参考図書は、よくありますが スクリプト言語の参考図書(定番)は、ごぞんじないですか?
729 名前:デフォルトの名無しさん mailto:sage [04/07/13 22:52] 各OS毎のリソースコンパイラの作り方に触れたサイトってありますか?
730 名前:デフォルトの名無しさん mailto:sage [04/07/14 00:35] >>728 その二つに大きな違いはない。
731 名前:デフォルトの名無しさん mailto:sage [04/07/14 01:11] >>728 コンピュータアーキテクチャの本じゃないか? >>730 構文解析だけじゃなくて、実行機の話してるんじゃないの?
732 名前:デフォルトの名無しさん [04/07/14 01:26] すいませんyacc/lex初心者の質問です。 WIN XPのコンソールから GNUのFLEXとBISONとボーランドのBcc32でコンパイルしてるのですが bisonとflexは通過するのですが 最後のCコンパイラのリンク時に"yyllocが定義されてない"というエラーが出てしまいます。 bison.simpleとbison.hairを見てもよくわからないので なにがまずいのでしょうか?
733 名前:デフォルトの名無しさん mailto:sage [04/07/14 01:39] >実行機 ってなんじゃらほい?
734 名前:デフォルトの名無しさん mailto:sage [04/07/14 11:23] >>728 『インタプリタ進化論』なんかいいのでは。スクリプトに特化した内容ってわけでもないけど。
735 名前:デフォルトの名無しさん [04/07/14 19:49] このスレでよく出てくるyaccやlexってのはソフトウェアなの? それともライブラリの類? で、実際にはどのようなことをするものなの?
736 名前:デフォルトの名無しさん mailto:sage [04/07/14 20:00] >>735 ttp://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html
737 名前:735 [04/07/14 21:00] つまり、字句解析や構文解析をするソフトウェアね。 コンパイラにおけるそれらの処理を外部のソフトウェアに 頼ると言うのは有りかね?
738 名前:デフォルトの名無しさん mailto:sage [04/07/14 21:02] >>737 何を言ってるの?
739 名前:ほんたま [04/07/14 21:26] おみゃ〜らよ、おれのスリムドカンはある意味コンパイラよ。 スリムドカンはおれのページにあるから見ちみれ? hp.vector.co.jp/authors/VA015412/ おみゃ〜らよ、おれはいまリソースエディタをつくってるのよ。 スリムドカンに装備させるためよ。 おみゃ〜らよ、コンパイラをつくるのはいいが、リソースエディタのないコンパイラはコンパイラとはいわんぞ! 自分じわかるかな?
740 名前:デフォルトの名無しさん mailto:sage [04/07/15 00:53] >>737 字句解析や構文解析をするソースコードを生成してくれるソフト これ以上は自分で調べてくれ
741 名前:デフォルトの名無しさん mailto:sage [04/07/15 04:40] >>735 あなた、最高に頭悪そうですよ?
742 名前:デフォルトの名無しさん [04/07/15 18:37] 昔、OL進化論っていうのがあったなぁ〜 ちょっと思い出したw
743 名前:デフォルトの名無しさん mailto:sage [04/07/15 19:34] インタプリタ進化論って、絶版じゃなかったっけ? 読みやすい本でいい本だと思うけど、 実行環境の話はそれほど無かったような気がします。 とはいっても、字句/構文/意味解析を作るより 実行環境を作るのって、力業でできますしそんなに難しくないと思いますよ。
744 名前:デフォルトの名無しさん mailto:sage [04/07/15 23:56] My VMをレジスタマシンにするかスタックマシンにするか悩む スタックマシンにすると決めた、するとbytecodeにするかwordcodeにするかまた悩む スピードの為にwordcodeにするならそもそもレジスタマシンにするべきなのかと悩む 一向に前に進みましぇん
745 名前:ほんたま [04/07/16 00:05] おみゃ〜らよ、おみゃ〜らさーん♪ おりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪ 「Slim de Can」ってすげ〜な〜、イベントドリブンプログラムが作成できるとこまでついに進化したよ。 おりはもう神だね♪どうよ? hp.vector.co.jp/authors/VA015412/
746 名前:デフォルトの名無しさん mailto:sage [04/07/16 01:05] 全部作れ。
747 名前:ほんたま [04/07/16 13:55] おみゃ〜らよ、おみゃ〜らさーん♪ おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。 つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。 おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか? 「Slim de Can」ってすげ〜な〜。 おりはもう神だね♪どうよ? hp.vector.co.jp/authors/VA015412/
748 名前:デフォルトの名無しさん [04/07/16 22:00] コンパイラ作るならBNF記法(拡張)についての理解は必須ですか?
749 名前:デフォルトの名無しさん mailto:sage [04/07/16 22:13] 無くても作れるよ。あった方が楽だけど。
750 名前:デフォルトの名無しさん mailto:sage [04/07/17 00:00] context free grammerについては「理解」という程大変なことはない気がする。 # オートマトンを理解するにはちっと勉強が必要になるが、 # それこそ知らなくても何とかなりそう なおLL(1)文法と属性文法を学んでしまえばりっぱな「コンパイラ」が作れると思う。 # リンカとかアセンブラとかの知識は既習だとして
751 名前:デフォルトの名無しさん [04/07/17 03:09] 言語設計はともかく、コンパイラ設計となったら フロントエンドよりバックエンドのが難しいというか 面白いと思うんだが、どうしてフロントエンドの話しか出ないんだろうか?
752 名前:デフォルトの名無しさん mailto:sage [04/07/17 03:43] たぶん、そこまで行きつかない奴しかこのスレにいないから。
753 名前:デフォルトの名無しさん mailto:sage [04/07/17 09:41] バック部のトピックス ・並列化(ループ,タスク.手続き間解析は必須) ・別名解析(フロー依存はまだ重い) ・SSA(冗長コピーをどう減らす? 別名の扱いも) ・コピー伝播(非常に重要.でも語ることは余りないか) ・部分冗長性削除(やりすぎると性能悪化することも.ライブレンジを考慮) ・CPS(手続き型ではやらんか) ・レジスタ割付け(PowerPCとかなら素直だが,制約のきついCPUだと面倒) ・ソフトウェアパイプライン(最内からやらない手法が最近発表されてた) ・命令スケジューリング(コンパイル時間爆発の主犯) ・SIMD命令やDSP命令の生成(上から下までからむので大変.パターンマッチしかない?)
754 名前:デフォルトの名無しさん [04/07/17 18:50] 本日、佐々政孝氏の「プログラミング言語処理系」という本買いました。 コンパイラについてちゃんと学んでいこうかと思います。
755 名前:デフォルトの名無しさん mailto:sage [04/07/17 19:02] バック部はCにトランスレートする事で済ませちゃってるから、あんまやらないんだよな。 とはいっても、最近の仕事でそういうのをする必要もあったりして 書籍紹介とかやってもらえます?
756 名前:デフォルトの名無しさん mailto:sage [04/07/17 19:07] そういや 21st Century Compilers 読んだ人いる?
757 名前:デフォルトの名無しさん mailto:sage [04/07/17 19:57] あぁ、それね…。2005年11月15日に延びたみたい。_| ̄|○ www.aw-bc.com/catalog/academic/product/0,4096,0321131436,00.html Copyright: 2006ってなってるからもっと延びるかも…
758 名前:デフォルトの名無しさん [04/07/17 20:18] バックエンド「も」それなりに解説している本としては龍本はもちろんのこと、appel本や中田本がありますね。 龍本がバックエンド概要集だとすれば、 appel本が実践本、中田本が理論本といった感じでしょうか? バックエンドオンリーな変り種としては Robert Morgan: Building an Optimizing Compiler (ISBN 1-55558-179-X) ってのがあります。こいつは本当にバックエンドしか書いていません。
759 名前:デフォルトの名無しさん [04/07/17 20:21] いまだに龍本なの? 進歩ないね。
760 名前:デフォルトの名無しさん mailto:sage [04/07/17 20:54] 何でそんなに詳しいのに新たな言語を作ろうとしないの?
761 名前:デフォルトの名無しさん mailto:sage [04/07/17 20:57] >>760 何でそんな労力割かなきゃならぬ?
762 名前:デフォルトの名無しさん mailto:sage [04/07/17 21:05] >>757 がぁん。評判よければ夏休みにでも読もうと思ってたんだが。
763 名前:デフォルトの名無しさん mailto:sage [04/07/17 21:17] 目を通すだけで満足だから何も作らんのだろうな
764 名前:デフォルトの名無しさん mailto:sage [04/07/17 21:21] バックエンドまで作りこんだ言語を書いても、それで食ってける人はごく少数だし。 理屈を理解して普段のプログラミングに生かせれば、それで良いかと。
765 名前:デフォルトの名無しさん mailto:sage [04/07/17 21:36] >>761 本当はコンパイラの原理とかよく分かって無いんだよな?
766 名前:デフォルトの名無しさん mailto:sage [04/07/17 22:08] 原理を理解→新しい言語、でもあるまいに
767 名前:デフォルトの名無しさん mailto:sage [04/07/17 23:31] >>760 一番多い需要は新しい言語の作成ではなく、特定分野特化物だからだよ 趣味の人は確かに新しい言語って事になるんだろうけどね。
768 名前:デフォルトの名無しさん mailto:sage [04/07/18 00:44] 言語ビジネスは死々累々とはMatz氏の言
769 名前:デフォルトの名無しさん mailto:sage [04/07/18 01:01] >>768 つまり「俺ってば勝ち組w」と主張されたのですね?
770 名前:デフォルトの名無しさん mailto:sage [04/07/18 01:11] >>764 その反対でバックエンドがほとんどのお仕事もあるよ、 特殊なDSPとかの強力オプティマイザ付き簡易言語関係とか。
771 名前:デフォルトの名無しさん [04/07/18 13:04] 割込みすいません、bisonの-v出力で得られる State番号と、もとのソースの行番号を関連づける情報ってどこでしょうか? 同様に、 Rule番号と、もとのソースの行番号を関連づける情報ってどこでしょうか? bisonマニュアルやbison本(といっても古いだけですが)を見ても、載ってませんでした。
772 名前:デフォルトの名無しさん mailto:sage [04/07/18 14:25] >>771 行番号との関連? 別に行番号とは関連しないんじゃない?
773 名前:771 [04/07/18 17:10] どうも、Conflict が発生するようで、いろいろと原因を探ってるんですが、 「State何番が何番とconflictした。」とか出て来るんですが、 具体的にソースのどこがいけないのか場所を探すのに、いつも苦労しているのです。
774 名前:デフォルトの名無しさん [04/07/20 17:56] 構文解析器を作るのに正規表現が必要になりますけど、 正規表現の構文解析ってどうすりゃいいんでしょうか? ものすごく再帰してるんですけど?
775 名前:デフォルトの名無しさん mailto:sage [04/07/20 17:57] 再帰っつーか永久ループですね。
776 名前:デフォルトの名無しさん mailto:sage [04/07/20 18:22] >>774 >構文解析器を作るのに正規表現が必要になりますけど、 無くてもできます
777 名前:デフォルトの名無しさん mailto:sage [04/07/21 00:38] >>774 有限オートマトンでぐぐるか、適当な正規表現ライブラリのソースを読め。
778 名前:デフォルトの名無しさん [04/07/29 19:55] FLEXについて調べているんですが、よくわからないので質問させてください。 UNIXで書かれた字句解析ソース(moto.l)をWindows上で使いたいのですが、 これってWin用のFLEXを使用してmoto.lから、moto.cを作成して それをVisualStudio.Netなんかで、ビルドすればいいんでしょうか? Win用FLEXで吐き出されたmoto.cをビルドしてもエラー出まくりなもので・・・・ なにかうまい方法などあるんですか? (なぜか元の字句解析ソース(moto.l)も一緒にビルドしてしまいエラーになりま す。。。) わかる方がいらっしゃいましたら、 ご教授お願いします。
779 名前:デフォルトの名無しさん mailto:sage [04/07/29 20:01] >>778 なんのエラーが出てます?
780 名前:デフォルトの名無しさん mailto:sage [04/07/29 22:05] なんとなく改行コードの問題?
781 名前:>>778です [04/07/30 11:15] >>779 >>780 レスありがとうございます 改行コードは、LFからCR+LF 文字コードEUCからSJIS に変更をかけ、「bison & flex compiler for Windows GUI」を使って コンパイルをかけ、できたCソースを.NET2003でビルドかけました。 一応、エラーは 「Zsscanf:1番目の引数を'unsigned char*'から'const char*'に変換できません」 というのが、大量にでました。 (これは、Zsscanf関数を大量に使用しているんででています。) また、warningとして 「C4244 '=' _W64 int から intに変換しましたデータが失われているかもしれません」 というのが、たいりょうに出ています。 もしよかったら、ソースをお送りしますが・・・ よろしくお願いします。
782 名前:デフォルトの名無しさん mailto:sage [04/07/30 11:54] >>781 そういう場合は、ここに貼り付けて do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
783 名前:> [04/07/30 12:32] >>782 さん こちらにCソースファイルを貼り付けました。 よくわからなかったので、まちがってスレを立ててしまいましたorz do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091157983&rm=50 すみませんが、よろしくお願いします。 これでだめでしたら、FLEXソースも貼り付けますので・・・
784 名前:デフォルトの名無しさん mailto:sage [04/07/30 13:00] >>783 あぅ、上手く行っても、変更点の説明がしにくいと思うので、ソースもよろしこ。 #なんとなく見えてますが、上手く行くかどうかは不明。
785 名前:> [04/07/30 13:09] >>784 さん 元のFLEXソースを do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091157983&rm=50 においておきます
786 名前:784じゃないけど mailto:sage [04/07/30 13:35] yytext は YY_CHAR* 型で,これは unsigned char * の typedef になっている. Zsscanf は Zsscanf(const char*, ...) と定義されている. Zsscanf(yytext, ....) というように呼び出しをしたい. ということで 1. Zsscanf の第1引数の型を unsigned char * にするか 2. Zsscanf の呼び出し時に毎回キャストするか のどっちかで対処できるんじゃないかと思う.
787 名前:デフォルトの名無しさん mailto:sage [04/07/30 13:55] 3. コンパイラのcharをunsignedにするオプションを指定する
788 名前:ありがとうございます!! [04/07/30 14:18] みなさん ありがとうございます。 とりあえず>>786 さんの 「1. Zsscanf の第1引数の型を unsigned char * にするか」で 対応し、エラーを回避させました。 それともう一つ基本的な質問ですが、 この作成されたCソースファイルは、 どのように動作させればいいのでしょうか? ライブラリとして動作させる場合、 どの関数をよべばよろしいのでしょうか? (main関数を作成し、それから呼ぶのもどうすればいいのでしょうか?) すみませんが、ご教授お願いします。
789 名前:デフォルトの名無しさん mailto:sage [04/07/30 14:23] >>785 とりあえず、こちらはCygwinのflexしかないので、それでのやり方を説明しておきます。 まず、この部分 int nmatch = 0; int len; const char *base; char buf[255]; va_list ap; va_start(ap, fmt); char skipflag; va_start(ap, fmt) の後に char skipflag がありますが、これはC言語の構文として許されません。 以下のように書きます。 char skipflag; int nmatch = 0; int len; const char *base; char buf[255]; va_list ap; va_start(ap, fmt); コンパイル方法 www.cygwin.com/ より "Install or update now!" をクリックして実行してください。 あとはメッセージにしたがって、インストールするのですが、パッケージの選択のところで flex を入れておく事。 flexの入っているフォルダーにパスを通したら、 flex flex_test.l cl flex_test.c 以上です、 あと、_yywrap _yylex はちゃんと定義して置いてください。 出力結果をC++としてコンパイルしたいのであれば、786氏の意見を参考すれば良いかと思います。
790 名前:デフォルトの名無しさん mailto:sage [04/07/30 14:35] >>788 yylexを呼び出します。 そのあたりは初歩の初歩部分なので、適当に参考書でも買ってきて調べてみるとよいでしょう。 入出力の特化は結構ややこしいので・・・
791 名前:>>778です [04/07/30 14:53] みなさん いろいろ教えてくださってありがとうございます。。。 >>790 さん yylex()を呼び出すというのまでは、調べたのですが これを呼び出すとDOS窓で入力待ちなのかどうかは、わかりませんが 止まったままになってしまします。 いろんなサンプルを見てみたら 単に return yylex(); としているだけなのが、あったので このように書いていたのですが・・・・ こういう呼び出し方ではいけないのでしょうか? 何度も何度もすみませんが、 ご教授お願いします。
792 名前:デフォルトの名無しさん mailto:sage [04/07/30 14:59] >>791 一番簡単な方法は yyin = fopen( ... ) ; として yylex() を呼び出します。
793 名前:>>778です [04/07/30 15:18] >>792 さん ファイルからの読み込みではなく 指定された文字列を受け取って それを変換かけてから、変換後の文字列を 返すというようなプログラムを組みたいのです。 yytextに指定文字列を入れてから yylex()を呼び出せばよろしいのでしょうか? (どこかのサンプルでこのような形のものがあったのですが・・・)
794 名前:デフォルトの名無しさん mailto:sage [04/07/30 15:22] >>793 ちがいまーす!!(^^; 実は貴方のやりたい事は、書き始めると結構ヘビーです。 素直にflexの本を買ったほうが良いかと・・・・ どうしても買いたくなげは YY_INPUT マクロを気合で読んでみるとか?
795 名前:> [04/07/30 15:32] >>794 さん では、入力したい文字列を 一度ファイルに落としてから 再度、yyin = fopen( ... ) ; で読み込むという方法だと まずいでしょうか?
796 名前:デフォルトの名無しさん mailto:sage [04/07/30 15:36] >>795 それで問題がなければ、それでも良いかと・・・・
797 名前:>>778です [04/07/30 16:27] 今のサンプルFLEXプログラムは「H16/7/16」を「平成16年7月16日」に 変換するものなんですが、ファイルに「H16/7/16」を書き込み、保存してから yyin = fopen( ... ) ; として yylex() を呼び出すと、「ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ」などと 文字化けが出てしまい、途中で終了してしまいます。 これって何が原因があるのでしょうか?
798 名前:デフォルトの名無しさん mailto:sage [04/07/30 17:17] cygwin でやるんだったら、ソースファイルとテスト用入力ファイルは EUC にしておく。lex(flex) はマルチバイト文字をマルチバイト文字として扱わないからDIGIT [0123456789] の書き方だとダメ。 DIGIT (0|1|2|3|4|5|6|7|8|9) だと動くみたい。
799 名前:デフォルトの名無しさん [04/07/31 00:18] すいませんが、bison.output の見方を解説しているページとか ご存知ありませんか?
800 名前:デフォルトの名無しさん mailto:sage [04/07/31 01:14] >>799 見方を理解しようとしないで、LR解析をある程度理解した方 が良いと思うよ。 そうするとbison.outputの意味が分かるようになる。
801 名前:799 [04/07/31 22:52] LR解析を理解するための、書籍とかありますか?
802 名前:デフォルトの名無しさん mailto:sage [04/07/31 22:54] はじめてのLR
803 名前:デフォルトの名無しさん [04/07/31 22:54] 1つの先読みだけしか許されないというのは、かなり不自由かも。 LR(1)を完璧に実装した yacc もどきってご存知ないですか?
804 名前:800 mailto:sage [04/08/01 00:44] 800ゴット >>799 =801 コンパイラ系の書籍ならば、大抵構文解析の説明はあるでしょ。 手元の本だと『ドラゴンブック』と『コンパイラの理論と実現』と 『コンパイラ(昭昇堂)』にLR解析の話が書いてある。 >>803 知らないけど、あまり不自由を感じたこと無いな>先読み1 たいしたもの作ってないからかな。
805 名前:デフォルトの名無しさん mailto:sage [04/08/01 01:08] Catalog of Free Compilers and Interpreters. www.idiom.com/free-compilers/
806 名前:デフォルトの名無しさん mailto:sage [04/08/01 02:53] >>803 LLだけとboost::splitを使ってみるとか。 boost.cppll.jp/HEAD/libs/spirit/index.html でも、文法を変えたほうがいいかもね LALR(1)の鬼畜パーススピードを捨てるのはもったいないべ。
807 名前:デフォルトの名無しさん mailto:sage [04/08/01 03:41] LR LL LALR ってなんの略? (1) ってのは1つ先見るってことでよい?
808 名前:デフォルトの名無しさん mailto:sage [04/08/01 04:04] manの番号
809 名前:デフォルトの名無しさん mailto:sage [04/08/01 06:21] >>807 Lonely Rotary Lonely Lolita Lolita and Lonely Rotary
810 名前:デフォルトの名無しさん mailto:sage [04/08/01 12:50] >>807 LR:左から読んで右から導出 LL:左から読んで左から導出 LALR:ルックアヘッド付きLR
811 名前:デフォルトの名無しさん mailto:sage [04/08/01 12:54] 【LR】Left-to-right scanning, Right-most derivation in reverse 【SLR】Simple LR 【LALR】LookAhead LR 括弧内は先読みのこと
812 名前:デフォルトの名無しさん [04/08/01 15:47] LALR(3) ぐらい欲しい。
813 名前:デフォルトの名無しさん mailto:sage [04/08/01 15:57] >>812 探せば GLR 使えるパーサジェネレータもあるぞ。
814 名前:デフォルトの名無しさん mailto:sage [04/08/01 16:49] >>812 漏れはむしろ「欲しい例」を出して欲しい。
815 名前:デフォルトの名無しさん mailto:sage [04/08/01 18:10] 世の中LALR(1)が圧倒的な主流。 それ以外はただの学問的な研究対象か趣味。 まぁ、炉利趣味と同レベルw
816 名前:デフォルトの名無しさん mailto:sage [04/08/01 18:11] DelphiはLALRじゃないのでは?
817 名前:デフォルトの名無しさん mailto:sage [04/08/01 18:40] >>815 C++ は LALR(1) に収まらないワケだが。
818 名前:デフォルトの名無しさん [04/08/01 21:49] >>817 それは書き方が悪いからでしょ? あんなもん、書こうとおもえばいくらでも当てはめられる。 (と思う。)
819 名前:デフォルトの名無しさん mailto:sage [04/08/01 21:59] 俺はめんどくさいから再起下降でいいよ
820 名前:デフォルトの名無しさん mailto:sage [04/08/01 22:38] 俺は再帰降下でいいや
821 名前:デフォルトの名無しさん mailto:sage [04/08/01 22:40] 抗菌加工でいいや
822 名前:>>778です [04/08/02 15:41] お礼が遅れましてもうしわけございません。 ありがとうございました。 >>794 さんがおっしゃっていた YY_INPUT のサンプルをいろいろ 探したのですが、これの他にもDOS窓から入力された文字列を 変換するなんていうマクロなどありますでしょうか?
823 名前:デフォルトの名無しさん mailto:sage [04/08/02 16:56] >>822 YY_INPUTのサンプルって例えば何? サンプルとかじゃなくて、実際のflexが生成するYY_INPUTマクロを見た方がいいよ。 さらにlexの実装によっては、どう工夫してもお望みのことができないもの もあるから、「文字列から入力」っていうのは可搬性の面ではよくない。 とりあえず、flexだったらYY_INPUTを定義し直せばOK YY_INPUTってのは YY_INPUT(buffer, result, bufsize) buffer:文字列を格納するバッファ result:実際に読み込んだ長さ bufsize:バッファの大きさ で、デフォルトではFILE *yyinから読むようになってるはずだから、それを 君が解析した文字列から読む(コピーする)コードにすれば良いね。 そのまま他の環境にコピーしても動かない可能性があるので注意。
824 名前:>>778です [04/08/02 17:55] >>823 さん レスありがとうございます。 確かにYY_INPUTは、FILE* yyinを使って処理していますね。 っということは、scanfなどで入力した文字列をYY_INPUT(buffer, result, bufsize) のbufferにコピーしてあげるようなコードを書けばよいということでしょうか? また、違う例として、DBに格納されているデータを取得してきて、 字句変換させるために FILE* yyinならぬextern char* yyin_charなるものを作成して まずはそこにDBのデータをコピーし、YY_INPUT内でbufferにyyin_charを コピーしてあげるような動きでよいのでしょうか? また、実際にmain関数などから、YY_INPUTを呼ぶには、直接呼んでも よろしいのでしょうか? 質問攻めでもうしわけございませんが よろしくお願いします。
825 名前:823 mailto:sage [04/08/02 19:18] >>842 おいおい、なんか間違えてるぞ。前半は正しい感じだけど、最後のが…? 質問に答えるのは構わないけど、その前に一つ質問させてくれ。 Q. YY_INPUTマクロとは何でしょうか? (何をするものか、誰が使うものか、どこから使うものか、yylex()と YY_INPUTの関係とかに注目。) これに適切に答えられれば、>>824 にあるような質問は無いと思う。 さらにおまけとして…、YY_UNPUTとは何? (ヒント:flexの生成するlex.yy.cにすべての答えがある。)
826 名前:デフォルトの名無しさん [04/08/02 22:21] 結局 >>815は正しいの?
827 名前:デフォルトの名無しさん [04/08/02 22:22] >>800 質問です。 Lex & Yacc (Nutshell) はいかがでしょうか? これもLRを解説してますか?
828 名前:デフォルトの名無しさん mailto:sage [04/08/02 22:31] >>826 すぐ下で答えが出てるじゃん。
829 名前:800 mailto:sage [04/08/02 22:46] >>827 解説してないね。 でも、典型的なシフト還元衝突などの説明と回避方法の解説はある。 ってかこの本もう絶版じゃない? 手に入るの?
830 名前:デフォルトの名無しさん mailto:sage [04/08/03 17:27] >>791 yyinを指定しないと入力が標準入力になるからそうなるのでしょう
831 名前:デフォルトの名無しさん mailto:sage [04/08/03 17:55] yyworld
832 名前:デフォルトの名無しさん [04/08/06 23:12] >>829 一応あるみたいです。 やはり、ドラゴンを理解しないと shift/reduce & reduce/reduce の衝突を完全回避することは難しいですかね?
833 名前:デフォルトの名無しさん [04/08/06 23:13] 在庫だと思われます。↑
834 名前:デフォルトの名無しさん [04/08/09 23:38] 注文してしまった。
835 名前:デフォルトの名無しさん [04/08/30 00:46] age!
836 名前:デフォルトの名無しさん [04/08/30 14:29] 「コンパイラ構成法」の原田賢一氏の研究室のサイトが見つかりません。 移転したんでしょうか? どなたか、ブックマークつけてらっしゃる方います? コンパイラ構成法のソースコードをゲットしたいんですが。
837 名前:デフォルトの名無しさん mailto:sage [04/09/01 10:01] う〜ん。名前空間の実装法がわからん。 だれか、参考になるサイトか書籍、知らないか? クラス定義と同じ方法で良いのかなぁ?
838 名前:デフォルトの名無しさん mailto:sage [04/09/01 10:32] >>837 シンボルテーブルのスタックを作ればいいだけじゃないか?
839 名前:デフォルトの名無しさん mailto:sage [04/09/01 13:55] >>838 >シンボルテーブルのスタックを作ればいいだけじゃないか? それってディスプレイ・・・・・だよねぇ。 ブロックを開くときに名前を覚えておくようにするんだろうか?
840 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:40] 例えばC++には複数の名前空間があってややこしい キーワード 演算子 プリプロセッサ 型 変数 namespace これらは関係を持ったりするしね まあプリプロセッサを除いて基本はみな同じだけど
841 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:42] 名前空間は 関数 namespace クラス だけじゃないのか?
842 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:46] ::、using、export、importが絡むとさらに複雑になる
843 名前:デフォルトの名無しさん mailto:sage [04/09/01 19:57] :: using は簡単 export importはどうだろ
844 名前:デフォルトの名無しさん mailto:sage [04/09/01 20:24] >>840 何を持って基本というか知らんが、実装しようと思うと namespace は深いぞ。 ADL と関数テンプレートとか。
845 名前:デフォルトの名無しさん mailto:sage [04/09/03 18:29] 所詮 namespace は、バカ避けの機能。 優秀なコンパイラ屋が血反吐を吐きながら実装するものの、 それによって実行速度が向上する訳も無く・・・ そもそも優秀なプログラマならば、最初から namespace など 必要としない確固としたコーディングスタイルを身に着けている。 そしてバカなプログラマは、せっかく実装してもらった機能の 使い方自体が分からない。バカは所詮バカ。 namespace って、一体何の為にあるんだろう・・・
846 名前:デフォルトの名無しさん mailto:sage [04/09/03 18:50] ↑ホームラン級のバカ
847 名前:デフォルトの名無しさん mailto:sage [04/09/03 19:24] 所詮 型 は、バカ避けの機能。 優秀なコンパイラ屋が血反吐を吐きながら実装するものの、 それによって実行速度が向上する訳も無く・・・ そもそも優秀なプログラマならば、最初から 型 など 必要としない確固としたコーディングスタイルを身に着けている。 そしてバカなプログラマは、せっかく実装してもらった機能の 使い方自体が分からない。バカは所詮バカ。 型 って、一体何の為にあるんだろう・・・
848 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:04] ダウト。残念ながら、型によって実行速度は上がるんだよ。
849 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:15] いくらなんでも型は重要だろう。
850 名前:デフォルトの名無しさん mailto:sage [04/09/03 20:16] >>845 評価尺度が実行速度だけとは……。1960 年代の人間ですかい?
851 名前:デフォルトの名無しさん mailto:sage [04/09/03 21:23] 60年代だったら消費メモリも重要だな。
852 名前:デフォルトの名無しさん [04/09/04 01:00] 所詮「コンパイラ・スクリプトエンジン」相談室 は、バカ避けのスレ。 優秀なプログラマが血反吐を吐きながら回答するものの、 それによって理解が向上する訳も無く・・・ そもそも優秀なプログラマならば、最初からこのスレ など 必要としない確固とした技術を身に着けている。 そしてバカなプログラマは、せっかく回答してもらった説明の 内容自体が分からない。バカは所詮バカ。 このスレって、一体何の為にあるんだろう・・・
853 名前:デフォルトの名無しさん mailto:sage [04/09/04 01:01] >>852 ワラタ
854 名前:マイク ◆yrBrqfF1Ew mailto:sage [04/09/04 01:22] namespaceは最高だな。 感動もんだ。
855 名前:デフォルトの名無しさん mailto:sage [04/09/04 11:21] >>852 無理してまで回答は僕もしないし、他の人もしてないんじゃない。 コンパイラやスクリプトを作ろうという人口は少ないから過疎なのは仕方が無いが 僕は日ごろから巡回しているし、このスレ向きの質問書けば回答は帰ってくるよ。 もちろん僕もクレクレ君とOO厨房の言語論争的な話題は放置してるけどね。;-P キミには分らないかもしれないが機能しいてない掲示板ではないよ、 進行が遅いに加えて近頃アホっぽい話題が充満しているだけだ。
856 名前:デフォルトの名無しさん mailto:age [04/09/04 12:52] >>855 ( д ) ゚ ゚
857 名前:デフォルトの名無しさん mailto:sage [04/09/04 16:13] ひさびさにコピペにマジレス見た・・・
858 名前:デフォルトの名無しさん mailto:sage [04/09/04 16:48] 型の実装について教えてください。 現在 int のみのコンパイラは作れたのですが float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて 実行するときに int か float か if で判断するしか無いのでしょうか? 2つならまだしも double とか char を追加するとなると代入するとき等の型判定で 組み合わせの爆発が起きそうなのですがなにか良い方法はないでしょうか? 速度的に。
859 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:02] テーブル作るか int float を別文法にしてしまうか…… てか、こんな事は自分で考えろ。
860 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:07] >>858 >現在 int のみのコンパイラは作れたのですが >float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて >実行するときに int か float か if で判断するしか無いのでしょうか? って、そんなのコンパイル出来たって言えないやん。。。 何の為の型なのさ?
861 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:11] 変数に型情報があってコンパイラを作っているのなら、 コンパイルの時点で型にあったコードを生成するだけだろ。 実行時じゃなくて。
862 名前:デフォルトの名無しさん mailto:sage [04/09/04 17:12] >>860 ハァ
863 名前:デフォルトの名無しさん mailto:sage [04/09/04 18:27] >>860 バカ避けの機能
864 名前:デフォルトの名無しさん mailto:sage [04/09/04 18:59] >>859-861 おぼろげながら自分の間違いが分かってきました。 どうもです。 もう少し考えてみます。
865 名前:デフォルトの名無しさん mailto:sage [04/09/04 20:09] >>858 実行時に型チェックするかコンパイル時に型チェックするかは、言語の設計に 大きく関わってくるけど、まぁどっちでも良い。 コンパイル時に型チェックしたければ、たとえば Yacc 風に書くと IDENT '=' experssion: { // まず IDENT が変数名であることを確認 // 次に experssion の型が IDENT の型に変換できることを確認 // 型変換して代入するコードを生成 } ; ってな感じ。型変換判定は素直に実装すると型の数の 2 乗のオーダーで増えるが、 テーブルにでも書いておけば大した手間ではない。ベタに if - else とかで書くと死ぬ。
866 名前:デフォルトの名無しさん [04/09/04 21:46] YACC はバカ避けのソフト。
867 名前:デフォルトの名無しさん mailto:sage [04/09/04 22:46] 作ってて楽しけりゃなんだっていい
868 名前:デフォルトの名無しさん mailto:sage [04/09/05 06:46] ( ゚д゚)、ペッ
869 名前:デフォルトの名無しさん mailto:sage [04/09/05 15:32] 型についてはシンボルテーブルで管理すれば良いでしょ。 シンボル表のエントリに型情報をもたせ、それが基本型を ポイントすることで、個々のシンボルの型を表現します。 struct や class などの基本型をまとめた型を作るときも シンボル表にそれらの新しい型のエントリを作って、基本型を リスト状にポイントしていけばよいです。
870 名前:デフォルトの名無しさん [04/09/05 17:16] 所詮 lex は、バカ避けのソフト。 (以下ry
871 名前:デフォルトの名無しさん mailto:sage [04/09/05 17:47] >>855 wrota
872 名前:デフォルトの名無しさん mailto:sage [04/09/05 19:51] >>870-871 意味の無いレスいれるの止めてくんない、近頃こんなレスばっかりで 前後の見通しが悪くてかなわないんだよ、邪魔だから適当な言語死滅スレにでもいってくれ。
873 名前:デフォルトの名無しさん mailto:sage [04/09/05 20:08] その発言は結局荒れるもとになるよ。 そして、大量に無駄な情報のなかから有用なものを抜き出すのが2chの利用法だと思う。
874 名前:デフォルトの名無しさん mailto:sage [04/09/05 20:12] 過疎スレでやってくれるなよなとは思う
875 名前:デフォルトの名無しさん mailto:sage [04/09/07 17:20] 855=872
876 名前:デフォルトの名無しさん [04/09/13 23:46:35] >>872 お前のレスこそ余計。
877 名前:デフォルトの名無しさん [04/09/13 23:47:49] >>872 wrota
878 名前:デフォルトの名無しさん mailto:sage [04/09/14 18:08:01] 876=877 wrota書くのに一分もかかってんじゃねーよ。
879 名前:デフォルトの名無しさん [04/09/14 23:04:15] >>878 != だが何か?
880 名前:デフォルトの名無しさん mailto:sage [04/09/14 23:09:55] 3日後 870 名前:デフォルトの名無しさん 投稿日:あぼーん あぼーん 871 名前:デフォルトの名無しさん 投稿日:あぼーん あぼーん 872 名前:デフォルトの名無しさん 投稿日:あぼーん あぼーん 〜略〜 879 名前:デフォルトの名無しさん 投稿日:あぼーん あぼーん 880 名前:デフォルトの名無しさん 投稿日:あぼーん あぼーん 何のためのスレなんだか
881 名前:デフォルトの名無しさん mailto:sage [04/09/14 23:28:47] なんか恐ろしく自己中なヤツがいるようですが…
882 名前:デフォルトの名無しさん [04/09/15 00:36:49] 名前もあぼーんになるはずだが
883 名前:デフォルトの名無しさん mailto:sage [04/09/15 01:04:33] このスレ869までしか表示されないな。
884 名前:デフォルトの名無しさん [04/09/15 22:07:01] まぁ、もしアボーンされるとしても、 >>880 が最初だろw
885 名前:デフォルトの名無しさん [04/09/20 01:53:27] gccの&&label(Labels as Values)みたいな機能を実現するには、 ラベルは相対じゃなくて、絶対アドレスを取得しなきゃならんのだよね。 void *ptr = &&label; goto *ptr; label: の場合は // void *ptr = &&label; mov DWORD PTR[ebp-04h], label_EA // goto *ptr; mov eax, DWORD PTR[ebp-04h] jmp eax label: こんな感じかな? でも なんで goto ptr; じゃないんだろう? ptrと *ptr は何を指すのか はて。。。
886 名前:デフォルトの名無しさん [04/09/20 03:29:47] できたできた。 どうやら型をvoid*にしたのはgccの気まぐれらしい。 ラベルの型なんてないからねえ。 int ptr = &&label; goto ptr; これだとラベルと区別つかないからvoid*にしただけか。 gccは変な構文ばっかだな。
887 名前:デフォルトの名無しさん mailto:sage [04/09/29 19:53:22] VC++でflex++/bison++でリンカエラー回避できますか?
888 名前:デフォルトの名無しさん [04/09/30 22:56:07] アフォはスルーされるという典型例だなw
889 名前:デフォルトの名無しさん [04/10/05 23:30:22] C++、Javaで同じスクリプトを動かしたいんですが、 自作するしかないでしょうか。 LuaがJavaに対応していれば一番いいんですが。
890 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:42:29] >>889 Schemeとか、どっちでも使える言語も結構ある。
891 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:57:17] そういう意味ではLISP系探すと強いね。 とりあえずS式が読めればなんでもいいわけだし。
892 名前:デフォルトの名無しさん mailto:sage [04/10/06 10:39:52] >>889 TCLとか
893 名前:デフォルトの名無しさん mailto:sage [04/10/06 12:59:19] >>889 JavaSript というか ECMAScript がいいんじゃない? 簡単だし。
894 名前:デフォルトの名無しさん mailto:sage [04/10/06 18:10:12] みんな自分が使っているのを薦めている予感。
895 名前:デフォルトの名無しさん [04/10/06 21:08:06] bashスクリプトがイイと思うよ。
896 名前:889 mailto:sage [04/10/06 21:33:47] どうもです。 その辺りのキーワードを頼りに探してみます。 ありがとうございました。
897 名前:デフォルトの名無しさん mailto:sage [04/10/06 22:50:27] とりあえずECMAScript(の実装)が簡単だという意見が本気でわからん
898 名前:デフォルトの名無しさん mailto:sage [04/10/06 22:53:42] LISPは1000行も書けばそこそこ使えるものができる Javaだともっと短いかも
899 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:04:05] >>897 >C++、Javaで同じスクリプトを動かしたいんですが、 >自作するしかないでしょうか。 って質問だったので、C++とJava での実装が容易に利用できる ECMAScript を勧めました。
900 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:14:01] ECMA Scriptだと、MozillaのSpiderMonkeyとRhinoが 良さそうだね。
901 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:28:14] Pythonは?
902 名前:デフォルトの名無しさん mailto:sage [04/10/06 23:31:24] >>901 ぴちょん(・∀・)!
903 名前:デフォルトの名無しさん mailto:sage [04/10/08 08:18:15] ネイティブコンパイルする処理系を作成中です
904 名前:デフォルトの名無しさん mailto:sage [04/10/09 09:13:05] 完成です
905 名前:デフォルトの名無しさん mailto:sage [04/10/09 14:51:55] じりじり
906 名前:デフォルトの名無しさん mailto:sage [04/10/09 16:05:06] >>904 晒せ
907 名前:デフォルトの名無しさん [04/10/09 22:31:21] 処理系のテストってみなさんどうしてますか 構文、演算子ごとに全パターン網羅できてますか? ある組み合わせで不具合が出る可能性もあるから、 どうがんばっても全部網羅したとはいえませんよね 某スレのD言語なんかろくにテストされてないのがまるわかりですし ある程度テストパターンの自動作成ができればよいのですが そういうアイデアで何かありませんか?
908 名前:デフォルトの名無しさん [04/10/09 23:31:27] 例えばifが構文のキーワードならif + 1のような並びは構文エラーとなるべきですが、 こういうのはyaccを使った場合も含めてエラーとなることは予測できたとしても 実際にエラーになることの検証まではされていないのが現状だと思います。 これは言語処理系に限った話ではないですが、予測の付かないユーザーの ランダムな入力に対し、はたして適切な処理をしているのかどうか?を検証する 確立された方法はあるのでしょうか? test_if_branch() { int x; x = 0; if (x) x = 2; test_assert(x==0); x = 1; if (x) x = 2; test_assert(x==2); x = 0; if (x) x = 2; else x = 3; test_assert(x==3); x = 1; if (x) x = 2; else x = 3; test_assert(x==2); } こんなものを延々と記述していくしかないのでしょうか。
909 名前:デフォルトの名無しさん mailto:sage [04/10/10 15:30:32] >>907 全部網羅って C∞ のテストをしたいって事?
910 名前:デフォルトの名無しさん [04/10/10 19:19:42] 確立した方式など無いと思うが… なので、実績の積み上げしか無いと思われ。
911 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:24:50] >>908 行カバレッジが100%になるようなテストセットを作るとか。
912 名前:デフォルトの名無しさん [04/10/11 21:40:00] Bisonでparseした時、エラーの出た行をしらべるにはどうするの?
913 名前:デフォルトの名無しさん mailto:sage [04/10/12 00:36:07] flexからbisonに渡すTokenに行番号の情報を入れといて、エラー発生時に取り出して使う、 でいいんじゃない?
914 名前:912 mailto:sage [04/10/12 23:08:03] >>913 どうもです、flexのhelpみてたらoptionでありました
915 名前:デフォルトの名無しさん [04/10/13 21:00:24] >>914 それはflexの中だけだろ? bisonとは微妙にずれる場合も多い。 >>913 が王道かも。
916 名前:デフォルトの名無しさん mailto:sage [04/10/15 20:56:20] DLLの関数呼び出しって、参照が一回挟まると思うんだけど、 ループで何べんも呼ぶと普通の関数呼び出しよりパフォーマンスに影響出る? 自分の処理系では参照をはさまない様に(つまりLoadLibraryと同じ方式) してるけどいまいち差がわからない。 それよりも配置情報テーブルのサイズ減らした方が得なのかなと思ったり。
917 名前:デフォルトの名無しさん mailto:sage [04/10/15 22:32:51] >>916 間接参照になる分だけ、パフォーマンスは落ちる。でも関数内部が 一行だけとかでない限り、あまり気にしないで良いと思うぞ。 とりあえず計ってみたら?
918 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:20:18] >>917 コンテキスト切り替えとか食らうと凄く影響するけど、 間接参照が一個増えた程度ではパフォーマンスにそれほど影響しないような… 昔、C++ で virtual ありと無しのメンバ関数で速度測ったら virtual ありの方が速くてびっくりした事もあるし。
919 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:38:42] それはお前の計り方が間違ってただけだろう。
920 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:52:11] >>919 誤差で逆転しただけかもしれんがね。 っつか、測定前から virtualありの方が遅いと決め付けてるなら測定する意味が無いような。
921 名前:デフォルトの名無しさん mailto:sage [04/10/16 11:58:21] >>920 その測定ソース、どんな感じに作ったのか晒してみ。
922 名前:デフォルトの名無しさん mailto:sage [04/10/16 12:14:42] >>921 virtualありの関数を持つクラスとなしの関数を持つクラス作って ループでn回関数を呼び出す、ループ前とループ後の時間から かかった時間を割り出す普通のマイクロベンチだったと思うが。 関数の中身は空だったか、軽い計算させてたかは覚えてない。 あとはアセンブラの出力を見て最適化で関数呼び出しが削除されてない事と virtualありの方は間接参照を介している事を確認した。
923 名前:デフォルトの名無しさん [04/10/16 13:49:08] まぁ、システムをスタティックリンクにしてからだな
924 名前:デフォルトの名無しさん mailto:sage [04/10/16 14:15:49] >>923 それは >>916-922 と関係あるのか?
925 名前:デフォルトの名無しさん mailto:sage [04/10/28 21:26:06] 日経ソフトウェアの推薦書籍コーナーで、中田さんの本が2冊あげられていた。 取り上げていた人はどちらもすごい方なので、ちと読んでみようかなという気が沸き起こった。
926 名前:925 mailto:sage [04/10/28 21:40:42] それにしても\10000を超えるって、やっぱり高い。 コンパイラの構成と最適化 中田 育男 (著) www.amazon.co.jp/exec/obidos/ASIN/4254121393/
927 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:03:22] >>926 ドラゴンブックより良い?
928 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:10:24] >>927 ドラゴンブックよりも内容が新しいらしい。
929 名前:デフォルトの名無しさん mailto:sage [04/10/28 22:19:39] >>927 かなり難解ですよ。 ドラゴンブックとかプログラミング言語処理系を読んで それでも物足りない人向け。
930 名前:927 mailto:sage [04/10/28 22:43:04] 読んでみたくなったけど、高いなあ…
931 名前:デフォルトの名無しさん mailto:sage [04/10/28 23:07:51] そもそも「最適化」をタイトルに冠してる時点でかなりのレベルが予想されるわけだが... < 中田本 それにしてもドラゴンブックの改訂版(に当たる本),いつ出るんでしょうね...
932 名前:デフォルトの名無しさん mailto:sage [04/10/28 23:14:58] >>926 ドラゴンブック揃えるより安いじゃん。
933 名前:デフォルトの名無しさん mailto:sage [04/10/29 18:29:03] >>931 もう出たんじゃね? ttp://www.amazon.co.jp/exec/obidos/ASIN/0321131436/ ペーパーバック版は来年らしい。 ttp://www.amazon.co.jp/exec/obidos/ASIN/0321210913/
934 名前:デフォルトの名無しさん mailto:sage [04/10/30 00:24:51] >>933 「この商品を予約注文する」と表示されたから、まだ出てないのかも…待ちくたびれたよ。
935 名前:デフォルトの名無しさん mailto:sage [04/10/30 08:51:24] >>934 うはwwwwwwwwwwwwwww 昨日見たときはショッピングカートに入れるになってたんだがw amazonの罠だったか。
936 名前:デフォルトの名無しさん mailto:sage [04/10/31 00:42:43] i.loveruby.net/ja/rhg/index.html これってどうよ?
937 名前:デフォルトの名無しさん [04/10/31 18:50:33] >>932 そろえるって何? 1つしかないのでは?
938 名前:デフォルトの名無しさん mailto:sage [04/10/31 19:00:25] >>937 お前、現物見た事あるのか?
939 名前:デフォルトの名無しさん mailto:sage [04/10/31 19:15:08] >>938 www.amazon.com/exec/obidos/tg/detail/-/0201100886/ 洋書の方は全1巻みたいです。
940 名前:デフォルトの名無しさん mailto:sage [04/10/31 19:56:06] 揃えるといったら、グリーンとレッドでは?
941 名前:デフォルトの名無しさん mailto:sage [04/10/31 20:39:14] ポケモンみたい
942 名前:デフォルトの名無しさん mailto:sage [04/10/31 20:39:42] 21st Century Compilersが待てない人は↓がオススメ。 Modern Compiler Design / John Wiley & Sons, ltd Dic Grune / Henri E. Bal / Geriel J. H. Jacobs / Koen G. Langendoen 実装本ではなくアルゴリズム本。 ある程度のコンパイラ実装経験がある人なら買って損はないと思います。 私は「コンパイラ構成法」→「プログラミング言語処理系」→本書、の順で 学んできましたが、頭の中がすっきりまとまって、今の私にちょうど良い レベルだと思います。アルゴリズムがスードウ・コードで書かれているので 最初はちょっと戸惑いましたが、すぐに慣れるでしょう。 私の英語レベルでも、見開きに知らなかったり忘れていたりする単語が、 ひとつあるかないか、といった程度なので本書を読み進めるのは、それほど 困難ではありません。 ちなみに私の英語遍歴は、「Grammar in Use Basic/Intermediateを一通りやる」→ 「Duo 3.0丸暗記」→「TOFELテスト 英単語3800のランク3を暗記中」と いったところ。それほど高い英語力がなくても大丈夫でしょう。
943 名前:デフォルトの名無しさん mailto:sage [04/10/31 21:07:52] >>942 コンパイラの勉強をする前、した後とでなにか大きく変わったことはありますか?
944 名前:デフォルトの名無しさん mailto:sage [04/10/31 22:18:01] >>942 紹介を少しみたところ、コンパイラの(可能な限りの)自動生成に力点を置いてるようですが、 その辺りどうでしたか?
945 名前:デフォルトの名無しさん mailto:sage [04/10/31 22:18:53] >>942 pseudo codeを「スードウ・コード」と書かれているので戸惑いました。
946 名前:デフォルトの名無しさん mailto:sage [04/10/31 22:25:20] >>943 昔俺が本読んで実際うまくいった最適化と言える物は せいぜい定数畳み込みと覗き窓ぐらいだったな。 頭悪いと「それはそれ、これはこれ」って言葉の意味が実感できるぜ! コンパイラの勉強もいいけどCPUやアセンブラにも詳しくないと 速いコードにはならないぜ。 VMを作るときにも困るぜ?
947 名前:デフォルトの名無しさん [04/11/01 21:36:17] >>938 英語音痴w
948 名前:デフォルトの名無しさん mailto:sage [04/11/02 10:51:27] 次スレには>>936 もリンクに加えておいて下さい
949 名前:デフォルトの名無しさん mailto:sage [04/11/02 13:03:18] >>943 今まで努力するのが面倒で、yaccでやっていましたが、 そんな自分が嫌でコンパイラの勉強を始めました。 その甲斐あって仕事もはかどり、昇進も決まり、彼女も出来ました。 6月には結婚します。これも全てコンパイラの勉強をした成果です。 (27歳・会社員)
950 名前:デフォルトの名無しさん [04/11/02 22:20:28] おれは今まで金無し君だったけど(ry
951 名前:デフォルトの名無しさん mailto:sage [04/11/02 22:22:11] >>950 今ではすっかり能無し君か。
952 名前:デフォルトの名無しさん mailto:sage [04/11/02 23:44:04] コンパイラの勉強をしたら負け(ry
953 名前:デフォルトの名無しさん [04/11/03 09:12:07] コンパマダァ-? (・∀・ )っ/凵⌒☆チンチン
954 名前:デフォルトの名無しさん [04/11/03 12:48:01] 最近、パチンコ行っても付きまくりな訳だが、 そういえばコンパイラの勉強し始めてからだったことに気づいた。
955 名前:デフォルトの名無しさん mailto:sage [04/11/03 21:25:51] 俺もコンパイラを勉強していて出てきた数字で ロト6を買ったら2等が当たりました。2000万くらい。
956 名前:デフォルトの名無しさん mailto:sage [04/11/05 18:44:42] じゃあ俺もコンパイラの勉強していたら 株が上がったことにしよう
957 名前:デフォルトの名無しさん mailto:sage [04/11/05 22:11:26] LISP最強
958 名前:sage [04/11/06 05:48:47] スモールコンパイラの制作で学ぶプログラムのしくみ www.cbook24.com/bm_detail.asp?sku=4774121770
959 名前:デフォルトの名無しさん [04/11/06 12:31:17] >>958 おっ、新作ですかね? この分野では珍しい。 しかも、やさしそう あと安い。 すべて型破り!w
960 名前:デフォルトの名無しさん mailto:sage [04/11/06 13:42:32] 宣伝乙 借金でもできたんですか?
961 名前:959 [04/11/06 17:41:07] 著者は有名な方ですか? あと、目次とかはないんでしょうか?
962 名前:デフォルトの名無しさん mailto:sage [04/11/06 18:00:39] >>958 中身もなさそう。
963 名前:ほんたま [04/11/06 20:32:28] おみゃ〜らよ、system32フォルダにあるDLLの関数を呼び出すには、インポートセクションにDLL名と関数名を書き込んでいくだけで、呼び出せるんだが、 VC++で自分でつくったDLLの関数を同じ方法で呼び出そうとすると、「DLL何に○○のエントリーポイントが見つかりません」というメッセージが出て呼び出せないんだ… おみゃ〜らよ、自分でつくったDLLとwindows付属のDLLとは、どっか構造が違うのかな? windows付属のDLLと同じ構造のDLLを自分でつくるにはどうすればいいの? 教えてくだされ〜♪
964 名前:デフォルトの名無しさん mailto:sage [04/11/06 20:57:32] マルチにレス不要
965 名前:デフォルトの名無しさん mailto:sage [04/11/06 23:18:33] どうせstdcallつけてないだけなんだろうな
966 名前:デフォルトの名無しさん mailto:sage [04/11/07 22:44:04] >>958 プログラミング言語処理系とか買ったけどチンプンかんぷんだった俺にはちょうどいい こういう本もっとでてほしいな 安いしな・・・
967 名前:デフォルトの名無しさん mailto:sage [04/11/07 22:46:29] >>966 オレは「UNIX プログラミング環境」が初体験だったが。今はもう流行らんか。
968 名前:デフォルトの名無しさん [04/11/08 01:09:20] >>967 洩れもそれだ!w 但し英語番だけど、
969 名前:デフォルトの名無しさん mailto:sage [04/11/08 19:02:04] >>967 hocのソースにバグがあったと聞いたけど、どこか知ってる?
970 名前:デフォルトの名無しさん mailto:sage [04/11/08 20:01:57] >>969 いろいろあった気がするが、具体的に何だったかは忘れた。
971 名前:ほんたま [04/11/08 23:02:02] おみゃ〜ら〜、サンプルアップしたぞ〜♪ホームページもアップしたぞ〜♪宇宙一すげぞ〜♪ おみゃ〜らよ、なぜ宇宙一すげーかわかるかな? おみゃ〜らよ、おりはな、「Visual C++」で自作したDLLをスリムドカンでつくったプログラムから呼び出すのに成功したんだよ!わかる? おみゃ〜らよ、DLLを呼び出すプログラムを「Visual C++」」でつくるには、Libファイルをリンクに設定したり、ヘッダファイルをインクルードしたりとやるべきことは多いだろ? おみゃ〜らよ、DLLを呼び出すプログラムを「HSP」でつくるにも、やはりDLLの他に「.as」ファイルが必要だよ。 だが、「スリムドカン」の場合、DLLの他には一切何も必要ないんだな〜う〜ん、これが…自分じわかる? つまり「スリムドカン」の場合、DLLさえあればDLLを呼び出すプログラムがビルドできるってわけ♪ おみゃ〜らよ、おりは宇宙一画期的だと思わないか? おみゃ〜らよ、宇宙一すげ〜とわめいたのはそういうことよ♪ おみゃ〜らよ、自分じどうじ?
972 名前:デフォルトの名無しさん [04/11/08 23:50:12] >>969 煽りでなくて、 バグでなく仕様じゃないの? 本だし
973 名前:デフォルトの名無しさん mailto:sage [04/11/09 01:48:39] 次スレまだ〜?
974 名前:デフォルトの名無しさん mailto:sage [04/11/09 17:00:50] >>972 伝聞だけど煽りじゃないよ。 知り合いが「打ちこんで動かしたけどいくつかバグがあった」って。 もちろん打ち間違いの類いじゃなくね。
975 名前:デフォルトの名無しさん mailto:sage [04/11/10 02:14:00] ひょっとして脳内の知り合いですかぁ? そんで俺らにデバッグさせようってことですかぁ?
976 名前:デフォルトの名無しさん mailto:sage [04/11/10 04:01:03] 三銃士で、アトスが友人の身に起こったことだと言って話すけど ダルタニアンはそれは友人ではなくてアトス自身のことなのではない かと考える場面がある。
977 名前:デフォルトの名無しさん mailto:sage [04/11/10 10:24:26] 懐かしー。
978 名前:デフォルトの名無しさん mailto:sage [04/11/10 11:23:03] 俺がhocを動かせなくて困ってるとでも思ったのか?www ほらソース ttp://www.bsddiary.net/d/200012.html#15 5段目の段落をよく読め
979 名前:デフォルトの名無しさん mailto:sage [04/11/10 13:56:46] 脳内の知り合いじゃないのなら どこがどうバグってるのか聞いてくれ。
980 名前:デフォルトの名無しさん mailto:sage [04/11/10 14:31:35] わかったよ知り合いじゃないよ 一読者だよ 直接聞けないからここで聞いたんだよ
981 名前:デフォルトの名無しさん mailto:sage [04/11/10 14:42:49] 誰だお前は
982 名前:デフォルトの名無しさん mailto:sage [04/11/10 18:01:59] オレだよオレ
983 名前:デフォルトの名無しさん mailto:sage [04/11/10 19:27:26] >>958 が気になる。
984 名前:デフォルトの名無しさん mailto:sage [04/11/10 20:09:33] そろそろ新スレの季節だよ。
985 名前:デフォルトの名無しさん mailto:sage [04/11/10 20:47:19] 新テンプラどうしよう
986 名前:デフォルトの名無しさん mailto:sage [04/11/10 22:19:51] LISPスレと統合しよう つーかきみらもっとLISPを知っときなさい
987 名前:デフォルトの名無しさん mailto:sage [04/11/10 22:47:27] Mathematicaマンセー
988 名前:デフォルトの名無しさん [04/11/10 22:47:40] LISP?はぁ? 負け組言語は不要w
989 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:08:54] スレ立てるよ
990 名前:スレ立てられませんでした(テンプレ1) mailto:sage [04/11/10 23:11:46] yaccやlexの使い方やら言語仕様やらの話題。 前スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち) 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ (前スレ) 関連リンクは多分 >>2-8 あたり
991 名前:(テンプレ2) mailto:sage [04/11/10 23:12:21] コンパイラ等を扱ったドキュメント 色々なツールの紹介 catalog.compilertools.net/ コンパイラ関連のリンク集 www.ulis.ac.jp/~nakai/rel_web_compilers.shtml スクリプティング言語資料室(仮) (リンク) www.kt.rim.or.jp/~kbk/ Compiler Construction rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html Compiler Construction (1997) rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html 情報システム工学実験 III コンパイラ・コンパイラ math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html OS/Programming 簡単な C コンパイラ www.csg.is.titech.ac.jp/~chiba/lecture/os/ 正規表現 hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm コンパイラ研究・開発情報の一集積所 compilers.cs.uec.ac.jp/ Links and Selected Readings www.gnu.org/software/gcc/readings.html
992 名前:Intelの資料リンク切れになってる(テンプレ3) mailto:sage [04/11/10 23:13:36] Lex(Flex) Yacc(Bison) 構文解析 UNIX板 yacc & lex pc.2ch.net/test/read.cgi/unix/1031801314/ Lex and YACC primer/HOWTO (邦訳) www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html Turbo Pascal Lex/Yacc www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html Jim Roskind's LALR(1) C++ Grammar www.empathy.com/pccts/roskind.html Flexと Bisonを同時に使う guppy.eng.kagawa-u.ac.jp/~kagawa/1999/SysProg/both.html KITE_ASM (yacc,lex) www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/yacc/ www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/lex/ Cygwin www.cygwin.com/ GNU utilities for Win32 unxutils.sourceforge.net/
993 名前:(4) mailto:sage [04/11/10 23:15:40] その他のパーサジェネレータ等 ANTLR(非yaccのパーサジェネレータ) www.antlr.org/ JavaCC(Java Compiler Compiler) https://javacc.dev.java.net/ village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html CUP & JLEX or CUP & JFlex CUP www.cs.princeton.edu/~appel/modern/java/CUP/why.html JLEX www.cs.princeton.edu/~appel/modern/java/JLex/ JFlex www.jflex.de/ SableCC www.sablecc.org/ ¬<><∪∪ (notavacc)LALR(1) ne.cs.uec.ac.jp/~koto/notavacc/ JavaCCはLL(k)だけど、上のはANTLR以外はLALR(1) でもANTLRはC++なんかにも対応。 boost::spirit(C++のテンプレートでEBNFの構文を模倣) spirit.sourceforge.net/ boost.cppll.jp/HEAD/libs/spirit/index.html (マニュアル日本語化プロジェクト) www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
994 名前:(5) mailto:sage [04/11/10 23:17:53] ガベコレ GC FAQ -- draft www.iecc.com/gclist/GC-faq.html A garbage collector for C and C++ www.hpl.hp.com/personal/Hans_Boehm/gc/ 一般教養としての Garbage Collection www.is.s.u-tokyo.ac.jp/~vu/01/jugyo/processor/process/soft/compilerresume/gc/gc.html Garbage Collection : Algorithms for Automatic Dynamic Memory Management www.amazon.com/exec/obidos/ASIN/0471941484/
995 名前:(6) mailto:sage [04/11/10 23:21:42] 参考書籍 ●コンパイラ 原理・技法・ツール 1&2 www.amazon.co.jp/exec/obidos/ASIN/4781905854/ www.amazon.co.jp/exec/obidos/ASIN/4781905862/ 通称ドラゴンブック。バイブル。 ●コンパイラ構成法 原田 賢一 www.amazon.co.jp/exec/obidos/ASIN/4320029224/ www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード) ●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝 www.amazon.co.jp/exec/obidos/ASIN/4000103458/ 一冊で済ませたい人へ。 ●コンパイラの構成と最適化 中田 育男 www.amazon.co.jp/exec/obidos/ASIN/4254121393/ 最適化がメイン。 ●コンパイラの仕組み 渡邊 坦 www.amazon.co.jp/exec/obidos/ASIN/4254127081/ 薄い奴(185p)を読みたい人に。 ●21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam) ペーパーバック版: www.amazon.co.jp/exec/obidos/ASIN/0321210913/ ハードカバー版: www.amazon.co.jp/exec/obidos/ASIN/0321131436/ ●スモールコンパイラの制作で学ぶプログラムのしくみ www.cbook24.com/bm_detail.asp?sku=4774121770
996 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:26:12] では立ててみるか。
997 名前:(7) mailto:sage [04/11/10 23:26:28] 処理系,スクリプト kikyou.info (吉里吉里というゲームのスクリプト) kikyou.info/ tiny C コンパイラ (C) www.watalab.cs.uec.ac.jp/tinyCabs.html 6809用 Micro C コンパイラ www.axe-inc.co.jp/pds/mc09.html Portable Object Compiler (Obj-C >> C のトランスレータ?) users.pandora.be/stes/compiler.html 自作コンパイラの部屋(PL/1, Pascal等) www.tokumaru.org/ 『Rubyソースコード完全解説』サポートページ i.loveruby.net/ja/rhg/ 『やさしい Lisp の作り方』と『やさしい Java インタプリタ の作り方』見つけた。 Java と C# で実装。 ttp://www.okisoft.co.jp/esc/go.html ttp://www.okisoft.co.jp/esc/go2.html ttp://www.okisoft.co.jp/esc/go3.html ttp://www.okisoft.co.jp/esc/go4.html MSによるPEフォーマット仕様書(日本語) www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
998 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:36:47] 連続投稿規制のため、テンプレ(7)は貼れなかった。 誰か頼みます。
999 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:37:55] 新スレッド 「コンパイラ・スクリプトエンジン」相談室4 pc5.2ch.net/test/read.cgi/tech/1100097050/
1000 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:40:47] ふと思ったのですが、新スレたちました。
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。