- 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
- 16 名前:s mailto:age [02/05/13 18:27]
- yaccableなC++はこちら〜〜
www.computing.surrey.ac.uk/research/dsrg/fog/ ページ中程のCxxSrc.tgz/CxxSrcNT.tgz
- 17 名前:デフォルトの名無しさん [02/05/14 03:56]
- 構文解析アルゴリズムって再帰下降使うのとyacc使うの以外にいいのありませんか?
再帰下降使うと似たような関数いっぱい書かないといけなくなるし gccとかはどんなアルゴリズムなんですか?
- 18 名前:デフォルトの名無しさん [02/05/14 04:00]
- >>17
gccのソースを見ろ。 〜〜〜 終了 〜〜〜
- 19 名前:デフォルトの名無しさん mailto:sage [02/05/14 04:02]
- LL
- 20 名前:デフォルトの名無しさん mailto:sage [02/05/14 07:35]
- gccはyaccだろ。
- 21 名前:デフォルトの名無しさん mailto:sage [02/05/14 12:30]
- >>17
優先順位と結合規則とオペレータの関係をテーブル化する方法がある。 正式名称がなんなのかは知らないけど。 関数のポインタを使う。 似たような関数いっぱい書かないといけないのは同じだけど メンテがし易くなる。それも気持ち程度。
- 22 名前:デフォルトの名無しさん mailto:sage [02/05/14 18:30]
- >>21
演算子順位法かな? 基本的にはループ1つで実装できたので、「似たような関数いっぱい」とは 違うかも。
- 23 名前:デフォルトの名無しさん [02/05/14 18:46]
- ●コンパイラ 原理・技法・ツール 1&2
www.amazon.co.jp/exec/obidos/ASIN/4781905854/ www.amazon.co.jp/exec/obidos/ASIN/4781905862/ 日本語で読める本では、結局これが一番(だと思ってる)。 バイブルだから・・・としり込みしないで読もう! この本がコンパイラ本1冊目であっても十分読める(と思う)。 ●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝 www.amazon.co.jp/exec/obidos/ASIN/4000103458/ 2分冊うざい、という人にはこの本。 ●コンパイラの構成と最適化 中田 育男 www.amazon.co.jp/exec/obidos/ASIN/4254121393/ 悪くはない(偉そう)。この本は最適化がメイン。
- 24 名前:デフォルトの名無しさん [02/05/15 00:25]
- >>23
>●コンパイラ 原理・技法・ツール 1&2 >www.amazon.co.jp/exec/obidos/ASIN/4781905854/ 1巻はオススメしない。 LL(1)とかLR(N)とかはイラン。
- 25 名前:デフォルトの名無しさん [02/05/15 02:00]
- (物理的に)手軽に読みたければ
●コンパイラの仕組み 渡邊 坦 www.amazon.co.jp/exec/obidos/ASIN/4254127081/ という本もある。ただし、サイズの割に値段が手軽じゃない罠
- 26 名前:デフォルトの名無しさん mailto:sage [02/05/15 06:10]
- >>17
再帰下降用のパーサー・ジェネレータもあるよん。
- 27 名前:デフォルトの名無しさん [02/05/15 15:26]
- ANTLRはどうでしょう?
www.antlr.org/
- 28 名前:デフォルトの名無しさん [02/05/21 18:51]
- 前にもあった話題のような気がするのですが、、、。
再帰下降(手書き)とyaccでは、どちらが速いルーチンが作れますか? yaccだという噂ですが、、、。
- 29 名前:デフォルトの名無しさん mailto:sage [02/05/21 18:54]
- yacc
- 30 名前:デフォルトの名無しさん [02/05/21 19:40]
- >28
どう考えてもyaccでしょ。
- 31 名前:デフォルトの名無しさん mailto:sage [02/05/21 20:06]
- 同じ言語を生成する文法なら漸近的な計算量は等しいが、普通は
再帰呼び出し/復帰1回より配列読み出しとgotoの方が速いだろ うな。 ただ、Javaみたいに関数(メソッド)呼び出しが速くて配列操作が 比較的遅い言語だとどうかなあ… まあ、yaccっていうからCに限るのかな。
- 32 名前:デフォルトの名無しさん mailto:sage [02/05/21 20:10]
- LLで表駆動が早め
- 33 名前:デフォルトの名無しさん mailto:sage [02/05/21 20:13]
- >>31
javaccとかいうのがあったはず
- 34 名前:デフォルトの名無しさん mailto:sage [02/05/21 20:20]
- >>33
JavaCCはLL(k)だね。
- 35 名前:デフォルトの名無しさん mailto:sage [02/05/21 21:18]
- >>31
Yet Another Compiler Compilerだから別にCとは限らない。
- 36 名前:デフォルトの名無しさん [02/05/21 23:20]
- WindowsでGUIを利用した仮想マシンをつくるときって、
普通マルチスレッドで設計するでしょうか? もう1つの言語スレでちょっと話題になってたのに、 今は全然違う方向に逝ってるからキケナイ...
- 37 名前:デフォルトの名無しさん [02/05/21 23:22]
- >>36
>GUIを利用した仮想マシン VMなのにGUIに依存するの? Smalltalk見たいなもの?
- 38 名前:デフォルトの名無しさん mailto:sage [02/05/21 23:30]
- >37
いや、スクリプト言語を作りたいんだけど、 言語と作るって言うのもなにかな〜と思って。
- 39 名前:38 mailto:sage [02/05/21 23:33]
- 主旨書き忘れました。
要はHSPみたいなものを作りたいのです。
- 40 名前:デフォルトの名無しさん mailto:sage [02/05/21 23:38]
- >>39
もう少し志を高く持とう。
- 41 名前:38 mailto:sage [02/05/21 23:49]
- 志ってイってもなー
コンソール感覚でGUIアプリ作れたらなとか考えてるだけだしなー 大体作ること自体面白そうだし。
- 42 名前:デフォルトの名無しさん mailto:sage [02/05/21 23:51]
- >>38
>コンソール感覚でGUIアプリ作れたら 意味がわからん。
- 43 名前:デフォルトの名無しさん mailto:sage [02/05/21 23:52]
- >>41
いや、目標(HSP)が引く杉ってこと。
- 44 名前:38 mailto:sage [02/05/22 00:05]
- >42
>>コンソール感覚でGUIアプリ作れたら >意味がわからん。 それもそうだ。 たとえば、 list = file_search("C:\My Documents\*.jpg"); foreach(list, itr){ image = image_load(itr); tile_draw(image, 48, 32); } ぐらいの記述量でフォルダ内の画像一覧を表示するアプリが書けるとか。 いや、たとえだけど。 >43 >いや、目標(HSP)が引く杉ってこと。 そうか? そうか。 うーむ。
- 45 名前:42 mailto:sage [02/05/22 00:12]
- >>44
記述量を問題にするなら、処理系でなく既存の 言語のクラスライブラリを整えた方がいいんでない? でも、HSPでクラスライブラリはやだ・・・
- 46 名前:42 mailto:sage [02/05/22 00:14]
- あ。スクリプトか。
よく見てなかった。スマソ
- 47 名前:デフォルトの名無しさん mailto:sage [02/05/22 00:14]
- >>38
LISPは構文解析いらないから楽だよ
- 48 名前:デフォルトの名無しさん mailto:sage [02/05/22 00:18]
- >>47
いらないってこたあないだろ。 たしかに構文は簡単だけどさ。
- 49 名前:デフォルトの名無しさん [02/05/22 00:19]
- DelphiやVBみたいに貼りつけ→即実行みたいな
環境を作るのってむずかしい?
- 50 名前:デフォルトの名無しさん mailto:sage [02/05/22 00:21]
- >>48
最低限の構文は必要かと。 むちゃくちゃ楽なのは確かだけど。 あとはマクロで構文唐。
- 51 名前:デフォルトの名無しさん mailto:sage [02/05/22 00:31]
- まあ下手な構文作るよりかはLISPのS式にしとく方がましだな。
- 52 名前:38 mailto:sage [02/05/22 00:31]
- >>47
構文解析とかは中田(?)氏の本を読んでできるようにはなりました。 再帰下降法だけだけど。
- 53 名前:デフォルトの名無しさん mailto:sage [02/05/23 03:29]
- >38
FORTHは? と言ってみるテスト。
- 54 名前:MIND mailto:sage [02/05/23 14:09]
- >>53
処理系を作る人にはやさしいけど、応用系を作る人にはどうかな? と呟いてしまう今日この頃。
- 55 名前:デフォルトの名無しさん [02/05/23 14:24]
- まだyaccがはやいなんていってる馬鹿いるね
- 56 名前:デフォルトの名無しさん [02/05/23 15:42]
- >>55
うっさいハゲ
- 57 名前:デフォルトの名無しさん mailto:sage [02/05/23 16:23]
- >>55
パーサー担当は君に決定!
- 58 名前:デフォルトの名無しさん mailto:sage [02/05/23 17:02]
- LISPで決まり。
ところで、GCの無いLISPって理論的に可能でしょうか。
- 59 名前:デフォルトの名無しさん mailto:sage [02/05/23 17:06]
- 可能
無限にメモリを消費し続けてください
- 60 名前:デフォルトの名無しさん [02/05/27 05:40]
- 保守age
- 61 名前:デフォルトの名無しさん [02/05/29 01:31]
- 保守しる!
- 62 名前:デフォルトの名無しさん [02/05/29 23:47]
- もりあがらないね
- 63 名前:デフォルトの名無しさん [02/05/29 23:49]
- どうやって中間言語に翻訳しなおすのですか?
- 64 名前:HELP!あ〜にゃにゃにゃ〜にゃ〜 mailto:あげる [02/05/30 01:04]
- Yaccのソースが見つからないのれす。
- 65 名前:逝って良しの1 [02/05/30 01:15]
- 構文解析器だけは作りたくないです。
- 66 名前:デフォルトの名無しさん mailto:sage [02/05/30 01:24]
- >>65
再帰下降なら楽じゃん。
- 67 名前:デフォルトの名無しさん [02/05/30 03:00]
- >>64
GNU bison ならすぐ見つかるだろ。
- 68 名前:デフォルトの名無しさん mailto:sage [02/05/30 04:39]
- >>64
森氏のkmYaccならVectorで検索すれば有るんじゃない?ソース付きで。 この人のcppとmakeは自分なりに手直しして未だに使わせてもらってる。
- 69 名前:デフォルトの名無しさん [02/05/30 05:06]
- どうしても関数の実装ができません。あとcontinueとbreakも。
- 70 名前:デフォルトの名無しさん mailto:sage [02/05/30 11:08]
- >69
Cマガの2000年5月号をよめばわかります。
- 71 名前:64 mailto:sage [02/05/30 12:29]
- >>67
GNUは生理的に嫌なので。すんまへん。 >>68 ウヲ。すごいでつなこの人。ありがとうございます。
- 72 名前:デフォルトの名無しさん mailto:sage [02/05/31 01:41]
- >>71
そういうやつは生理的に氏ね!
- 73 名前:デフォルトの名無しさん mailto:sage [02/05/31 22:45]
- >>72
GNU のソースが生理的に嫌いだってのは、分からんでもない。あのインデントは 読みたくないよ。(というわけで GNU indent 通して整形してから参照してる俺)
- 74 名前:デフォルトの名無しさん mailto:sage [02/05/31 23:22]
- >>73
むしろライセンスの方じゃないの。
- 75 名前:デフォルトの名無しさん mailto:sage [02/05/31 23:53]
- >>74
73 の皮肉と諧謔を込めた文意を読み取れ。
- 76 名前:デフォルトの名無しさん mailto:sage [02/06/01 00:21]
- 75=73
- 77 名前:デフォルトの名無しさん mailto:sage [02/06/01 04:16]
- >>68
ちなみにこの人、LSI-Cコンパイラの作者な。 yaccもcppもmakeもその一部。
- 78 名前:68 mailto:ssage [02/06/01 13:53]
- ワシは厨房なんで高度な皮肉も
宗教じみたライセンスも理解できんので 避けてるのです。生理的に。用途違うかな。 >>77 普段LSI-C試食版使ってるので、cppで気づきました。 LSI-Cは一人の天才プログラマが作ったって噂があったけど、 本当だったんですな。あこがれます。
- 79 名前:真68 mailto:sage [02/06/01 16:48]
- ↑どうでもいいけど68書いたの俺な。あんた64じゃない?
>>77 知っている。今はLSI JAPANの取締役らしいな。 bisonのジェネレータが出力するソースは見にくくて吐き気がするが、 kmyaccのは綺麗で分かりやすい。実用にも問題無いし、学習用にもお勧め。 俺はbisonから完全に乗り換えたよ。テーブルの小ささに惚れた。
- 80 名前:64 mailto:sage [02/06/01 19:58]
- スマソ回線切って首吊ってきます。
- 81 名前:73 mailto:sage [02/06/03 16:39]
- >>76
はずれ(w >>78 > 宗教じみたライセンスも理解できんので GPL は理解しておいて損はないと思うよ。 俺は GPL の趣旨には賛同しないので、自分が公開するソフトのライセンスは GPL にしない。でも GPL で公開されているソフトには有用なモノも多いし、ライ センスを理解して使えば GPL に汚染されずに旨い部分だけ頂ける。 (ちなみに個人的には BSD、仕事絡みではクローズドな人です)
- 82 名前:デフォルトの名無しさん mailto:sage [02/06/03 17:46]
- >ライセンスを理解して使えば GPL に汚染されずに旨い部分だけ頂ける。
この辺のところを、もう少し詳しく教えて( ゚д゚)ホスィ
- 83 名前:64 mailto:sage [02/06/03 23:01]
- 82に禿尿。readlineとかガリガーリ使っていきたいヨー
- 84 名前:デフォルトの名無しさん mailto: [02/06/04 04:10]
- LL(1)文法の
Fisrt Follow Directorの計算アルゴリズムが良くわからん。 オーム者コンパイラ(中田育男 8刷 p85) 誰かわかりやすく教えてくれ。
- 85 名前:. [02/06/04 04:15]
- www.aa.wakwak.com/~ayaka/cgi-bin/privatetalk/sank.pl
- 86 名前: [02/06/05 01:17]
- >>84
過去ログ。
- 87 名前:デフォルトの名無しさん [02/06/06 23:29]
- ageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 88 名前:デフォルトの名無しさん [02/06/07 11:22]
- 以前、Cで数十行で書かれた小さいBASICインタプリタを見たことあるん
だけど、検索しても、どうしても見つかりませんでした。 知ってる人いますか?
- 89 名前:デフォルトの名無しさん mailto:sage [02/06/07 11:28]
- >>88
7行スレのことか?
- 90 名前:デフォルトの名無しさん mailto:sage [02/06/07 13:20]
- >>88
Expert Cに載ってる奴じゃない? www.ioccc.org/1990/dds.c
- 91 名前:デフォルトの名無しさん mailto:sage [02/06/10 16:08]
- >90
これ、VC6でコンパイル通らないんだけど、何だったらできる?
- 92 名前:デフォルトの名無しさん [02/06/11 00:42]
- C++の構文解析、
struct C { C (f)(); /*Cを返す関数f*/ C(); /*コンストラクタ*/ }; というので、{}のなかの 'C' まで読んだ時点でそれがclass-nameかdeclaratorかどうやって判断しているの? ひとつだけの先読みではわからないですよね。LALR(1)とかいうのとはちがうのですか?
- 93 名前:デフォルトの名無しさん mailto:sage [02/06/11 02:37]
- >>92
www.y-adagio.com/public/reports/mh_inst/1996/19.doc.htm
- 94 名前:デフォルトの名無しさん mailto:sage [02/06/11 02:44]
- >>92
読んだ時点で判断してるわけないと思うが。 そこは意味解析で判断する部分。 構文解析の段階だと C(); は「戻型が省略された関数C」とでも解析されるんだろう。 structの定義('}')が終わった段階で、 初めて意味解析が走ると考えたほうが自然。
- 95 名前:デフォルトの名無しさん mailto:sage [02/06/11 03:48]
- >>94
struct の } 終わってから解析って、そりゃ構文解析でほとんど何もやってない に等しい気が……。struct C の段階で「C」を型名としてシンボルテーブルに登 録しておいて C (f)(); → 識別子 '(' 識別子 ')' '(' 識別子 ')' ';' ぐらいにバラしてスタックに積んでおき、この段階で意味解析に掛けると思う。 構造体の宣言が終わらなくても ';' 単位でばらせば、十分に解析可能だよね。 少なくとも型名やら名前空間やら、必要な情報は事前に出てるわけだし。 (そうでもない?)
- 96 名前:デフォルトの名無しさん mailto:sage [02/06/11 05:05]
- 'C'まで読み込んだ段階では判定できないから
適当な中間の非終端記号を入れて判定を遅延させて、 十分読み込んだところで判定を確定する、という話じゃないの?
- 97 名前:96 mailto:sage [02/06/11 05:07]
- >95 と内容被ってた(鬱)
- 98 名前:92 mailto:sage [02/06/12 00:57]
- とりあえず全部identifierとして読んでおけばいいんですね。
Cの場合、構文解析の段階でtypedefとenumを辞書引きすればよさそう(試してない) だったので、C++もその延長でいけるかとおもっていたのです。 LALR(2)でならそれでもいけるかな?
- 99 名前:デフォルトの名無しさん mailto:sage [02/06/12 14:01]
- >>98
C は型名と変数名は異なる名前空間で定義されるから(型名と重複する変数名 を定義可能)、その方針でやる場合には 型名を読み込んだ → 字句解析側に、次にアルファベット列が来たら identifier を返すように設定 と、構文解析・字句解析での情報のやりとりが必要になるかと。
- 100 名前:92 mailto:sage [02/06/12 23:04]
- >>99
typedef名だけは型名と変数名の両方に登録されるようなので、 typedef t int; int t(); なんてのはエラーにしないといけない(?)のでどっちにしても 意味解析でも構文解析じみたことはしなければいけないみたいですね。
- 101 名前:100 mailto:sage [02/06/12 23:05]
- typedef t int ×
typedef int t ○
- 102 名前:デフォルトの名無しさん [02/06/16 01:17]
- 最適化するのにポインタって邪魔ですか?
- 103 名前:デフォルトの名無しさん mailto:sage [02/06/16 01:21]
- 邪魔。
- 104 名前:デフォルトの名無しさん mailto:sage [02/06/16 01:32]
- っですよねー。
三項になりましたサンクコ
- 105 名前:デフォルトの名無しさん mailto:sage [02/06/16 01:40]
- オブジェクトやメモリを参照することを禁止したポインタなら邪魔にならない。
- 106 名前:デフォルトの名無しさん [02/06/18 03:52]
- 1+a+2 を逆ポーランドで表現した
1a+2+ というデータだけがここに有るとして、これを 3a+ にうまく変形出来ないだろうか。
- 107 名前:デフォルトの名無しさん mailto:sage [02/06/18 04:00]
- >>106
出来る。
- 108 名前:デフォルトの名無しさん mailto:sage [02/06/19 00:19]
- >>106
buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/koubungi.gif の図で言うと * と / が演算子の結合度が同じかつ親子なので、 a を a / d で置き換えてよい。 今考えたんで合ってるかどうか分からんけど。
- 109 名前:age mailto:age [02/06/20 01:05]
- age
- 110 名前:デフォルトの名無しさん [02/06/21 02:17]
- 保守汁
- 111 名前:デフォルトの名無しさん mailto:sage [02/06/24 11:39]
- 昨日LAOXのBOOK館でドラゴンブックの邦訳を買ったDQNを目撃した人はいませんか?
それが私です。 ついでにもう一冊、と、 原田賢一『コンパイラ構成法』共立出版、374頁、1999 を買っちゃいました。こちらはDQNの私でもわかりやすく例を挙げて、 C言語ライクの言語を構築する方法を説明してありました。
- 112 名前:デフォルトの名無しさん mailto:sage [02/06/25 01:16]
- DQN がドラゴンブック買うかよチクショー。
- 113 名前:コンパイラ構成法 mailto:sage [02/06/25 03:49]
- おもわず検索してソースだけget。
- 114 名前:棄教者 ◆witdLTi2 mailto:sage [02/06/25 07:47]
- >>113
あ。ほんとだ。 正誤表とソースがげtできる! カムサハムニダ。
- 115 名前:デフォルトの名無しさん [02/06/30 20:21]
- 保守
- 116 名前:デフォルトの名無しさん mailto:sage [02/07/07 23:12]
- やっと前スレが埋まったね。
|

|