[表示 : 全て 最新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 あたり

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で簡単なプリプロセッサを書いて
そいつに展開させてる。



130 名前:デフォルトの名無しさん mailto:sage [03/12/23 05:26]
>>127
> 公的な図書館なら申請すれば
> 他の図書館から取り寄せてくれたりもする。

こんど近所の図書館でも聞いてみよ。
千葉県だけど取り寄せてもらえるかな、、、

131 名前:>>124 [03/12/23 15:53]
単純にflexじゃあかんの?


132 名前:デフォルトの名無しさん [03/12/23 17:07]
Cコンパイラのソースで読みやすいの教えろ

133 名前:46 [03/12/23 17:14]

Kさん 好循環  Aさん 悪循環  
 (健康体)  (喘息)

1.(神が喘息であるかないかを決める)

2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、
          五感(嗅覚)が鈍り感性が変化する

4.K&P 神は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる

6.K 正常な感性  A 外に出なくなりさらに異常な感性になる

7.K 正常な人間   A 異常な人間(レッテル)



134 名前:46 [03/12/23 17:14]
8.K&A 死

9.K&A      来世

10.K&A 神は異常な人間は人に迷惑をかけるので行動
を抑制する必要があると思っている。

11.K&A 神が喘息であるかないかを決める

12.K 喘息でない  A 喘息である

13.K&A    1.に戻る

これは事実。広めようぜ

解決法:体力をつけると感覚が正常に戻り、
    アトピーも快癒に向かう。
    目安としてグランドを10週くらい。
あとはウォーキング、なるべく長い間歩く
(ウインドーショッピングや散歩、五時間ぐらいを目安)。
無論最初は、無理なので徐々に体を慣らしていくといい

鼻に変な違和感があったり、頭がぼおっとする時の解決法。
口をつぐんだまま、口の中で空間を作る、すると口の中に空気がたまるのでそれを吐き出す。無論息が苦しくなったら、呼吸をして良い。
これを、100回くらい。

135 名前:デフォルトの名無しさん mailto:sage [03/12/23 18:04]
>>132
gcc



136 名前:デフォルトの名無しさん [03/12/23 18:28]
最近のスクリプト言語って、オブジェクト指向ばっかりね。


137 名前:デフォルトの名無しさん [03/12/23 19:16]
>>132
Bruce evans C Compiler (BCC) がおすすめ
16bitコード生成の最適化無しだけど、ソース分量も多くないし
再帰下降なんでyaccとかも使ってない
作者のBruce EvansはMinix386パッチ開発などで知られる
一応ELKSのコンパイルにも使用されている


138 名前:デフォルトの名無しさん mailto:sage [03/12/23 21:21]
えー・・・

139 名前:デフォルトの名無しさん [03/12/23 22:18]
>>137
YACC使ってるほうが、圧倒的にソース簡単なんじゃない?
なんで、勉強には不向きと思われ。


140 名前:デフォルトの名無しさん [03/12/23 22:19]
C+AWKみたなスクリプト言語ありますか?


141 名前:デフォルトの名無しさん mailto:sage [03/12/23 23:07]
>>140
そりゃperlでは…



142 名前:デフォルトの名無しさん [03/12/23 23:08]

  ☆チン     マチクタヒ゛レタ〜
                        マチクタヒ゛レタ〜
    ☆ チン  〃 ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ヽ ___\(\・∀・) < ルビ〜ソ〜ス本はマダ〜〜〜?
      \_/⊂ ⊂_ )  \_____________
     / ̄ ̄ ̄ ̄ ̄ ̄/|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん |/




143 名前:デフォルトの名無しさん [03/12/23 23:14]
>>141
変数に$つけんとあかんのとちゃう?




144 名前:デフォルトの名無しさん mailto:sage [03/12/24 14:21]
>>143
それが?

145 名前:デフォルトの名無しさん mailto:sage [03/12/24 14:44]
Appel本の java 版のソースは ML の移植と聞いたのですが、実際にそうなのですか?
読んだ方の意見を聞いてみたのですが。

146 名前:デフォルトの名無しさん mailto:sage [03/12/25 01:11]
コンパイラって、入出力なんかのハードウェアに近いレイヤとか、FFI 等で自分の環境外に
アクセスする部分ってどうなってるのかしらん。インタープリタだと外のライブラリ使えば
良さそうなんだけど。

147 名前:デフォルトの名無しさん mailto:sage [03/12/25 01:21]
>>146
出力したオブジェクトにAPI呼ぶライブラリをリンクする。
あるいはAPIを呼ぶコードを吐く。
別に疑問なところはないとおもいますが。

148 名前:デフォルトの名無しさん mailto:sage [03/12/25 01:37]
>>147
レスどうもありがとうございます。
冬休みになったらコンパイラの勉強をしたいなと思ってるのですが、イマイチ基本的な
事から分かっていないのでダメですね。リンカーの本を読めばこの辺も理解出来るの
かなぁ。


149 名前:デフォルトの名無しさん [03/12/25 01:57]
>>132
C/C++インタプリター cii
ttp://village.infoweb.ne.jp/~fwgi5816/CI/


150 名前:デフォルトの名無しさん mailto:sage [03/12/25 02:34]
知合いの方はAppel本のJava版はJavaじゃない,とまでおっしゃってました.MLからのひどい直訳で,Javaとしては(コンパイルの通らない)誤りも多々あるとか?私は実際どうなのかが分かる人間ではありませんが.

151 名前:デフォルトの名無しさん mailto:sage [03/12/25 07:12]
>>150
C は Java のひどい移植で、、、と書評で書いてあったのだけど、 ML を Java に移した時点で
すでに糞コードなんですか?

ML で勉強するのはちょっときついなぁ、、、

152 名前:デフォルトの名無しさん mailto:sage [03/12/25 17:54]
つーかサンプルコードなんてどうでもいいだろ。
個人的には、読みやすい疑似コードならあっても損ではないが。

153 名前:デフォルトの名無しさん [03/12/25 18:56]
>>144
つまり、c&awkとは、ぜんぜん違うということ。




154 名前:デフォルトの名無しさん mailto:sage [03/12/25 19:11]
>>153
きみは walk でも使ってなさい。
www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/impl/awk/

155 名前:デフォルトの名無しさん [03/12/25 23:59]
Windowsで使えるyaccやlex、texはありませんか?

156 名前:デフォルトの名無しさん mailto:sage [03/12/26 00:03]
texは知らんがyacc/lexはcygwinのが使えるんでねえの?

157 名前:デフォルトの名無しさん [03/12/26 08:09]
>>154
それって、AWKと同じ?


158 名前:デフォルトの名無しさん mailto:sage [03/12/26 10:43]
>>156
cygwinのyacc/lexが吐き出すCをVC++が食べてくれないことを>>155は恐れている。

159 名前:デフォルトの名無しさん mailto:sage [03/12/26 14:33]
>>155
gnuwin32

160 名前:デフォルトの名無しさん mailto:sage [03/12/26 19:11]
>>155
上で>>156>>159が言ってる他にも、yacc互換ツールにkmyaccってのがある。
Rubyのコンパイルにkmyaccを使うと実行ファイルが少し小さくなっていい感じ。

>>156
Texも余裕でいろんなバージョンがごろごろしてるよ。

161 名前:デフォルトの名無しさん mailto:sage [03/12/26 20:11]
Rubyの実行ファイルが少し小さくなったら何かいいことあるんですか?

162 名前:デフォルトの名無しさん mailto:sage [03/12/26 21:04]
>>161
大きくなるよりいい。

163 名前:デフォルトの名無しさん [03/12/27 01:14]
レベル低いねえ、ここ
処理系開発に携わった者としては、見ていて恥ずかしいよ



164 名前:デフォルトの名無しさん [03/12/27 02:23]
まともなプロは、他のプロの半端な仕事をバカにすることはあっても、
素人をバカにすることはない。

素人をバカにするのは、プロ気取りの汚らしいチンピラである。

165 名前:デフォルトの名無しさん mailto:sage [03/12/27 03:07]
もう冬休みか...

166 名前:デフォルトの名無しさん mailto:sage [03/12/27 04:49]
失業者かもよ。「携わった」と、過去形で書いているし。

167 名前:デフォルトの名無しさん mailto:sage [03/12/27 06:50]
漏れの記憶では確かVCはbison/flexが吐き出すCは食べてくれるがbison++が吐き出すC++は食べられなかったような

168 名前:デフォルトの名無しさん [03/12/27 11:56]

flex入門(ASCII)には、

”スキャナがあるテキストにマッチするために「逆行」しなければならない
ことを、バックトラッキングといいます。”

とあるのですが、ここでいう「逆行」とは具体的にはどういった状態を指す
のでしょうか?


169 名前:デフォルトの名無しさん mailto:sage [03/12/27 12:36]
一度見たトコをもう一度見る。

170 名前:デフォルトの名無しさん [03/12/28 11:31]
コード例から自動で言語処理系作れないかな?


171 名前:デフォルトの名無しさん [03/12/28 11:43]
>>170
ディスプレイに映るコードを眺めながら、博士はコーヒーを飲んでいた。
彼のお気に入りの陶器から口を離して、>>170の質問に答える。

「もし君が全てのトークンの機能と連鎖可能性を記述するのなら、もちろん可能だろう。」

博士は私のほうを向いて続けた。

「しかし、それはlexとyaccを使い実装と正規表現を記述するのと、どう違うのかね?」

172 名前:デフォルトの名無しさん mailto:sage [03/12/28 12:07]
関数の合成とオプティマイズまでを実装した処理系ってなんか無いですか?
もちろんソース公開されてる奴で。

たとえば、文字コード変換機とか、音声ファイルのコンバータなど
入力と出力パターンがそれぞれ複数あるとき、
すべてのパターンのコードを記述するのはむだなので
中間形式にいったん変換してから再変換をかけることになると思うのですが
関数合成で一度にできるようにならないかと。

173 名前:170 [03/12/28 13:03]
>>171
妙に納得させられてしまいました。
不完全な記述でもある程度の結果が得られて
(現存する記述と意味の関係から自動推測して処理系を構築するとか?)、
さらに進展性が望めるシステムもあったらどうなるのかちょっと興味があったのです...

>「しかし、それはlexとyaccを使い実装と正規表現を記述するのと、どう違うのかね?」
自分はlex(flex),yacc(bison)を全然使いこなせてないんで
そんなのがあったら楽ができそうだなと思った次第です。(スイマセン)




174 名前:デフォルトの名無しさん mailto:sage [03/12/28 15:05]
>>170
例えば、

main {
  print "Hello World!"
}

ってのから言語処理系を作れないかということですよね?
でも、それって、XMLのデータだけ見て意味づけしろ、というのと同じで、
意味情報が含まれていないから出来ないのでは?


175 名前:デフォルトの名無しさん mailto:sage [03/12/28 15:10]
>>140
私はそのまま awk を使ってます.
仕事柄 C/C++ とその他のスクリプト言語の使用比率が 9:1 くらいなので,
他の言語がなかなか覚えられなくて. C に似てて仕様的にも単純なものってことで
awk 使ってますが, awk 使うくらいならそのまま C でいいんじゃないかと最近思いました ...
関係ない独り言ですみません.






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

前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