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


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

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



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 あたり

29 名前:デフォルトの名無しさん mailto:sage [03/12/08 00:33]
ahoの発売は来年に持ち越しか

…知らない人がこのレスを見たら意味不明だろうな

30 名前:デフォルトの名無しさん [03/12/08 20:00]
%left と %right の結果をbisonで比べてみても変化なし、
どちらも、正しく ---5 を処理できる。

で、生成されたcソースを見てみたが、なんと(ry


31 名前:デフォルトの名無しさん mailto:sage [03/12/08 22:34]
>>29
それってなんデすか?

32 名前:デフォルトの名無しさん mailto:sage [03/12/09 00:00]
>>31
21st Century Compilers
www.amazon.co.jp/exec/obidos/ASIN/0321131436

Amazon.co.jpによれば
> 発売予定日は 2003/12/15 です。
> ただいま予約受付中です。




33 名前:デフォルトの名無しさん mailto:sage [03/12/09 01:15]
>>27
%left/%rightは同じ順位の演算子がならんでいるときに生じるshift/reduce
conflictを解決するためのもの。単項演算子が前置のみなら、そもそも
conflict はおきないので、どちらでもかまわないです。

前置と後置の両方があるときは、%left/%rightが効いてきます。
たとえば、~という演算子が前置にも後置にも使えるような構文を考えます。

expr : '~' expr | expr '~'

このとき、%left '~' なら、~x~は(~x)~と解釈され、%rightなら~(x~)と解釈
されます。


34 名前:27 [03/12/09 20:07]
>>33
なるほど!明解な回答をありがとうございました。

ちなみに、それぞれに指定したbisonソースの変換出力(C出力)
を比べてみましたが、両者は実質的に同じものでした。

重ねてお礼を申し上げます。
ありがとうございました。

***

ところで、rubyのソースコードについての書籍があると聞きましたが、
これはインタプリター等の理解&構築にはよい本でしょうか?

ちょっと高めですが、参考になるのなら、と思っています。


35 名前:デフォルトの名無しさん mailto:sage [03/12/09 21:55]
rubyのってもうすぐWeb上でも全公開じゃなかったっけ?
確か初めの章だけは既に公開されてるよね。

36 名前:デフォルトの名無しさん mailto:sage [03/12/10 07:28]
>>34
あんなのに金払う意味無いって。
どうしても読みたいなら図書館行ってこい。

37 名前:デフォルトの名無しさん mailto:sage [03/12/10 10:55]
>>36
煽りじゃなく、できれば理由を教えてくれ。
おれの場合、あの本読んでいて苛々するんだが、理由を明確に
説明できるほどのスキルがないんで、他の人の意見も聞きたい。



38 名前:デフォルトの名無しさん [03/12/10 23:26]
>>35
なるほど、HPみたら、そんな感じに宣言されてますね。
しかも、この12月でほぼ1年たつ模様。

ちょっと期待。


39 名前:デフォルトの名無しさん mailto:sage [03/12/10 23:41]
>>34
>>8 にある本ではダメなの?


40 名前:デフォルトの名無しさん mailto:sage [03/12/11 00:07]
全文公開は延期してもらってもかまわないから、青木さんにはオライリーの
lex & yacc に変わるような本を書いてほしい。

41 名前:デフォルトの名無しさん mailto:sage [03/12/11 00:11]
>>8
佐々 政孝さんの本は出版が少し古いんですね。

42 名前:デフォルトの名無しさん [03/12/11 00:34]
>>39
全部コンパイラ系の本、
rubyはインタプリター


43 名前:デフォルトの名無しさん mailto:sage [03/12/11 01:21]
>>42
コンパイラはネイティブコードを生成することが多くて、
インタプリタはしないことが多いくらいで
やることは大体一緒だと思うけど。

44 名前:デフォルトの名無しさん [03/12/11 01:23]
インタプリタはしないことが多いんじゃなくてしないだろ。

45 名前:デフォルトの名無しさん mailto:sage [03/12/11 01:28]
Java VM の HotSpot とか。

46 名前:デフォルトの名無しさん mailto:sage [03/12/11 01:39]
>>43
違うのは最適化くらいか?

47 名前:デフォルトの名無しさん [03/12/12 20:24]
はっきりいって全然ちがう。(コンパイラとインタプリタ)
同じように使えるのは、字句解析器ぐらいか?




48 名前:デフォルトの名無しさん mailto:sage [03/12/12 20:54]
構文解析も意味解析も共通なはずだが。
なんで字句解析だけ?

49 名前:デフォルトの名無しさん mailto:sage [03/12/12 22:46]
>>47
C言語にはコンパイラとインタプリタが存在します。
本当に、同じように使えるのは字句解析だけだと思いますか?

50 名前:デフォルトの名無しさん mailto:sage [03/12/12 23:18]
構文木作るまでは大方一緒な気がする

51 名前:デフォルトの名無しさん mailto:sage [03/12/12 23:26]
釣れた?

52 名前:デフォルトの名無しさん mailto:sage [03/12/12 23:48]
LISPはいきなり構文木が手に入る

53 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:06]
>>49
コンパイラとインタプリタを備えた C の処理系なんてあったっけ?
大抵どっちかだから、共通している部分が多い事の事例にならないような。

こんな事が出来たら嬉しい人も多いだろうに。

#! /bin/env gcc <-- shbang で呼び出せる
//load Xlib <-- ライブラリのロードはコメント文で ==> コンパイラに通す時も透過的
#include <X11/Xlib.h>

int main() {

// 以下略
// 以上妄想

54 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:19]
>コンパイラとインタプリタを備えた C の処理系なんてあったっけ?
作らない(作っても意味無い)だけだろ

55 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:20]
>>54
だから、共通している部分が多い事の事例にならないだろ。


56 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:24]
>>55
同様な構文を持つ言語のインタプリタとコンパイラで
構文解析が共通化できない理由は何ですか?

57 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:27]
>>56
そこには異論は無いです。細かい突っ込みスマソ。



58 名前:デフォルトの名無しさん mailto:sage [03/12/13 02:56]
Dylan や OCAML や Haskell はインタプリタとコンパイラの両方持ってるね。
Common Lisp もだけど。

59 名前:デフォルトの名無しさん mailto:sage [03/12/13 04:18]
>>58
源流がLISPだからね。

60 名前:デフォルトの名無しさん mailto:sage [03/12/13 08:41]
MLの源流はlispでねーぞ

61 名前:デフォルトの名無しさん mailto:sage [03/12/13 09:29]
っつーかDylanだけじゃん


62 名前:デフォルトの名無しさん mailto:sage [03/12/13 10:38]
www.levenez.com/lang/

63 名前:デフォルトの名無しさん mailto:sage [03/12/13 11:32]
>>62
SchemeがAlgolから受け継いでるのって何?




64 名前:デフォルトの名無しさん mailto:sage [03/12/13 18:30]
>>63
lexical scopeじゃないかな?


65 名前:デフォルトの名無しさん [03/12/13 19:22]
構文解析器は、理論上はインタプリターやコンパイラに無関係に
整理可能であるが、現実問題としては、そうはならないということだろう。


66 名前:デフォルトの名無しさん [03/12/14 23:36]
きょう、rubyのソース開設本みつけたけど、
高いなぁ〜と感じた。

(2000円までだったら、速攻でかったんだけど)

とりあえず、公開待ちます。
貧乏人で、スマソ


67 名前:デフォルトの名無しさん mailto:sage [03/12/14 23:57]
>>66
2000 円で買えるコンピューター書籍はそれほどないと思うが?
なにが売ってても買わないの?



68 名前:デフォルトの名無しさん [03/12/15 00:03]
bison本やlex本(GNUプレス)は
みんな安いよw


69 名前:デフォルトの名無しさん mailto:sage [03/12/15 00:15]
これ?
www.amazon.co.jp/exec/obidos/ASIN/4844317210/
良さそうな本じゃん。Perlでこういう本ってあったっけ?

70 名前:デフォルトの名無しさん mailto:sage [03/12/15 01:17]
>>69
Perlはソースコードが多すぎる。

71 名前:デフォルトの名無しさん mailto:sage [03/12/15 07:18]
>>68
それってinfoで全文ローカルで読めるやつのこと?

72 名前:68 [03/12/15 21:36]
>>71
infoは使ってないのでよくわからんが、そうかもしれない。
実はもれも、本文はどこかで(英語???)読んだ記憶があった。

でも、手元に書籍であると、またちがうんだな、これが!


73 名前:デフォルトの名無しさん mailto:sage [03/12/15 22:10]
>>72
たしか、利益の一部は FSF に寄付されるんじゃなかったかな。

ところで、参考文献としてこの本は既出?
Icon 自体が面白い言語なので読んで損はないと思う。無料だし。

The Implemetation of the Icon Programming Language
www.cs.arizona.edu/icon/ibsale.htm

74 名前:デフォルトの名無しさん [03/12/15 22:49]
yacc/lex使ってSQLパーサ作りたいんだけど、挑戦したことあるひといますか?

75 名前:デフォルトの名無しさん mailto:sage [03/12/15 23:37]
lex & yacc のサンプルがそのままSQLパーサだったような記憶。


76 名前:デフォルトの名無しさん mailto:sage [03/12/15 23:41]
>>75
そうそうあったあった。どこかにサンプルコード落ちてたよ。
英語版だけど


77 名前:デフォルトの名無しさん mailto:sage [03/12/15 23:42]
>>76
コードが英語なのは普通じゃ…。



78 名前:デフォルトの名無しさん [03/12/15 23:47]
>>73
flexは読みやすかったけど、bisonは読みにくかった。
やはり、難しいからですかね???


79 名前:デフォルトの名無しさん [03/12/15 23:58]

すいません、ふと疑問に思ったんですけど、
正直、このスレってとっても

(良く言えば)→高度&専門的
(悪く言えば)→難しいばっかりで、地味&マイナー

な領域ですよね?

みなさん、本職は何をされているんでしょうか?
やはり、プロのコンパイラorスクリプト屋さんなんでしょうか?


80 名前:デフォルトの名無しさん mailto:sage [03/12/16 13:54]
>>79
プロのコンパイラ屋(コンパイラだけ作っててメシが喰える人)ってかなり少な
いと思う。(OS屋はもっと少ないけど。)

他の仕事でミニ言語が必要になったので書いてるとか、大学で論文書くために
作ったとか、あるいは趣味でやってる人がほとんどじゃないでしょうか。

僕はたまたま今仕事でコンパイラを書いていますが、100%のコンパイラ屋では
ありません。




81 名前:デフォルトの名無しさん mailto:sage [03/12/16 16:47]
>>79
ゲーム屋も多いと思う。


82 名前:デフォルトの名無しさん mailto:sage [03/12/16 18:02]
出来合いのエンジンを利用する場合でも、実装を知っていないと
どうにもならんからね。

83 名前:デフォルトの名無しさん mailto:sage [03/12/16 21:39]
>>82
ネタw


84 名前:74 [03/12/16 22:42]
>>75、76 そのサンプルってどこにありますか?
もし知っていたら教えてください。

85 名前:デフォルトの名無しさん mailto:sage [03/12/16 22:49]
オライリーの yacc/lex 本。

86 名前:74 [03/12/16 22:54]
おおおー。なるほど。早速買ってみようと思います。


87 名前:74 [03/12/16 22:57]
ところでネットで見つけようとしても見つからないですね。
PostgreSQLとかのソースを見ればいいのかしらん。



88 名前:85 mailto:sage [03/12/16 23:09]
>>87
だからオライリーのサイトにあるよ。
examples.oreilly.com/lex/

89 名前:74 [03/12/16 23:31]
>>85
きゃーありがとうございます。


90 名前:デフォルトの名無しさん [03/12/17 22:16]
>>80
おお〜、すごい!
本職&プロですか!

ちなみに、どんなコンパイラ書いてるんですか?
差し支えない程度で結構ですので、


91 名前:デフォルトの名無しさん mailto:sage [03/12/17 23:58]
俺は80氏じゃないけれど、組み込み系に利用するためのコンパイラを書いたことがある。
独自のインストラクションセットを吐き出すCコンパイラだけど、
80氏と同じく本職じゃないために、とりあえず動くコンパイラを作っただけ。
最適化とかは必要最低限くらいにしか要求されていなかったし。

俺はフリーのプログラマだけど、
お金をもらえてこういう楽しい仕事が出来るときが一番嬉しいね。

92 名前:デフォルトの名無しさん [03/12/18 00:19]
>>91
おお〜、「フリーのプログラマ」で、しかもコンパイラまで
書けるのですか!
なんか括弧イイ!ですねぇ〜!

わたしも、フリーではあるのですが、フリーはフリーでも(ry


93 名前:デフォルトの名無しさん mailto:sage [03/12/18 03:27]
ASICとかFPGA屋さんもいるかも知れず。

94 名前:デフォルトの名無しさん mailto:sage [03/12/18 11:28]
>>90>>92
コンパイラ書くのはそんなに難しくないよ。
漏れも大学や専門学校でプログラム勉強したことなんか一度もないけど、
コンパイラを一回書いたことがある。
そのときのネタは、スクリプトを解釈して整数、浮動小数、文字列の計算をしながら、
その結果を GP-IB (RS232 の遠い親戚みたいなもの) に送り込むヤツね。

キーワードは Bison/Flex (またはYacc/Lex)。
これらのツールが食べられるような特殊な書式さえ覚えれば、
サルでも※簡※単※な※コンパイラなら書ける。
# ただし、サルにはGCCは書けない。

95 名前:デフォルトの名無しさん mailto:sage [03/12/18 14:20]
簡単なコンパイラ書くぐらいならGCCの移植作法を覚える方が
まだ ※簡※単※?

96 名前:デフォルトの名無しさん mailto:sage [03/12/18 14:40]
簡単なコンパイラ書く方が※簡※単※

97 名前:デフォルトの名無しさん mailto:sage [03/12/18 15:02]
※強※調※し※た※い※語※句※を※※※で※強※調※す※る※ス※レ※は※こ※こ※で※す※か※



98 名前:デフォルトの名無しさん mailto:sage [03/12/18 15:10]
*** おおっと テレポーター ***

99 名前:デフォルトの名無しさん mailto:sage [03/12/18 15:58]
>>95
UNIX USERのGCCプログラミング工房とか読んでると
すんげーキツそうなんですが。

100 名前:デフォルトの名無しさん mailto:sage [03/12/18 16:03]
www.wnishida.com/~wmemo/?date=20031125
こんなんとか。

101 名前:デフォルトの名無しさん mailto:sage [03/12/18 17:37]
誰かが移植してくれるのを待つのが一番簡単。

102 名前:デフォルトの名無しさん mailto:sage [03/12/18 20:25]
>>98
年 * 寄 * り * は * カ * エ * レ * !

103 名前:デフォルトの名無しさん mailto:sage [03/12/18 21:07]
*** いしのなかにいる! ***

104 名前:デフォルトの名無しさん mailto:sage [03/12/18 21:22]
>>103
俺がさんざん書こうと思って我慢してたのに(w

105 名前:デフォルトの名無しさん mailto:sage [03/12/19 18:45]
>>103-104 わらた

106 名前:デフォルトの名無しさん [03/12/20 18:08]
VC++でyaccとlexを使ってexeを作りたいのですが、
うまくいきません。みなさんはどうやってやっていますか?

107 名前:デフォルトの名無しさん mailto:sage [03/12/20 21:06]
>>106
yaccとlexの出力ファイルをコンパイルして使ってる。



108 名前:デフォルトの名無しさん [03/12/20 21:07]
なんでlex/yaccつかうひつようあるの?
win系で?

109 名前:デフォルトの名無しさん mailto:sage [03/12/20 21:09]
>>108
ちなみに自分は何を使ってるんだ?

110 名前:デフォルトの名無しさん mailto:sage [03/12/20 21:11]
>>109
それはあんたしか知らない。

111 名前:デフォルトの名無しさん [03/12/20 21:14]
まともに使えるスクリプト言語って、なんでこんなに少ないんでしょうね?


112 名前:デフォルトの名無しさん mailto:sage [03/12/20 21:18]
>>110
その突っ込みは板違い

113 名前:デフォルトの名無しさん mailto:sage [03/12/20 21:31]
>>111
それはお前が使えてないだk(ry

114 名前:デフォルトの名無しさん mailto:sage [03/12/20 22:34]
>>110
質の低い書き込みするなよ

115 名前:デフォルトの名無しさん mailto:sage [03/12/21 00:20]
>111
マジできくが、それじゃどんなスクリプトが欲しい?


116 名前:デフォルトの名無しさん mailto:sage [03/12/21 01:10]
>>111
では、使えないと思ったスクリプト言語を理由と共に列挙してみよ

117 名前:デフォルトの名無しさん mailto:sage [03/12/21 01:27]
perl ウンコ



118 名前:デフォルトの名無しさん mailto:sage [03/12/21 04:44]
Perlが一番速いんじゃない?汎用的なスクリプト言語の中では。
ああいう方向もありだと思うよ。

119 名前:デフォルトの名無しさん mailto:sage [03/12/21 13:34]
速くはないだろperlは、早いけど

120 名前:デフォルトの名無しさん mailto:sage [03/12/22 02:42]
インタプリタを初めてつくりたい人に「これをよめ」という本はありますか?
洋書・和書は問いません。

上の方のレスを見るとコンパイラとインタプリタは少し違うようなので、、、

121 名前:デフォルトの名無しさん mailto:sage [03/12/22 07:42]
ホントーに初めてで右も左もわからないならCマガジン2000年5月号がお薦め。


122 名前:デフォルトの名無しさん mailto:sage [03/12/22 08:38]
www.cmagazine.jp/contents/200005.html
特集1 スクリプト言語を作ろう インタプリタの構造と設計


123 名前:デフォルトの名無しさん mailto:sage [03/12/22 12:02]
>>120
bison, flex のドキュメント。
gcc の *.y ファイル。

124 名前:デフォルトの名無しさん mailto:sage [03/12/22 13:02]
字句解析は正規表現のようにした方がいいですか・・・

ハッシュにして48個(64個)を作ってそれぞれをチャインで
繋いで予約語と関数名と変数等を検索して方が早くないですか・・・

125 名前:デフォルトの名無しさん mailto:sage [03/12/22 18:00]
>>124
そう思うならそうすればいい。
っていうかそれでいい。
なにか問題でも?

126 名前:111 [03/12/22 21:59]
パール:記述方法が暗号的すぎ
オーク:使用目的が限定的すぎ
るび〜:モデル化が変態的すぎ

>>122
もう手にはいらんのとちゃう?


127 名前:デフォルトの名無しさん mailto:sage [03/12/23 00:18]
>>126
バックナンバー情報をチェックしたら
2000年のは無いみたいだね。
だが、大学の図書館とかなら多分ある。
漏れの母校の資料室にもあった。
っていうか俺んちの図書室にもある。
公的な図書館なら申請すれば
他の図書館から取り寄せてくれたりもする。
絶望的なほどではない。
でも、そこまでするなら本屋で他の本見繕った方がいい罠。



128 名前:デフォルトの名無しさん [03/12/23 02:32]
>>124
自分もハッシュです。
256でチェインしてます。
記号の"{"ごとにハッシュ表を新たに作り、
新しいハッシュ表から古い方に向かって調べます。
グローバル用は別に1個作り、
関数を呼ぶ場合にも、全く別のセットを作ります。
(じゃないと、下部の関数から上位の変数がみえたりしちゃいますからね)

ちなみに、ハッシュを使わずに作った物は、
6万語ぐらいの定義、10万回くらいの参照、マクロ展開があるファイルのコンパイルに10分、
ハッシュを使った物は30秒ぐらいでした。

129 名前:デフォルトの名無しさん mailto:sage [03/12/23 02:47]
>>124
今まではハッシュだったけど、
最近、キーワードだけswitch文の羅列で分別するようにしてみた。

もちろん手書きでは大変なので、perlで簡単なプリプロセッサを書いて
そいつに展開させてる。








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

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

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