「コンパイラ・スクリプトエンジン」相談室 3at TECH
「コンパイラ・スクリプトエンジン」相談室 3 - 暇つぶし2ch607:デフォルトの名無しさん
04/04/23 00:13
gcc 3.4のC++パーサは手書きなんだと。


608:デフォルトの名無しさん
04/04/24 23:06
>>607
みんな手書きだろう?
口述パーサなんてあるか?


609:デフォルトの名無しさん
04/04/24 23:27
>>608
> みんな手書きだろう?
3.3.3まではyaccに生成させてたんだよ。
これは手書きとは言わんだろう?

610: 
04/04/24 23:48
ところで、コンパイラの仕事ってどうやって
発生するの?
どんな会社がそういった仕事の最先端を行っているの?
なんとなく興味あります

わたしはしがない下請けなので
コンパイラ、と聞くとちょいと憧れますね


611:デフォルトの名無しさん
04/04/25 12:35
知ってるけど教えてあげない

612:デフォルトの名無しさん
04/04/26 19:19
>>609
なるほど、そういう意味ね!



613:デフォルトの名無しさん
04/04/26 19:25
>>529
ほほえましいな。レス番違うし。


614:デフォルトの名無しさん
04/04/26 19:36
>>613

615:デフォルトの名無しさん
04/04/27 04:59
ワロタ

616:デフォルトの名無しさん
04/04/27 23:10
じわじわ来るねw

617:デフォルトの名無しさん
04/05/08 09:26
すんません、Exceptionのthrowとcatchって、どうやって実装されてるんですか?
なんとなく、setjump()とlongjump()をつかうんだろうなーとは思うんですが、いまいち自信ないです。
どう実装してるのかを紹介したサイトなりがあれば教えていただけますか。
#「例外 実装」とかでぐぐってもそれらしいのは見つからない。

618:デフォルトの名無しさん
04/05/08 09:44
exception setjmp longjump でググってみてみれ。

URLリンク(www.google.co.jp)

619:618
04/05/08 10:24
longjmp だった。言い訳なんかするもんか・・・

620:デフォルトの名無しさん
04/05/08 11:06
How a C++ compiler implements exception handling
URLリンク(www.codeproject.com)

621:デフォルトの名無しさん
04/05/08 12:27
>>617
ちゃんとしたcontinuationがあれば、それを使って実装すればいい。

622:デフォルトの名無しさん
04/05/09 00:19
どういう意味だ?


623:!621
04/05/09 00:48
>>622
exception を実装する為に continuation を実装するというのも本末転倒な感じが
するけど。

URLリンク(www.shiro.dreamhost.com)

624:デフォルトの名無しさん
04/05/09 19:17
longjumpは制約が多すぎないか?
スクリプトレベルでうまく動かすためには、相当なサポートコードが必要に
なると思うが…


625:デフォルトの名無しさん
04/05/16 12:21
Rubyはlongjmp使ってなかったっけか。

626:デフォルトの名無しさん
04/05/17 05:33
自分も先読みが結構必要なときの
マッチしなかったときの処理にlongjmpを使ってるよ。

627:デフォルトの名無しさん
04/05/18 09:34
>>610
ARM,MIPS,SHとかの組み込み用アーキテクチャとかなら新規開発したあとコンパイラもそれにあわせて最適化とかが必要だから仕事があるんじゃない?

628:デフォルトの名無しさん
04/05/18 21:58
Schemeでいうcontinuationの機構を作りたいのですが、
setjmpとlongjmpの他に何が必要ですか?
スタックの内容を退避しなければ駄目ってのはなんとなくわかるのですが。
インアセ使わずにC言語だけでできるものでしょうか?
とりあえずi386以降で動けばいいです。

629:デフォルトの名無しさん
04/05/19 02:28
>>628
「スタックなぞ一切使わない」というのが王道です。

すなわち、関数呼出しはCALLでなく、JMPになります。
return addressは、「次の処理の関数」として表現し、引数として渡すのです。
通常スタックフレームに置かれる変数は、ヒープに置くことになります。

関数型言語スレ(総合スレは荒れてるので、HaskellかML)
で質問すると詳しい人が教えてくれるでしょう。


630:デフォルトの名無しさん
04/05/19 19:26
ういー、むづかしそうです。
SchemeのCPSてやつですね。


631:デフォルトの名無しさん
04/05/20 02:21
「スタックなぞ一切使わない」という方法は、ここでいう (4) の前者だよね。

URLリンク(lists.sourceforge.jp)
URLリンク(lists.sourceforge.jp)

632:デフォルトの名無しさん
04/05/21 02:19
>>630
やりたいこととは違うと思うけど、Schemeを普通のCにコンパイルする方法。
URLリンク(home.pipeline.com)

- 関数呼出しはCの関数呼出しとしてコンパイルされるが、CPSなのでreturnは決してしない
- スタック領域をヒープとして用いる
- スタックがあふれそうになったら、copying GCで新しいスタック領域に移し計算を続行する
- GCのスタックを走査する部分にはCPUに依存しないので、Cだけで書ける

昔Sigplan Noticesで読んで面白いと思った。




633:デフォルトの名無しさん
04/05/23 00:00
bison / yacc の使い方の質問です。

bison とか yacc って、みんな初めは電卓作りますよね。
3 + 5 (Return)
って入力すると「画面上に」8をprintfするやつ。
これ、画面上で8を返すんじゃなくて、
yyparseの返り値とかそういう感じで yyparse の呼び出し元に
8 を何とかして知らせる方法ないですか?
ただし、グローバル変数は使わないものとして。


634:デフォルトの名無しさん
04/05/23 15:40
>>633
/usr/lib/yaccpar とか /usr/share/bison/bison.simpleを書き換える。

bisonは

#define YYPARSE_PARAM foo

を定義しておくと、void *fooが引数として渡されるから、アクションでその中に
答を入れて返すようにすればいいのでは。

プログラム中からyyparseを複数回呼出す場合は、先読みバッファの再初期化に注意。





635:名無し@沢村
04/05/24 21:41
おまいらよ、おれはつい最近つーか、たったいまさっきtcl/tkつーコンパイラの存在を知ったよ。
いまDLしてるところで、まだ開けて見てないんだが、Webでの説明を見た限りじゃなんか良さげだった。
つーか、GUIに関しては、Visual C++よりもちゃんとしたGUIアプリが簡単につくれるとのことだ。
ただ計算的な処理には不向きということだが、そこは何かC言語で書いて追加できるとのことだ。
おれはちょっとこのtcl/tkを調べてみるが、ホントにGUIに関して良さげだったら、いま開発中の「Vicual E++」は、
このtcl/tkで書き直してもいいな。Visual C++じゃエディタの予約語の色づけとかチョー面倒だしな…
そして内部のメインの処理だけをC言語で書くようにすればいいからな…
それができそうかどうかをまず調べてみようと思う。
次に調べたいことは、おれが次につくりたい高級言語に、tcl/tkはオープンソースらしいから、パクレる部分があるかどうかということだ。
ともあれ、おれのコンパイラの開発は飛躍的に前進しそうだな。
おまいらよ、おれはtcl/tkいま知ったぞ。おまいらは、tcl/tk知らなかっただろう?


636:デフォルトの名無しさん
04/05/24 22:11
>>635
tcl/tkって「チックル・チーコ」って読むんだよね?


637:デフォルトの名無しさん
04/05/24 23:11
>>635
お前だけ。

638:名無し@沢村
04/05/24 23:49
Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?
実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!


639:デフォルトの名無しさん
04/05/25 00:46
セックル・チンコ

640:デフォルトの名無しさん
04/05/25 01:35
>>638
tclsh, wish という位だから、tcl/tk は一種のシェルだよ。
C から system() でシェルのコマンドを実行するのと似た様な感じで使える。
まぁ、もちっと面倒だけど。

俺も以前 tcl/tk からパクれる所が無いかなとソース眺めてみたけど、
C で実装されている部分は低レベルな所だけだったような。

641:デフォルトの名無しさん
04/05/25 10:49
TclつったらPerlと同じくらい歴史の長いスクリプトなんだが
アホは知らなかったのね。

642:デフォルトの名無しさん
04/05/25 10:54
>>641
言語で大事なのは歴史の長さよりも話者人口だよ。
歴史の短い Java をみんなが使うのはなぜだと思う?
Algol や Prolog が滅びたのは?

643:デフォルトの名無しさん
04/05/25 12:04
今頃Tcl持ち出してくるなんて100%ネタだと思ってたんですが。
釣りだよね?親切に説明してる640が気の毒だ。


644:デフォルトの名無しさん
04/05/25 13:29
>>642
Algolはともかく、Prologは滅びてはいないだろ。
Algolにしたって、形を変えてその思想は受け継がれているわけだし。

645:デフォルトの名無しさん
04/05/25 13:53
>>642
知名度の話をしてるんだが。なにが言語で大事なのは、だ。
かってに妄想してチンコ膨らましてんじゃねーよキモイ。

646:デフォルトの名無しさん
04/05/25 19:15
642じゃないけど、
 妄 想 ま で 制 限 さ れ て た ま る か
妄想でチンコ膨らそうぜ

647:デフォルトの名無しさん
04/05/25 21:40
>>642
Tclはハード設計ツールの組込みスクリプト言語ではメジャーです。
(Tclはいやだけど、独自言語よりはましだよな)

もともとTclはアプリ組込み用だし。tclshもwishも組込みのサンプル
みたいなもんです。

648:デフォルトの名無しさん
04/05/25 22:13
でも結局、Tk のほうが Tcl よりも何倍もメジャー。

649:名無し@沢村
04/05/26 21:18
Starpack
Tcl/Tkでつくったスクリプトを実行ファイルに変換するツールだな。
が、わし英文読めんけん、このページのどっからDLしていいかわからんのよ。
このページの何行目の何という文字をクリックするとDLできるか、教えて~♪

URLリンク(www.interq.or.jp)


650:デフォルトの名無しさん
04/05/26 21:45
沢村師ねよ

651:デフォルトの名無しさん
04/05/29 19:38
ここは沢村を呪うスレとなりました。

652:デフォルトの名無しさん
04/05/29 22:11
              -=、 ̄`―''" |\ `'''―'''"   |  ||          |ヽ、_____,へ、
         ,...--、    `―‐ァ‐...::', \:::::::::::::::::::: |  ||    |ヽ、___,ヘ、| ┌──┐ i´
        ,. '  ..::....`'''‐--‐''"~...:::::::::ヽ  ` 、::::::::::::::::|  ||    | ┌─┐ i´ | |     │ |
    -=ニ"_,...、-- ヾヽ、::::::::::::::::::::::::::::::::ヽ  `、 `,::::::|  ||    | |  │ | | |      .| |
          `''‐-`ヽ.`''‐-..._:::::::〃:::l:::l`ヽ..ノヽヾ,: |  ||    | |  │ | | |____| |
     ,..-‐''''‐----'":::::::`ヽ、 /l:/|::::/l:::lヾ.‐'""' i| l |  ||    | |  │ | |.┌─‐┐┌┐.|
  __,. ' ......:::::::::::::::::::::::::::::::::::: `''1 l! l::::i lヾ|,...-==l. l:|  ||    | └─┘ | |ノ ,ヘ、 | | レ'
  `ー--‐' ̄`>   ....:::::::::::::::::ノ.._,...ヾ!ノ-':::/~   ノ i |  ||    .| | ̄ ̄|ノ  / /` .| |
       ,.. '"  ...::::::::::::::::::::::::::ヽ< ̄`>'" `ー‐‐''"ノ..|  ||     |ノ      / /  | |
-‐'"゛`''‐''" .......::::::::::::::::::::::::::::::::::::::{ `‐',ヘ |  ,..、_  .|  ||             / /   | |     /|    
....__...:::::::::::::::::::::::::::::::::::::::::::::::::::::::!、  !  ,..-`    ,. |  ||           /./   .| |   . / |
  -"--- ....___,...--- ._::::::::::::::::::::`、 `‐'    _ィ' V|  ||     ._ _/./    . | └─'´ .,)
           , '" ̄..::::::::::::::::::::::::::〉__,..w、ァ'"Vハノ |  ||      `ー─‐'´      `ー──'´
   ,..--- ....__,. ' ....:::::::::::::::::::::::::::::::::::::::::Vi,..ハ---'" |  ||
  ,. '    .....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::'、. ―   .|  ||
-=-‐-‐'゛`''‐-.._   _,..-----==-  .:::::::::::`ー.`--‐'",'|  ||



653:デフォルトの名無しさん
04/05/30 08:43
沢村が全てを台無しにしたんだな。

654:デフォルトの名無しさん
04/06/02 01:19
マルチスレッドが良く分からない。マルチスレッドなコードを生成するのには
コンパイラ側で何かしてあげなくてはいけない事があるのでしょうか。
それともランタイム環境の問題なのかな。

655:デフォルトの名無しさん
04/06/02 03:04
tls(thread local storage)なんてのが言語仕様として定義されていればコンパイラはそれを意識する必要があります。


656:デフォルトの名無しさん
04/06/02 07:57
>>655
完全にライブラリレベルなのかなと思っていたのですが、そういう訳でもないんですね。
pthread ライブラリを wrap して、他のライブラリも MT-Safe に作れば良いのかと
思ってました。どうもありがとうございます。

657:デフォルトの名無しさん
04/06/09 22:05
インタープリタなんかではスレッド作るとそのスレッド専用の VM が起動する処理系が
あるみたい。コンパイルされる言語でも、スレッド毎にランタイム環境を作ってあげれ
ば良いのかな。

658:デフォルトの名無しさん
04/06/09 22:48
>>657
コンパイルされる言語の場合は、ホスト環境のpthreadライブラリを呼び出す様に
すればいいのでは?
今後主流になると思われるSMP環境を考えたら、複数のCPUを有効に使えるかも


659:デフォルトの名無しさん
04/06/10 00:20
>>658
pthread_create() が C の関数を引数に取るので、クロージャとかを渡したい場合に
何となく面倒じゃないかなと思ってました。変数部分は引数として渡してあげれば
問題無いような気がしてきました。

660:デフォルトの名無しさん
04/06/16 10:58
bison と flex を使っています。
flex では yylval をガンガン使っています。
bison で %pure_parser したら flex が吐き出す C コードのコンパイルで氏にました。
どうすれば %pure_parser しても yylval (と同じような機能) を flex で使えるでしょうか。

661:デフォルトの名無しさん
04/06/16 16:28
>>660
自己レス
URLリンク(www.timeparadocs.net)
これで解決しますた。
が、flex のファイルに yylval.hoge と書いていたのを yylval->hoge と書かないと逝けないようです。

662:デフォルトの名無しさん
04/06/17 23:22
boostのspiritっていじって遊ぶにはよいけど、
実際問題使えるものなのかな?

663:デフォルトの名無しさん
04/06/18 16:14
boost::spirit便乗質問なんですがパースした後
parse_infoのfullを調べるとエラーが発生したか確認できますが
エラーが発生した行番号を取得するにはどうやったら良いんでしょうか?

664:デフォルトの名無しさん
04/06/18 21:33
position_iterator(勘

665:デフォルトの名無しさん
04/06/19 22:30
うわ、みてみると確かにそれらしい気配が・・・
しかし、よく意味が分からない罠・・・

666:読まずにレス
04/06/22 00:47
JJTreeでJVM上で起動するスクリプトを書くのはアリですか?

667:デフォルトの名無しさん
04/06/22 10:17
だめ

668:デフォルトの名無しさん
04/06/23 23:35
このようなコンパイラ誰か作ってもらえません?
イメージ的にはVMを介さない.NETみたいな。
開発の形態はApacheみたいに元となるものがあって
ユーザーが拡張プラグインを自由に作って公開できるようなのがいいな。

・ネイティブコードを吐く
・OSは問わない
・VMなどを介さない
・メインとなる構文はあるが、ユーザーが自由に構文を追加・変更できる。

669:デフォルトの名無しさん
04/06/23 23:38
>>668
D言語でええやん

670:デフォルトの名無しさん
04/06/23 23:38
>>668
URLリンク(hp.vector.co.jp)

671:デフォルトの名無しさん
04/06/23 23:42
>>669
D言語って名前くらいは聞いたことあるんですけど、
>>668で書いたようなことを実現しているんでしょうか?

672:デフォルトの名無しさん
04/06/24 00:03
Lisp系を使えばいいんでないかとオモタ

673:デフォルトの名無しさん
04/06/24 00:15
>>668
このようなコンパイラ誰か作ってもらえません?

というクレクレな割に

> ・ネイティブコードを吐く
> ・OSは問わない

いきなりハードル高い


674:デフォルトの名無しさん
04/06/24 00:25
>>673
APIの類を使わなければ大丈夫
CPUは限定されるが

675:読まずにレス
04/06/24 00:36
ダメですか…orzガックリ こっそり作ることにします。

676:デフォルトの名無しさん
04/06/24 00:39
.NETだから、膨大なライブラリで動的な言語で言語非依存のバイナリインターフェイスを持ってないとダメだな

677:デフォルトの名無しさん
04/06/24 02:13
>>668
死ねボケ

678:デフォルトの名無しさん
04/06/24 02:20
>>677
お前が死ねカス

679:デフォルトの名無しさん
04/06/24 02:23
>>678
お前も死ねタコ

680:デフォルトの名無しさん
04/06/24 09:50
goto 677

681:デフォルトの名無しさん
04/06/24 09:58
nop



682:デフォルトの名無しさん
04/06/24 10:11
lea eax, dword ptr[eax]

683:673
04/06/24 13:10
>>674
> APIの類を使わなければ大丈夫

画面を含む一切の入出力ができなくなりますが

684:デフォルトの名無しさん
04/06/24 14:11
ブートから初めてVESAなり叩けば良い

685:デフォルトの名無しさん
04/06/24 21:45
>>668は実行可能ファイルとは一言もいってない訳だが。

686:デフォルトの名無しさん
04/06/25 00:58
このページ挙がってないのかな?
URLリンク(www.csg.is.titech.ac.jp)

687:デフォルトの名無しさん
04/06/26 03:09
gosub 687

688:デフォルトの名無しさん
04/06/27 04:13
>>683
>画面を含む一切の入出力ができなくなりますが
要求事項にないから、いいんじゃない?

689:デフォルトの名無しさん
04/06/27 05:13
>>683
GCC があるんだから自分の好きな言語のフロントエンドを書けばいいじゃん。

690:デフォルトの名無しさん
04/06/27 08:28
簡単に言ってくれるが、gcc難解すぎて弄る気にならん

691:デフォルトの名無しさん
04/06/27 10:36
>>689
GCCのフロントエンド書いたときあるの?

692:デフォルトの名無しさん
04/06/27 11:41
>>689
gcc使っても>>668の用件に合わせるのは難しいままだろ?
無知蒙昧な人?

693:デフォルトの名無しさん
04/06/27 17:10
>>689-692
GNU Common Lispでマクロをいじれば何とかなりそう。

694:デフォルトの名無しさん
04/06/27 17:10
URLリンク(www.cminusminus.org)
URLリンク(cs1.cs.nyu.edu)
URLリンク(llvm.cs.uiuc.edu)
URLリンク(gcc.gnu.org)

C--, MLRISC, LLVM, RTL...
色々在るけど、誰か使った事ある?

695:デフォルトの名無しさん
04/06/27 23:04
>>685
まあ、ここ見てる奴は「ネイティブコード」と書いてあるからそんな疑問は浮かばんわけだが。

696:デフォルトの名無しさん
04/06/28 00:10
ネイティブコードと、オブジェクト(実行可能)ファイルを混同して考えるのはお前くらいなものだが。

697:デフォルトの名無しさん
04/06/28 00:28
C--は使ったことあるよ。
結構面白いけど、関数型言語とか論理型言語とか、
実装研究がまだまだ行われている言語向けだなあ。

698:デフォルトの名無しさん
04/06/29 18:16
Common Lispのプリプロセッサ(マクロ)って
そんなに自由度が高いの?

699:デフォルトの名無しさん
04/06/29 20:58
>>698
自由度は高いよ。
マクロ定義とは実質的にLispコードを生成する関数だとか。

まあ、C++のtemplateもだけど自由度が高ければ高いほど解読しにくいわけで、
達人以外が使っても生産性が大して上がらない気もする。

700:デフォルトの名無しさん
04/06/29 22:39
Lispのマクロは
評価時に展開されるから
*プリ*プロセッサとは言わない


701:デフォルトの名無しさん
04/06/30 22:18
>>700
評価に先駆けて展開しといたり、
コンパイル時にも展開できるわけだが。
まあ話を平たくすると、いつでもできるわけだ。


702:700
04/06/30 23:25
>>701
Lispの評価器に関する知識が必要な話を
マクロ=プリプロセッサという世界のの人に
今説明しても混乱するだけかと


703:デフォルトの名無しさん
04/07/01 00:28
>>698
S式を二回評価すると思ってね。(おおざっぱ)
一回目でプログラムの生成、二回目で生成されたプログラムの実行。
LispはデータもプログラムもS式だから、
こういうのは機構的にもプログラミング的にも簡単。
一度遊んでみると良い。

704:デフォルトの名無しさん
04/07/01 12:02
C, C++だと
MYMACRO(a,b,c) { ... } // a,b,c,..は可変個引数
から
 int a=0;
 int b=1;
 int c=2;
 ...
 my_macro_end(a,b,c);
を生成するようなのは書けないでしょ? Lispのマクロはできます。

C++やJavaだとデザインパターンなどで似たようなコードをクラス毎にあちこち
で書かないといけない(が、C++のテンプレートでは表現できない)ことがある。
そういう場合にパラメータを与えて雛形からコードを生成するスクリプトをRuby
などで書くことを考えましょう。
Lispのマクロなら全部Lispだけでできます。


705:デフォルトの名無しさん
04/07/01 12:03
後はなんだろう。処理に必要なデータを静的に持っておきたいとしましょう。
例えば、isdigit()のために、その文字が数字かどうかを記録した1バイト文字
256個分のテーブル(文字が数字なら1、数字でなければ0)を定義したいとします。
そこで、
int isdigit_table[] = {
 0, 0, 0, ...., 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...., 0
};
と書く代わりに
int isdigit_table[] = {
 (eval-when-compile // コンパイル時に実行
  int table[256];
  char* digits="0123456789";
  memset(table, 0, 256);
  for (char* d=digits; *d!='\0'; d++)
    table[*d] = 1;
  return table;)
};
みたいなことを書けば、(eval-when-compile ...)で囲んだ処理をコンパイラが
実行して、その結果のテーブルとして同じ中身のisdigit_tableを定義できると
思ってください。
C++だとコンストラクタでもできますね(コンパイル時でなく実行時になりますが)。

要するに、C/C++のマクロ(cpp)が格段に高機能な言語になったとしましょう
(C自体では嬉しくないから、RubyとかPHPとか?)。その場合のC,C++に相当する本
体の言語がLispであり、ついでにcppの言語も同じLispになったと考えればいいです。


706:デフォルトの名無しさん
04/07/01 13:58
まあLispは面白い言語なので
SICPは読んで損がない本だと思うよ

707:デフォルトの名無しさん
04/07/01 23:20
まぁ、LISPやる奴で実用的なプログラム書ける奴見たこと無いんだけど?


708:デフォルトの名無しさん
04/07/01 23:36
>>707
emacsってそんなに使い物にならない環境なのか。なるほど。

やっぱvi?(違

709:デフォルトの名無しさん
04/07/01 23:38
xyzzyがWin emacsの筆頭?

710:デフォルトの名無しさん
04/07/01 23:58
>>704
C++でならTypeList or boost::mpl使えば書けそう。
まあ流石に100個も200個も可変長引数を渡されると無理だろうけど。


711:デフォルトの名無しさん
04/07/02 00:12
ECMAScriptを解析してくれて、しかも組み込み関数・オブジェクトを定義できるライブラリが欲しい
自作すると変数宣言と組み込み関数・オブジェクトのみになりそうだ

712:デフォルトの名無しさん
04/07/02 00:38
Schemeは括弧さえ折り合いつけば最高の言語の一つだ

713:デフォルトの名無しさん
04/07/02 14:23
>>711
クロスプラットフォームなら spidermonkey とか、
Windows だけでいいなら ActiveScript とか。
どちらでも簡単にできるよ。

714:デフォルトの名無しさん
04/07/02 17:21
>>709
>Win emacsの筆頭

Meadowの方が広く使われてます。

715:デフォルトの名無しさん
04/07/02 22:36
>>713
SpiderMonkeyはかなりよさげだね
しかし英語だらけで組み込めるのは当分先か・・w

716:デフォルトの名無しさん
04/07/03 10:17
>>704
そういうプリプロセサ書いて、差し替えれば済む話だと思うけど。

全部 C/C++ でできますよ。(藁

717:デフォルトの名無しさん
04/07/03 10:38
C/C++ではたしかpreprocessor commandsも規格の一部な罠。


718:デフォルトの名無しさん
04/07/03 11:22
プリプロセッサを差し替えるオプションなんてあるの?
Visual C++とgccを見たけど見つからなかった。


719:デフォルトの名無しさん
04/07/03 15:40
>>716 それじゃ「コンパイラ書けばできますよ」ってのと変わらないやん.

720:デフォルトの名無しさん
04/07/03 22:50
>>718
自分のプリプロセッサから、コンパイラ呼べばイイだけじゃない?

721:デフォルトの名無しさん
04/07/04 02:06
>>720
そりゃそうだ。でも差し替えるとは言わんな。下らないことをきいてしまった……。


722:デフォルトの名無しさん
04/07/04 09:28
差し換えるならspecファイルだろ。

723:デフォルトの名無しさん
04/07/04 11:46
>>718
GCC とかならソースあるんだから、適当に修正して実行ファイル入れ替えれば良いんじゃないのか ?

>>719
まあ、そりゃそうだけど、コンパイラ書くより多少難易度は低いだろ。

724:デフォルトの名無しさん
04/07/04 16:57
結局使い物にはならないと。
普通のアプリケーション書くのに特定のコンパイラのバージョンとそれへのパッ
チ込みで保守したくはねーなあ。


725:デフォルトの名無しさん
04/07/04 18:28
まあ、このスレ的にはコンパイラまで作ってしまえって事になるかな。
TinyC->.asm位だったら簡単だしね。

俺は#defineなどC言語準拠なプリプロセッサに
アセンブラ風の複数行マクロを使えるような物を作って、
言語ごとに微調整しているよ。
()を使わないバージョンなどね。

エラーを探知するために、##lineっていう
現在のコンパイル行をプリプロセッサ->コンパイラへ通知する命令をつくって、
デバックもしやすくしているよ。

726:デフォルトの名無しさん
04/07/04 21:39
>>724
て言うか、普通のアプリケーション書くのに >>704 みたいなことはあまり必要ないだろ。
マクロプロセサやプリプロセサが高機能だと色々おもしろいけど、実際のところ後の保守が大変だったりするからあまり使わん。

昔使った PL/I のプリプロセサは、IF 文は当然、FOR/WHILE の制御構造や PROCEDURE/FUNCTION なんかの手続き/関数定義までできた。
だから凝った定義を書けば、ソースを短く書けたけど、プリプロセサ文をデバッグする手間を考えたら素直にソースを手で展開した方が早かったよ。(藁

MASM なんかのマクロアセンブラでも同じような経験したことある人は多いと思うよ。

727:デフォルトの名無しさん
04/07/05 01:31
俺はわりとしょっちゅう欲しくなる方だな。
Lispのマクロで俺言語を作ることを考えると>>726も想像はできるけど。
>>726とは逆に最初書くときはベタに展開したソースを書くけど後から
保守性を考えてマクロでまとめることも。あまり凝ったことはしないけどさ。
cppに変数とifとfor eachだけでもあれば世の中もうちっと良かったろうに。


728:デフォルトの名無しさん
04/07/13 22:28
コンパイラとかの参考図書は、よくありますが
スクリプト言語の参考図書(定番)は、ごぞんじないですか?


729:デフォルトの名無しさん
04/07/13 22:52
各OS毎のリソースコンパイラの作り方に触れたサイトってありますか?

730:デフォルトの名無しさん
04/07/14 00:35
>>728
その二つに大きな違いはない。

731:デフォルトの名無しさん
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:デフォルトの名無しさん
04/07/14 01:39
>実行機

ってなんじゃらほい?

734:デフォルトの名無しさん
04/07/14 11:23
>>728
『インタプリタ進化論』なんかいいのでは。スクリプトに特化した内容ってわけでもないけど。

735:デフォルトの名無しさん
04/07/14 19:49
このスレでよく出てくるyaccやlexってのはソフトウェアなの?
それともライブラリの類?
で、実際にはどのようなことをするものなの?

736:デフォルトの名無しさん
04/07/14 20:00
>>735
URLリンク(www.linux.or.jp)

737:735
04/07/14 21:00
つまり、字句解析や構文解析をするソフトウェアね。
コンパイラにおけるそれらの処理を外部のソフトウェアに
頼ると言うのは有りかね?

738:デフォルトの名無しさん
04/07/14 21:02
>>737
何を言ってるの?

739:ほんたま
04/07/14 21:26
おみゃ~らよ、おれのスリムドカンはある意味コンパイラよ。
スリムドカンはおれのページにあるから見ちみれ?

URLリンク(hp.vector.co.jp)
おみゃ~らよ、おれはいまリソースエディタをつくってるのよ。
スリムドカンに装備させるためよ。
おみゃ~らよ、コンパイラをつくるのはいいが、リソースエディタのないコンパイラはコンパイラとはいわんぞ!
自分じわかるかな?


740:デフォルトの名無しさん
04/07/15 00:53
>>737
字句解析や構文解析をするソースコードを生成してくれるソフト
これ以上は自分で調べてくれ

741:デフォルトの名無しさん
04/07/15 04:40
>>735
あなた、最高に頭悪そうですよ?

742:デフォルトの名無しさん
04/07/15 18:37
昔、OL進化論っていうのがあったなぁ~
ちょっと思い出したw


743:デフォルトの名無しさん
04/07/15 19:34
インタプリタ進化論って、絶版じゃなかったっけ?
読みやすい本でいい本だと思うけど、
実行環境の話はそれほど無かったような気がします。
とはいっても、字句/構文/意味解析を作るより
実行環境を作るのって、力業でできますしそんなに難しくないと思いますよ。

744:デフォルトの名無しさん
04/07/15 23:56
My VMをレジスタマシンにするかスタックマシンにするか悩む

スタックマシンにすると決めた、するとbytecodeにするかwordcodeにするかまた悩む

スピードの為にwordcodeにするならそもそもレジスタマシンにするべきなのかと悩む

一向に前に進みましぇん

745:ほんたま
04/07/16 00:05
おみゃ~らよ、おみゃ~らさーん♪
おりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪
「Slim de Can」ってすげ~な~、イベントドリブンプログラムが作成できるとこまでついに進化したよ。
おりはもう神だね♪どうよ?

URLリンク(hp.vector.co.jp)


746:デフォルトの名無しさん
04/07/16 01:05
全部作れ。


747:ほんたま
04/07/16 13:55
おみゃ~らよ、おみゃ~らさーん♪
おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。
つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。
おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか?
「Slim de Can」ってすげ~な~。
おりはもう神だね♪どうよ?

URLリンク(hp.vector.co.jp)


748:デフォルトの名無しさん
04/07/16 22:00
コンパイラ作るならBNF記法(拡張)についての理解は必須ですか?

749:デフォルトの名無しさん
04/07/16 22:13
無くても作れるよ。あった方が楽だけど。

750:デフォルトの名無しさん
04/07/17 00:00
context free grammerについては「理解」という程大変なことはない気がする。
# オートマトンを理解するにはちっと勉強が必要になるが、
# それこそ知らなくても何とかなりそう

なおLL(1)文法と属性文法を学んでしまえばりっぱな「コンパイラ」が作れると思う。
# リンカとかアセンブラとかの知識は既習だとして

751:デフォルトの名無しさん
04/07/17 03:09
言語設計はともかく、コンパイラ設計となったら
フロントエンドよりバックエンドのが難しいというか
面白いと思うんだが、どうしてフロントエンドの話しか出ないんだろうか?


752:デフォルトの名無しさん
04/07/17 03:43
たぶん、そこまで行きつかない奴しかこのスレにいないから。


753:デフォルトの名無しさん
04/07/17 09:41
バック部のトピックス

・並列化(ループ,タスク.手続き間解析は必須)
・別名解析(フロー依存はまだ重い)
・SSA(冗長コピーをどう減らす? 別名の扱いも)
・コピー伝播(非常に重要.でも語ることは余りないか)
・部分冗長性削除(やりすぎると性能悪化することも.ライブレンジを考慮)
・CPS(手続き型ではやらんか)
・レジスタ割付け(PowerPCとかなら素直だが,制約のきついCPUだと面倒)
・ソフトウェアパイプライン(最内からやらない手法が最近発表されてた)
・命令スケジューリング(コンパイル時間爆発の主犯)
・SIMD命令やDSP命令の生成(上から下までからむので大変.パターンマッチしかない?)

754:デフォルトの名無しさん
04/07/17 18:50
本日、佐々政孝氏の「プログラミング言語処理系」という本買いました。
コンパイラについてちゃんと学んでいこうかと思います。

755:デフォルトの名無しさん
04/07/17 19:02
バック部はCにトランスレートする事で済ませちゃってるから、あんまやらないんだよな。
とはいっても、最近の仕事でそういうのをする必要もあったりして
書籍紹介とかやってもらえます?


756:デフォルトの名無しさん
04/07/17 19:07
そういや 21st Century Compilers 読んだ人いる?

757:デフォルトの名無しさん
04/07/17 19:57
あぁ、それね…。2005年11月15日に延びたみたい。_| ̄|○
URLリンク(www.aw-bc.com)
 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:デフォルトの名無しさん
04/07/17 20:54
何でそんなに詳しいのに新たな言語を作ろうとしないの?

761:デフォルトの名無しさん
04/07/17 20:57
>>760
何でそんな労力割かなきゃならぬ?

762:デフォルトの名無しさん
04/07/17 21:05
>>757
がぁん。評判よければ夏休みにでも読もうと思ってたんだが。

763:デフォルトの名無しさん
04/07/17 21:17
目を通すだけで満足だから何も作らんのだろうな

764:デフォルトの名無しさん
04/07/17 21:21
バックエンドまで作りこんだ言語を書いても、それで食ってける人はごく少数だし。
理屈を理解して普段のプログラミングに生かせれば、それで良いかと。

765:デフォルトの名無しさん
04/07/17 21:36
>>761
本当はコンパイラの原理とかよく分かって無いんだよな?

766:デフォルトの名無しさん
04/07/17 22:08
原理を理解→新しい言語、でもあるまいに

767:デフォルトの名無しさん
04/07/17 23:31
>>760
一番多い需要は新しい言語の作成ではなく、特定分野特化物だからだよ
趣味の人は確かに新しい言語って事になるんだろうけどね。

768:デフォルトの名無しさん
04/07/18 00:44
言語ビジネスは死々累々とはMatz氏の言

769:デフォルトの名無しさん
04/07/18 01:01
>>768
つまり「俺ってば勝ち組w」と主張されたのですね?

770:デフォルトの名無しさん
04/07/18 01:11
>>764
その反対でバックエンドがほとんどのお仕事もあるよ、
特殊なDSPとかの強力オプティマイザ付き簡易言語関係とか。


771:デフォルトの名無しさん
04/07/18 13:04
割込みすいません、bisonの-v出力で得られる

State番号と、もとのソースの行番号を関連づける情報ってどこでしょうか?
同様に、 Rule番号と、もとのソースの行番号を関連づける情報ってどこでしょうか?

bisonマニュアルやbison本(といっても古いだけですが)を見ても、載ってませんでした。


772:デフォルトの名無しさん
04/07/18 14:25
>>771
行番号との関連?
別に行番号とは関連しないんじゃない?

773:771
04/07/18 17:10
どうも、Conflict が発生するようで、いろいろと原因を探ってるんですが、
「State何番が何番とconflictした。」とか出て来るんですが、
具体的にソースのどこがいけないのか場所を探すのに、いつも苦労しているのです。



774:デフォルトの名無しさん
04/07/20 17:56
構文解析器を作るのに正規表現が必要になりますけど、
正規表現の構文解析ってどうすりゃいいんでしょうか?
ものすごく再帰してるんですけど?

775:デフォルトの名無しさん
04/07/20 17:57
再帰っつーか永久ループですね。

776:デフォルトの名無しさん
04/07/20 18:22
>>774
>構文解析器を作るのに正規表現が必要になりますけど、
無くてもできます

777:デフォルトの名無しさん
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:デフォルトの名無しさん
04/07/29 20:01
>>778
なんのエラーが出てます?

780:デフォルトの名無しさん
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:デフォルトの名無しさん
04/07/30 11:54
>>781
そういう場合は、ここに貼り付けて
URLリンク(do.sakura.ne.jp)


783:>
04/07/30 12:32
>>782さん
こちらにCソースファイルを貼り付けました。
よくわからなかったので、まちがってスレを立ててしまいましたorz

URLリンク(do.sakura.ne.jp)

すみませんが、よろしくお願いします。
これでだめでしたら、FLEXソースも貼り付けますので・・・

784:デフォルトの名無しさん
04/07/30 13:00
>>783
あぅ、上手く行っても、変更点の説明がしにくいと思うので、ソースもよろしこ。
#なんとなく見えてますが、上手く行くかどうかは不明。

785:>
04/07/30 13:09
>>784さん

元のFLEXソースを
URLリンク(do.sakura.ne.jp)
においておきます

786:784じゃないけど
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:デフォルトの名無しさん
04/07/30 13:55
3. コンパイラのcharをunsignedにするオプションを指定する

788:ありがとうございます!!
04/07/30 14:18
みなさん ありがとうございます。

とりあえず>>786さんの
「1. Zsscanf の第1引数の型を unsigned char * にするか」で
対応し、エラーを回避させました。

それともう一つ基本的な質問ですが、
この作成されたCソースファイルは、
どのように動作させればいいのでしょうか?
ライブラリとして動作させる場合、
どの関数をよべばよろしいのでしょうか?
(main関数を作成し、それから呼ぶのもどうすればいいのでしょうか?)

すみませんが、ご教授お願いします。


789:デフォルトの名無しさん
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);
コンパイル方法
URLリンク(www.cygwin.com)
より "Install or update now!" をクリックして実行してください。
あとはメッセージにしたがって、インストールするのですが、パッケージの選択のところで flex を入れておく事。
flexの入っているフォルダーにパスを通したら、
flex flex_test.l
cl flex_test.c
以上です、
あと、_yywrap _yylex はちゃんと定義して置いてください。
出力結果をC++としてコンパイルしたいのであれば、786氏の意見を参考すれば良いかと思います。


790:デフォルトの名無しさん
04/07/30 14:35
>>788
yylexを呼び出します。
そのあたりは初歩の初歩部分なので、適当に参考書でも買ってきて調べてみるとよいでしょう。
入出力の特化は結構ややこしいので・・・


791:>>778です
04/07/30 14:53
みなさん いろいろ教えてくださってありがとうございます。。。

>>790さん 
yylex()を呼び出すというのまでは、調べたのですが
これを呼び出すとDOS窓で入力待ちなのかどうかは、わかりませんが
止まったままになってしまします。
いろんなサンプルを見てみたら
単に
return yylex();
としているだけなのが、あったので
このように書いていたのですが・・・・
こういう呼び出し方ではいけないのでしょうか?

何度も何度もすみませんが、
ご教授お願いします。

792:デフォルトの名無しさん
04/07/30 14:59
>>791
一番簡単な方法は
yyin = fopen( ... ) ;
として
yylex()
を呼び出します。


793:>>778です
04/07/30 15:18
>>792さん

ファイルからの読み込みではなく
指定された文字列を受け取って
それを変換かけてから、変換後の文字列を
返すというようなプログラムを組みたいのです。

yytextに指定文字列を入れてから
yylex()を呼び出せばよろしいのでしょうか?
(どこかのサンプルでこのような形のものがあったのですが・・・)

794:デフォルトの名無しさん
04/07/30 15:22
>>793
ちがいまーす!!(^^;
実は貴方のやりたい事は、書き始めると結構ヘビーです。
素直にflexの本を買ったほうが良いかと・・・・
どうしても買いたくなげは YY_INPUT マクロを気合で読んでみるとか?


795:>
04/07/30 15:32
>>794 さん
では、入力したい文字列を
一度ファイルに落としてから
再度、yyin = fopen( ... ) ;
で読み込むという方法だと
まずいでしょうか?

796:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/07/31 01:14
>>799
見方を理解しようとしないで、LR解析をある程度理解した方
が良いと思うよ。
そうするとbison.outputの意味が分かるようになる。

801:799
04/07/31 22:52
LR解析を理解するための、書籍とかありますか?


802:デフォルトの名無しさん
04/07/31 22:54
はじめてのLR

803:デフォルトの名無しさん
04/07/31 22:54
1つの先読みだけしか許されないというのは、かなり不自由かも。
LR(1)を完璧に実装した yacc もどきってご存知ないですか?


804:800
04/08/01 00:44
800ゴット

>>799=801
コンパイラ系の書籍ならば、大抵構文解析の説明はあるでしょ。
手元の本だと『ドラゴンブック』と『コンパイラの理論と実現』と
『コンパイラ(昭昇堂)』にLR解析の話が書いてある。

>>803
知らないけど、あまり不自由を感じたこと無いな>先読み1
たいしたもの作ってないからかな。

805:デフォルトの名無しさん
04/08/01 01:08
Catalog of Free Compilers and Interpreters.
URLリンク(www.idiom.com)

806:デフォルトの名無しさん
04/08/01 02:53
>>803
LLだけとboost::splitを使ってみるとか。
URLリンク(boost.cppll.jp)

でも、文法を変えたほうがいいかもね
LALR(1)の鬼畜パーススピードを捨てるのはもったいないべ。


807:デフォルトの名無しさん
04/08/01 03:41
LR
LL
LALR
ってなんの略?
(1)
ってのは1つ先見るってことでよい?

808:デフォルトの名無しさん
04/08/01 04:04
manの番号

809:デフォルトの名無しさん
04/08/01 06:21
>>807
Lonely Rotary
Lonely Lolita
Lolita and Lonely Rotary

810:デフォルトの名無しさん
04/08/01 12:50
>>807
LR:左から読んで右から導出
LL:左から読んで左から導出
LALR:ルックアヘッド付きLR


811:デフォルトの名無しさん
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:デフォルトの名無しさん
04/08/01 15:57
>>812
探せば GLR 使えるパーサジェネレータもあるぞ。

814:デフォルトの名無しさん
04/08/01 16:49
>>812
漏れはむしろ「欲しい例」を出して欲しい。

815:デフォルトの名無しさん
04/08/01 18:10
世の中LALR(1)が圧倒的な主流。
それ以外はただの学問的な研究対象か趣味。

まぁ、炉利趣味と同レベルw


816:デフォルトの名無しさん
04/08/01 18:11
DelphiはLALRじゃないのでは?

817:デフォルトの名無しさん
04/08/01 18:40
>>815
C++ は LALR(1) に収まらないワケだが。

818:デフォルトの名無しさん
04/08/01 21:49
>>817
それは書き方が悪いからでしょ?
あんなもん、書こうとおもえばいくらでも当てはめられる。
(と思う。)


819:デフォルトの名無しさん
04/08/01 21:59
俺はめんどくさいから再起下降でいいよ

820:デフォルトの名無しさん
04/08/01 22:38
俺は再帰降下でいいや


821:デフォルトの名無しさん
04/08/01 22:40
抗菌加工でいいや

822:>>778です
04/08/02 15:41
お礼が遅れましてもうしわけございません。
ありがとうございました。

>>794さんがおっしゃっていた YY_INPUT のサンプルをいろいろ
探したのですが、これの他にもDOS窓から入力された文字列を
変換するなんていうマクロなどありますでしょうか?

823:デフォルトの名無しさん
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
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:デフォルトの名無しさん
04/08/02 22:31
>>826
すぐ下で答えが出てるじゃん。

829:800
04/08/02 22:46
>>827
解説してないね。
でも、典型的なシフト還元衝突などの説明と回避方法の解説はある。
ってかこの本もう絶版じゃない? 手に入るの?

830:デフォルトの名無しさん
04/08/03 17:27
>>791
yyinを指定しないと入力が標準入力になるからそうなるのでしょう

831:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/01 10:01
う~ん。名前空間の実装法がわからん。
だれか、参考になるサイトか書籍、知らないか?

クラス定義と同じ方法で良いのかなぁ?

838:デフォルトの名無しさん
04/09/01 10:32
>>837
シンボルテーブルのスタックを作ればいいだけじゃないか?

839:デフォルトの名無しさん
04/09/01 13:55
>>838
>シンボルテーブルのスタックを作ればいいだけじゃないか?

それってディスプレイ・・・・・だよねぇ。
ブロックを開くときに名前を覚えておくようにするんだろうか?

840:デフォルトの名無しさん
04/09/01 19:40
例えばC++には複数の名前空間があってややこしい

キーワード
演算子
プリプロセッサ

変数
namespace

これらは関係を持ったりするしね
まあプリプロセッサを除いて基本はみな同じだけど

841:デフォルトの名無しさん
04/09/01 19:42
名前空間は
関数 namespace クラス
だけじゃないのか?

842:デフォルトの名無しさん
04/09/01 19:46
::、using、export、importが絡むとさらに複雑になる

843:デフォルトの名無しさん
04/09/01 19:57
:: using は簡単
export importはどうだろ

844:デフォルトの名無しさん
04/09/01 20:24
>>840
何を持って基本というか知らんが、実装しようと思うと namespace は深いぞ。
ADL と関数テンプレートとか。

845:デフォルトの名無しさん
04/09/03 18:29
所詮 namespace は、バカ避けの機能。

優秀なコンパイラ屋が血反吐を吐きながら実装するものの、
それによって実行速度が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初から namespace など
必要としない確固としたコーディングスタイルを身に着けている。

そしてバカなプログラマは、せっかく実装してもらった機能の
使い方自体が分からない。バカは所詮バカ。

namespace って、一体何の為にあるんだろう・・・


846:デフォルトの名無しさん
04/09/03 18:50
↑ホームラン級のバカ

847:デフォルトの名無しさん
04/09/03 19:24
所詮 型 は、バカ避けの機能。

優秀なコンパイラ屋が血反吐を吐きながら実装するものの、
それによって実行速度が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初から 型 など
必要としない確固としたコーディングスタイルを身に着けている。

そしてバカなプログラマは、せっかく実装してもらった機能の
使い方自体が分からない。バカは所詮バカ。

型 って、一体何の為にあるんだろう・・・


848:デフォルトの名無しさん
04/09/03 20:04
ダウト。残念ながら、型によって実行速度は上がるんだよ。


849:デフォルトの名無しさん
04/09/03 20:15
いくらなんでも型は重要だろう。

850:デフォルトの名無しさん
04/09/03 20:16
>>845
評価尺度が実行速度だけとは……。1960 年代の人間ですかい?

851:デフォルトの名無しさん
04/09/03 21:23
60年代だったら消費メモリも重要だな。

852:デフォルトの名無しさん
04/09/04 01:00
所詮「コンパイラ・スクリプトエンジン」相談室 は、バカ避けのスレ。

優秀なプログラマが血反吐を吐きながら回答するものの、
それによって理解が向上する訳も無く・・・

そもそも優秀なプログラマならば、最初からこのスレ など
必要としない確固とした技術を身に着けている。

そしてバカなプログラマは、せっかく回答してもらった説明の
内容自体が分からない。バカは所詮バカ。

このスレって、一体何の為にあるんだろう・・・

853:デフォルトの名無しさん
04/09/04 01:01
>>852
ワラタ

854:マイク ◆yrBrqfF1Ew
04/09/04 01:22
namespaceは最高だな。
感動もんだ。

855:デフォルトの名無しさん
04/09/04 11:21
>>852
無理してまで回答は僕もしないし、他の人もしてないんじゃない。
コンパイラやスクリプトを作ろうという人口は少ないから過疎なのは仕方が無いが
僕は日ごろから巡回しているし、このスレ向きの質問書けば回答は帰ってくるよ。
もちろん僕もクレクレ君とOO厨房の言語論争的な話題は放置してるけどね。;-P
キミには分らないかもしれないが機能しいてない掲示板ではないよ、
進行が遅いに加えて近頃アホっぽい話題が充満しているだけだ。

856:デフォルトの名無しさん
04/09/04 12:52
>>855
( д ) ゚ ゚

857:デフォルトの名無しさん
04/09/04 16:13
ひさびさにコピペにマジレス見た・・・

858:デフォルトの名無しさん
04/09/04 16:48
型の実装について教えてください。
現在 int のみのコンパイラは作れたのですが
float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
実行するときに int か float か if で判断するしか無いのでしょうか?
2つならまだしも double とか char を追加するとなると代入するとき等の型判定で
組み合わせの爆発が起きそうなのですがなにか良い方法はないでしょうか?
速度的に。

859:デフォルトの名無しさん
04/09/04 17:02
テーブル作るか int float を別文法にしてしまうか……
てか、こんな事は自分で考えろ。

860:デフォルトの名無しさん
04/09/04 17:07
>>858
>現在 int のみのコンパイラは作れたのですが
>float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
>実行するときに int か float か if で判断するしか無いのでしょうか?

って、そんなのコンパイル出来たって言えないやん。。。
何の為の型なのさ?


861:デフォルトの名無しさん
04/09/04 17:11
変数に型情報があってコンパイラを作っているのなら、
コンパイルの時点で型にあったコードを生成するだけだろ。
実行時じゃなくて。


862:デフォルトの名無しさん
04/09/04 17:12
>>860 ハァ

863:デフォルトの名無しさん
04/09/04 18:27
>>860
バカ避けの機能

864:デフォルトの名無しさん
04/09/04 18:59
>>859-861
おぼろげながら自分の間違いが分かってきました。
どうもです。

もう少し考えてみます。

865:デフォルトの名無しさん
04/09/04 20:09
>>858
実行時に型チェックするかコンパイル時に型チェックするかは、言語の設計に
大きく関わってくるけど、まぁどっちでも良い。

コンパイル時に型チェックしたければ、たとえば Yacc 風に書くと

IDENT '=' experssion:
  {
    // まず IDENT が変数名であることを確認
    // 次に experssion の型が IDENT の型に変換できることを確認
    // 型変換して代入するコードを生成
  }
  ;

ってな感じ。型変換判定は素直に実装すると型の数の 2 乗のオーダーで増えるが、
テーブルにでも書いておけば大した手間ではない。ベタに if - else とかで書くと死ぬ。

866:デフォルトの名無しさん
04/09/04 21:46
YACC はバカ避けのソフト。


867:デフォルトの名無しさん
04/09/04 22:46
作ってて楽しけりゃなんだっていい

868:デフォルトの名無しさん
04/09/05 06:46
( ゚д゚)、ペッ

869:デフォルトの名無しさん
04/09/05 15:32
型についてはシンボルテーブルで管理すれば良いでしょ。

シンボル表のエントリに型情報をもたせ、それが基本型を
ポイントすることで、個々のシンボルの型を表現します。
struct や class などの基本型をまとめた型を作るときも
シンボル表にそれらの新しい型のエントリを作って、基本型を
リスト状にポイントしていけばよいです。

870:デフォルトの名無しさん
04/09/05 17:16
所詮 lex は、バカ避けのソフト。
(以下ry


871:デフォルトの名無しさん
04/09/05 17:47
>>855
wrota

872:デフォルトの名無しさん
04/09/05 19:51
>>870-871
意味の無いレスいれるの止めてくんない、近頃こんなレスばっかりで
前後の見通しが悪くてかなわないんだよ、邪魔だから適当な言語死滅スレにでもいってくれ。

873:デフォルトの名無しさん
04/09/05 20:08
その発言は結局荒れるもとになるよ。
そして、大量に無駄な情報のなかから有用なものを抜き出すのが2chの利用法だと思う。

874:デフォルトの名無しさん
04/09/05 20:12
過疎スレでやってくれるなよなとは思う

875:デフォルトの名無しさん
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:デフォルトの名無しさん
04/09/14 18:08:01
876=877
wrota書くのに一分もかかってんじゃねーよ。


879:デフォルトの名無しさん
04/09/14 23:04:15
>>878
!= だが何か?


880:デフォルトの名無しさん
04/09/14 23:09:55
3日後

870 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

871 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

872 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

~略~

879 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん

880 名前:デフォルトの名無しさん 投稿日:あぼーん
あぼーん



何のためのスレなんだか


881:デフォルトの名無しさん
04/09/14 23:28:47
なんか恐ろしく自己中なヤツがいるようですが…

882:デフォルトの名無しさん
04/09/15 00:36:49
名前もあぼーんになるはずだが

883:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/06 00:42:29
>>889
Schemeとか、どっちでも使える言語も結構ある。

891:デフォルトの名無しさん
04/10/06 00:57:17
そういう意味ではLISP系探すと強いね。
とりあえずS式が読めればなんでもいいわけだし。

892:デフォルトの名無しさん
04/10/06 10:39:52
>>889
TCLとか


893:デフォルトの名無しさん
04/10/06 12:59:19
>>889
JavaSript というか ECMAScript がいいんじゃない?
簡単だし。

894:デフォルトの名無しさん
04/10/06 18:10:12
みんな自分が使っているのを薦めている予感。

895:デフォルトの名無しさん
04/10/06 21:08:06
bashスクリプトがイイと思うよ。


896:889
04/10/06 21:33:47
どうもです。
その辺りのキーワードを頼りに探してみます。
ありがとうございました。

897:デフォルトの名無しさん
04/10/06 22:50:27
とりあえずECMAScript(の実装)が簡単だという意見が本気でわからん

898:デフォルトの名無しさん
04/10/06 22:53:42
LISPは1000行も書けばそこそこ使えるものができる
Javaだともっと短いかも

899:デフォルトの名無しさん
04/10/06 23:04:05
>>897
>C++、Javaで同じスクリプトを動かしたいんですが、
>自作するしかないでしょうか。

って質問だったので、C++とJava での実装が容易に利用できる ECMAScript を勧めました。


900:デフォルトの名無しさん
04/10/06 23:14:01
ECMA Scriptだと、MozillaのSpiderMonkeyとRhinoが
良さそうだね。

901:デフォルトの名無しさん
04/10/06 23:28:14
Pythonは?

902:デフォルトの名無しさん
04/10/06 23:31:24
>>901
ぴちょん(・∀・)!


903:デフォルトの名無しさん
04/10/08 08:18:15
ネイティブコンパイルする処理系を作成中です

904:デフォルトの名無しさん
04/10/09 09:13:05
完成です

905:デフォルトの名無しさん
04/10/09 14:51:55
じりじり

906:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/10 15:30:32
>>907
全部網羅って C∞ のテストをしたいって事?

910:デフォルトの名無しさん
04/10/10 19:19:42
確立した方式など無いと思うが…
なので、実績の積み上げしか無いと思われ。


911:デフォルトの名無しさん
04/10/10 20:24:50
>>908
行カバレッジが100%になるようなテストセットを作るとか。

912:デフォルトの名無しさん
04/10/11 21:40:00
Bisonでparseした時、エラーの出た行をしらべるにはどうするの?

913:デフォルトの名無しさん
04/10/12 00:36:07
flexからbisonに渡すTokenに行番号の情報を入れといて、エラー発生時に取り出して使う、
でいいんじゃない?


914:912
04/10/12 23:08:03
>>913どうもです、flexのhelpみてたらoptionでありました

915:デフォルトの名無しさん
04/10/13 21:00:24
>>914
それはflexの中だけだろ?
bisonとは微妙にずれる場合も多い。

>>913 が王道かも。


916:デフォルトの名無しさん
04/10/15 20:56:20
DLLの関数呼び出しって、参照が一回挟まると思うんだけど、
ループで何べんも呼ぶと普通の関数呼び出しよりパフォーマンスに影響出る?
自分の処理系では参照をはさまない様に(つまりLoadLibraryと同じ方式)
してるけどいまいち差がわからない。
それよりも配置情報テーブルのサイズ減らした方が得なのかなと思ったり。

917:デフォルトの名無しさん
04/10/15 22:32:51
>>916
間接参照になる分だけ、パフォーマンスは落ちる。でも関数内部が
一行だけとかでない限り、あまり気にしないで良いと思うぞ。

とりあえず計ってみたら?

918:デフォルトの名無しさん
04/10/16 11:20:18
>>917
コンテキスト切り替えとか食らうと凄く影響するけど、
間接参照が一個増えた程度ではパフォーマンスにそれほど影響しないような…

昔、C++ で virtual ありと無しのメンバ関数で速度測ったら
virtual ありの方が速くてびっくりした事もあるし。

919:デフォルトの名無しさん
04/10/16 11:38:42
それはお前の計り方が間違ってただけだろう。

920:デフォルトの名無しさん
04/10/16 11:52:11
>>919
誤差で逆転しただけかもしれんがね。

っつか、測定前から virtualありの方が遅いと決め付けてるなら測定する意味が無いような。

921:デフォルトの名無しさん
04/10/16 11:58:21
>>920
その測定ソース、どんな感じに作ったのか晒してみ。

922:デフォルトの名無しさん
04/10/16 12:14:42
>>921
virtualありの関数を持つクラスとなしの関数を持つクラス作って
ループでn回関数を呼び出す、ループ前とループ後の時間から
かかった時間を割り出す普通のマイクロベンチだったと思うが。

関数の中身は空だったか、軽い計算させてたかは覚えてない。

あとはアセンブラの出力を見て最適化で関数呼び出しが削除されてない事と
virtualありの方は間接参照を介している事を確認した。

923:デフォルトの名無しさん
04/10/16 13:49:08
まぁ、システムをスタティックリンクにしてからだな


924:デフォルトの名無しさん
04/10/16 14:15:49
>>923
それは >>916-922 と関係あるのか?

925:デフォルトの名無しさん
04/10/28 21:26:06
日経ソフトウェアの推薦書籍コーナーで、中田さんの本が2冊あげられていた。
取り上げていた人はどちらもすごい方なので、ちと読んでみようかなという気が沸き起こった。

926:925
04/10/28 21:40:42
それにしても\10000を超えるって、やっぱり高い。

コンパイラの構成と最適化
中田 育男 (著)
URLリンク(www.amazon.co.jp)

927:デフォルトの名無しさん
04/10/28 22:03:22
>>926
ドラゴンブックより良い?

928:デフォルトの名無しさん
04/10/28 22:10:24
>>927
ドラゴンブックよりも内容が新しいらしい。

929:デフォルトの名無しさん
04/10/28 22:19:39
>>927
かなり難解ですよ。
ドラゴンブックとかプログラミング言語処理系を読んで
それでも物足りない人向け。

930:927
04/10/28 22:43:04
読んでみたくなったけど、高いなあ…

931:デフォルトの名無しさん
04/10/28 23:07:51
そもそも「最適化」をタイトルに冠してる時点でかなりのレベルが予想されるわけだが... < 中田本

それにしてもドラゴンブックの改訂版(に当たる本),いつ出るんでしょうね...

932:デフォルトの名無しさん
04/10/28 23:14:58
>>926
ドラゴンブック揃えるより安いじゃん。

933:デフォルトの名無しさん
04/10/29 18:29:03
>>931
もう出たんじゃね?
URLリンク(www.amazon.co.jp)

ペーパーバック版は来年らしい。
URLリンク(www.amazon.co.jp)

934:デフォルトの名無しさん
04/10/30 00:24:51
>>933
「この商品を予約注文する」と表示されたから、まだ出てないのかも…待ちくたびれたよ。


935:デフォルトの名無しさん
04/10/30 08:51:24
>>934
うはwwwwwwwwwwwwwww
昨日見たときはショッピングカートに入れるになってたんだがw
amazonの罠だったか。

936:デフォルトの名無しさん
04/10/31 00:42:43
URLリンク(i.loveruby.net)

これってどうよ?

937:デフォルトの名無しさん
04/10/31 18:50:33
>>932
そろえるって何?
1つしかないのでは?


938:デフォルトの名無しさん
04/10/31 19:00:25
>>937
お前、現物見た事あるのか?


939:デフォルトの名無しさん
04/10/31 19:15:08
>>938
URLリンク(www.amazon.com)
洋書の方は全1巻みたいです。

940:デフォルトの名無しさん
04/10/31 19:56:06
揃えるといったら、グリーンとレッドでは?


941:デフォルトの名無しさん
04/10/31 20:39:14
ポケモンみたい

942:デフォルトの名無しさん
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:デフォルトの名無しさん
04/10/31 21:07:52
>>942
コンパイラの勉強をする前、した後とでなにか大きく変わったことはありますか?

944:デフォルトの名無しさん
04/10/31 22:18:01
>>942
紹介を少しみたところ、コンパイラの(可能な限りの)自動生成に力点を置いてるようですが、
その辺りどうでしたか?

945:デフォルトの名無しさん
04/10/31 22:18:53
>>942
pseudo codeを「スードウ・コード」と書かれているので戸惑いました。


946:デフォルトの名無しさん
04/10/31 22:25:20
>>943
昔俺が本読んで実際うまくいった最適化と言える物は
せいぜい定数畳み込みと覗き窓ぐらいだったな。
頭悪いと「それはそれ、これはこれ」って言葉の意味が実感できるぜ!
コンパイラの勉強もいいけどCPUやアセンブラにも詳しくないと
速いコードにはならないぜ。
VMを作るときにも困るぜ?

947:デフォルトの名無しさん
04/11/01 21:36:17
>>938
英語音痴w


948:デフォルトの名無しさん
04/11/02 10:51:27
次スレには>>936もリンクに加えておいて下さい

949:デフォルトの名無しさん
04/11/02 13:03:18
>>943
今まで努力するのが面倒で、yaccでやっていましたが、
そんな自分が嫌でコンパイラの勉強を始めました。
その甲斐あって仕事もはかどり、昇進も決まり、彼女も出来ました。
6月には結婚します。これも全てコンパイラの勉強をした成果です。
                                (27歳・会社員)


950:デフォルトの名無しさん
04/11/02 22:20:28
おれは今まで金無し君だったけど(ry


951:デフォルトの名無しさん
04/11/02 22:22:11
>>950
今ではすっかり能無し君か。

952:デフォルトの名無しさん
04/11/02 23:44:04
コンパイラの勉強をしたら負け(ry

953:デフォルトの名無しさん
04/11/03 09:12:07
コンパマダァ-? (・∀・ )っ/凵⌒☆チンチン

954:デフォルトの名無しさん
04/11/03 12:48:01
最近、パチンコ行っても付きまくりな訳だが、
そういえばコンパイラの勉強し始めてからだったことに気づいた。


955:デフォルトの名無しさん
04/11/03 21:25:51
俺もコンパイラを勉強していて出てきた数字で
ロト6を買ったら2等が当たりました。2000万くらい。

956:デフォルトの名無しさん
04/11/05 18:44:42
じゃあ俺もコンパイラの勉強していたら
株が上がったことにしよう

957:デフォルトの名無しさん
04/11/05 22:11:26
LISP最強

958:sage
04/11/06 05:48:47
スモールコンパイラの制作で学ぶプログラムのしくみ
URLリンク(www.cbook24.com)

959:デフォルトの名無しさん
04/11/06 12:31:17
>>958
おっ、新作ですかね?
この分野では珍しい。

しかも、やさしそう
あと安い。

すべて型破り!w


960:デフォルトの名無しさん
04/11/06 13:42:32
宣伝乙
借金でもできたんですか?

961:959
04/11/06 17:41:07
著者は有名な方ですか?
あと、目次とかはないんでしょうか?


962:デフォルトの名無しさん
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:デフォルトの名無しさん
04/11/06 20:57:32
マルチにレス不要

965:デフォルトの名無しさん
04/11/06 23:18:33
どうせstdcallつけてないだけなんだろうな

966:デフォルトの名無しさん
04/11/07 22:44:04
>>958
プログラミング言語処理系とか買ったけどチンプンかんぷんだった俺にはちょうどいい
こういう本もっとでてほしいな
安いしな・・・

967:デフォルトの名無しさん
04/11/07 22:46:29
>>966
オレは「UNIX プログラミング環境」が初体験だったが。今はもう流行らんか。

968:デフォルトの名無しさん
04/11/08 01:09:20
>>967
洩れもそれだ!w
但し英語番だけど、


969:デフォルトの名無しさん
04/11/08 19:02:04
>>967
hocのソースにバグがあったと聞いたけど、どこか知ってる?

970:デフォルトの名無しさん
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:デフォルトの名無しさん
04/11/09 01:48:39
次スレまだ~?


974:デフォルトの名無しさん
04/11/09 17:00:50
>>972
伝聞だけど煽りじゃないよ。
知り合いが「打ちこんで動かしたけどいくつかバグがあった」って。
もちろん打ち間違いの類いじゃなくね。

975:デフォルトの名無しさん
04/11/10 02:14:00
ひょっとして脳内の知り合いですかぁ?
そんで俺らにデバッグさせようってことですかぁ?

976:デフォルトの名無しさん
04/11/10 04:01:03
三銃士で、アトスが友人の身に起こったことだと言って話すけど
ダルタニアンはそれは友人ではなくてアトス自身のことなのではない
かと考える場面がある。

977:デフォルトの名無しさん
04/11/10 10:24:26
懐かしー。


978:デフォルトの名無しさん
04/11/10 11:23:03
俺がhocを動かせなくて困ってるとでも思ったのか?www

ほらソース
URLリンク(www.bsddiary.net)
5段目の段落をよく読め


979:デフォルトの名無しさん
04/11/10 13:56:46
脳内の知り合いじゃないのなら
どこがどうバグってるのか聞いてくれ。

980:デフォルトの名無しさん
04/11/10 14:31:35
わかったよ知り合いじゃないよ
一読者だよ
直接聞けないからここで聞いたんだよ

981:デフォルトの名無しさん
04/11/10 14:42:49
誰だお前は

982:デフォルトの名無しさん
04/11/10 18:01:59
オレだよオレ

983:デフォルトの名無しさん
04/11/10 19:27:26
>>958
が気になる。


984:デフォルトの名無しさん
04/11/10 20:09:33
そろそろ新スレの季節だよ。

985:デフォルトの名無しさん
04/11/10 20:47:19
新テンプラどうしよう

986:デフォルトの名無しさん
04/11/10 22:19:51
LISPスレと統合しよう
つーかきみらもっとLISPを知っときなさい

987:デフォルトの名無しさん
04/11/10 22:47:27
Mathematicaマンセー

988:デフォルトの名無しさん
04/11/10 22:47:40
LISP?はぁ?
負け組言語は不要w


989:デフォルトの名無しさん
04/11/10 23:08:54
スレ立てるよ

990:スレ立てられませんでした(テンプレ1)
04/11/10 23:11:46
yaccやlexの使い方やら言語仕様やらの話題。

前スレ
1 URLリンク(pc.2ch.net)
2 スレリンク(tech板) (dat落ち)
3 スレリンク(tech板) (前スレ)

関連リンクは多分 >>2-8 あたり

991:(テンプレ2)
04/11/10 23:12:21
コンパイラ等を扱ったドキュメント

色々なツールの紹介
URLリンク(catalog.compilertools.net)

コンパイラ関連のリンク集
URLリンク(www.ulis.ac.jp)

スクリプティング言語資料室(仮) (リンク)
URLリンク(www.kt.rim.or.jp)

Compiler Construction
URLリンク(rananim.ie.u-ryukyu.ac.jp)

Compiler Construction (1997)
URLリンク(rananim.ie.u-ryukyu.ac.jp)

情報システム工学実験 III コンパイラ・コンパイラ
URLリンク(math.cs.kitami-it.ac.jp)

OS/Programming 簡単な C コンパイラ
URLリンク(www.csg.is.titech.ac.jp)

正規表現
URLリンク(hp.vector.co.jp)

コンパイラ研究・開発情報の一集積所
URLリンク(compilers.cs.uec.ac.jp)

Links and Selected Readings
URLリンク(www.gnu.org)


992:Intelの資料リンク切れになってる(テンプレ3)
04/11/10 23:13:36
Lex(Flex) Yacc(Bison) 構文解析

UNIX板
yacc & lex
スレリンク(unix板)

Lex and YACC primer/HOWTO (邦訳)
URLリンク(www.linux.or.jp)

Turbo Pascal Lex/Yacc
URLリンク(www.musikwissenschaft.uni-mainz.de)

Jim Roskind's LALR(1) C++ Grammar
URLリンク(www.empathy.com)

Flexと Bisonを同時に使う
URLリンク(guppy.eng.kagawa-u.ac.jp)

KITE_ASM (yacc,lex)
URLリンク(www.arch.cs.kumamoto-u.ac.jp)
URLリンク(www.arch.cs.kumamoto-u.ac.jp)

Cygwin
URLリンク(www.cygwin.com)

GNU utilities for Win32
URLリンク(unxutils.sourceforge.net)


993:(4)
04/11/10 23:15:40
その他のパーサジェネレータ等

ANTLR(非yaccのパーサジェネレータ)
URLリンク(www.antlr.org)

JavaCC(Java Compiler Compiler)
URLリンク(javacc.dev.java.net)
URLリンク(village.infoweb.ne.jp)
URLリンク(www.asahi-net.or.jp)

CUP & JLEX or CUP & JFlex
CUP URLリンク(www.cs.princeton.edu)
JLEX URLリンク(www.cs.princeton.edu)
JFlex URLリンク(www.jflex.de)

SableCC
URLリンク(www.sablecc.org)

¬<><∪∪ (notavacc)LALR(1)
URLリンク(ne.cs.uec.ac.jp)

JavaCCはLL(k)だけど、上のはANTLR以外はLALR(1)
でもANTLRはC++なんかにも対応。

boost::spirit(C++のテンプレートでEBNFの構文を模倣)
URLリンク(spirit.sourceforge.net)
URLリンク(boost.cppll.jp)(マニュアル日本語化プロジェクト)
URLリンク(www.fides.dti.ne.jp)


994:(5)
04/11/10 23:17:53
ガベコレ

GC FAQ -- draft
URLリンク(www.iecc.com)

A garbage collector for C and C++
URLリンク(www.hpl.hp.com)

一般教養としての Garbage Collection
URLリンク(www.is.s.u-tokyo.ac.jp)

Garbage Collection : Algorithms for Automatic Dynamic Memory Management
URLリンク(www.amazon.com)


995:(6)
04/11/10 23:21:42
参考書籍

●コンパイラ 原理・技法・ツール 1&2
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
通称ドラゴンブック。バイブル。

●コンパイラ構成法 原田 賢一
URLリンク(www.amazon.co.jp)
URLリンク(www.hara.cs.keio.ac.jp) (ソース、正誤表のダウンロード)

●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
URLリンク(www.amazon.co.jp)
一冊で済ませたい人へ。

●コンパイラの構成と最適化 中田 育男
URLリンク(www.amazon.co.jp)
最適化がメイン。

●コンパイラの仕組み 渡邊 坦
URLリンク(www.amazon.co.jp)
薄い奴(185p)を読みたい人に。

●21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
ペーパーバック版: URLリンク(www.amazon.co.jp)
ハードカバー版: URLリンク(www.amazon.co.jp)

●スモールコンパイラの制作で学ぶプログラムのしくみ
URLリンク(www.cbook24.com)


996:デフォルトの名無しさん
04/11/10 23:26:12
では立ててみるか。

997:(7)
04/11/10 23:26:28
処理系,スクリプト

kikyou.info (吉里吉里というゲームのスクリプト)
URLリンク(kikyou.info)

tiny C コンパイラ (C)
URLリンク(www.watalab.cs.uec.ac.jp)

6809用 Micro C コンパイラ
URLリンク(www.axe-inc.co.jp)

Portable Object Compiler (Obj-C >> C のトランスレータ?)
URLリンク(users.pandora.be)

自作コンパイラの部屋(PL/1, Pascal等)
URLリンク(www.tokumaru.org)

『Rubyソースコード完全解説』サポートページ
URLリンク(i.loveruby.net)

『やさしい Lisp の作り方』と『やさしい Java インタプリタ の作り方』見つけた。
Java と C# で実装。
URLリンク(www.okisoft.co.jp)
URLリンク(www.okisoft.co.jp)
URLリンク(www.okisoft.co.jp)
URLリンク(www.okisoft.co.jp)

MSによるPEフォーマット仕様書(日本語)
URLリンク(www.interq.or.jp)


998:デフォルトの名無しさん
04/11/10 23:36:47
連続投稿規制のため、テンプレ(7)は貼れなかった。
誰か頼みます。

999:デフォルトの名無しさん
04/11/10 23:37:55
新スレッド

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

スレリンク(tech板)

1000:デフォルトの名無しさん
04/11/10 23:40:47
ふと思ったのですが、新スレたちました。

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch