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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
yaccやlexの使い方やら言語仕様やらの話題。

前スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち)

関連リンクは多分 >>2-8 あたり
コンパイラ等を扱ったドキュメント

色々なツールの紹介
http://catalog.compilertools.net/

コンパイラおよびコンパイラコンパイラに関する本
http://www.ulis.ac.jp/library/Kanpo/Vol14No3/nakai.html

コンパイラ関連のリンク集
http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml

スクリプティング言語資料室(仮) (リンク)
http://www.kt.rim.or.jp/~kbk/

Compiler Construction
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html

Compiler Construction (1997)
http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html

再帰下降構文解析の手法
http://member.nifty.ne.jp/nakamula/recurs.htm

情報システム工学実験 III コンパイラ・コンパイラ
http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html

正規表現
http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm

コンパイラ研究・開発情報の一集積所
http://compilers.cs.uec.ac.jp/
Asm関係

Links and Selected Readings
http://www.gnu.org/software/gcc/readings.html

NASM Manual (翻訳は途中まで)
http://guriponn.at.infoseek.co.jp/nasmdoc0.htm

Intel(R) Literature Center (Intelのドキュメントはこちらから)
http://www.intel.co.jp/jp/developer/design/litcentr/index.htm

インテル(R) Itanium(TM) プロセッサ
http://www.intel.co.jp/jp/developer/design/itanium/family/index.htm

Streaming SIMD Extensions 2 (SSE2)
http://developer.intel.com/software/products/college/ia32/sse2/index.htm
その他のパーサジェネレータ等

ANTLR(非yaccのパーサジェネレータ)
http://www.antlr.org/

JavaCC(Java Compiler Compiler)
https://javacc.dev.java.net/
http://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html

¬<><∪∪ (notavacc)
http://ne.cs.uec.ac.jp/~koto/notavacc/

boost::spirit(C++のテンプレートでEBNFの構文を模倣)
http://spirit.sourceforge.net/
http://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
http://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
ガベコレ

GC FAQ -- draft
http://www.iecc.com/gclist/GC-faq.html

A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/
処理系,スクリプト

kikyou.info (吉里吉里というゲームのスクリプト)
http://kikyou.info/

tiny C コンパイラ (C)
http://www.watalab.cs.uec.ac.jp/tinyCabs.html

Portable Object Compiler (Obj-C >> C のトランスレータ?)
http://users.pandora.be/stes/compiler.html

自作コンパイラの部屋(PL/1, Pascal等)
http://www.tokumaru.org/
参考書籍

●コンパイラ 原理・技法・ツール 1&2
http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
http://www.amazon.co.jp/exec/obidos/ASIN/4781905862/
通称ドラゴンブック。バイブル。

●コンパイラ構成法 原田 賢一
http://www.amazon.co.jp/exec/obidos/ASIN/4320029224/
http://www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード)

●プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
http://www.amazon.co.jp/exec/obidos/ASIN/4000103458/
一冊で済ませたい人へ。

●コンパイラの構成と最適化 中田 育男
http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/
最適化がメイン。

●コンパイラの仕組み 渡邊 坦
http://www.amazon.co.jp/exec/obidos/ASIN/4254127081/
薄い奴(185p)を読みたい人に。
以下未整理とネタ

shuJIT (JITについて)
http://www.shudo.net/jit/index-j.html

ギコBASIC
C言語版
http://page.freett.com/gikob/gikobw00047.zip
C++版
http://page.freett.com/gikob/gbtl-beta3.zip

計算機能論ホームページ
(消えているので、どうしても見たければarchive.org等を利用する事)
http://buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/index.html

YACC link
http://www2.dewa.or.jp/rock/camp/yacc/whatyacc.htm
なお、byaccはどこへリンクするか迷ったので、日和って省いてあります。
ソース読んで学習する用途に、って事でkmyaccなんかも入れて良かったかも。
Compilers and Compiler Generators も迷い迷って結局入れてません。
http://www.scifac.ru.ac.za/compilers/
spiritの位置も少し迷ったのですが、一応パーサジェネレータ「等」って事で。
リンクは一応チェックしたつもりですが、間違ってても勘弁して下さい。
以上。
>>1
>(dat落ち)
この部分はいらなかったな。失敗。
12デフォルトの名無しさん:03/11/29 16:31
12
13デフォルトの名無しさん:03/11/29 19:04
糞スレさらしあげ
14デフォルトの名無しさん:03/11/29 22:11
             __.ノ)
            ( _(
            (.___.)
          || l
          || l、-‐ー、ー‐- 、
          ,.|| l       ヽ ,、-‐ー、
       iヽ ./  ,    i     `、
       l::::::i .,' / _,、-‐つ l l   ',._,、i
       l::::::l i ,' / ,、-'"ノ ,'i l ! l ヽ::l
       l:::r.'lr/   /ノリ リノi l l iノヽ
       レゝ/   /  ニ・ニ=lノノリ、
       i /  ,、-'  . .   ll|l i ll,、-'´
        /  /、  ヽフ   ノ lノ |    ま、また 立てやがった・・・
     ,-'  ./l lノ. `‐、.___ ,、-'´l |l
   ,、-'´  /_rl .lヽ``‐、 ,-'"i、l l l     
,、-'i    / ̄ l lヽ\ i l ノ l l l
i  l    /   i .l lヽ   r-、 ノ l lヽ、
l .l  / i 丶 |l `‐/ ゝソ\/ ノ  7、
!、 ヽ / ヽ   ヽ /  / ヽ_ ノ i / i
 ヽ ``/   ヽ,  / /    \ l    l
    ̄l      !/      ヽ    l
>>1
サンクス、自分も立てようかと思ってたんだけど、リンクが揃えられなくて・・・
しかし、いきなりの素敵な洗礼ですな。
>>13-14
殆どこの板を使った事のないド素人はすっこんでろっつーの
(;´Д`)ハァハァ
ハウディー!(^O^*)
            ,,、、、,,,r‐--、、,,_
                ,、‐'''r."           `゙ー、
             ,:'.:::::,イ".  .: ...:.::i_;、、、;;_;|;   ゙L
          _,,.-‐''ノ   ヽ;、‐"´,,,.........,,__`ヽ:i `,
      ,、‐'''""´,,、-‐f  .:.::/,:-'"..:..::::::::::::::.゛:‐、',i.,'
     く-‐''''ゞ"´, .:;;;;゙.、..:.:::/´".,.::./.:;ィ:::;;,イ:;':::::;::...'、ヽ.
.     `'ヽ、 . :ー-ァ;;;;;;;ト'":;;|::;/:;.'::::;;;'.';;ィ;':;/i::::;;i;:::;;:,';.`;"''ァ
        ゙''‐-、 z-;::l:.:::::;;!、:';;'_;;.'__;;:'゙/"' .l:::;;ハ.;;':l;::l,、‐'"
            |..::`'''‐i..::::;;;|/ィ ' =-、.,''.   l'/、_r';'゙l;r'
            l::::|:::i:;;| .::::;;l: ,''';:/ ゙   r=''';-!.i/'
.          !:::l!::ll:;;i .::;;;;l::..'‐-'      ,';/゙/;:l:|
            ',:i.!::!l::;'; :|:;;i:: ..:: :.    ..''::,'|;;:|:l
            '!.';l. ';.l゙、l::;;!、      ,.   ,,イi;;,';;'
.            ゙  '! '!';;l:..゙''‐; 、_,,,、.,;i'.i':/ l:/リ
                厂 ';! ̄!トト,ィ_'リ、''_.''  '
            ,r.:'´`゙'= 、r'";;';ヘ_〉'';:ヽ':,
              /.:::.;;.;.;;;;;`、ヽ.:.:::;;ri'ヽ_;,'., 'Y':,
          /..:.;.;.;.;;;;.:.;;;;`、.'l''"´!';__;!/ .人 ',
          ,'...:.:;..;;;;_;;;-‐‐;,' '-‐' ..:r'  ゙ヽ', ',
           '.;-‐‐'".:;;.;.;.;;;;ヽ. ‐‐-'',':.. .::.:ノ:..ノ
          `"'''‐、.:;.;...;;;:.;;',::. ./`、;,_;;r'"''゙゙i
              ヽ.:;;.;.;;;;;;l/;:.:.:;.;;;;、'l;;:;;.;.;:.',
>>1乙。
洋書だけど重要そうなのでこれも貼っとく。

21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
ペーパーバック版: http://www.amazon.co.jp/exec/obidos/ASIN/0321210913/
ハードカバー版: http://www.amazon.co.jp/exec/obidos/ASIN/0321131436/
>>19
やべ、前スレ最後に出た一番重要な奴を忘れてた。
しかし高いなあ……。

あと書き忘れましたが、
beroさんとこの機械翻訳ベースの資料は軒並み消えてしまったので
NASM Manualのリンク先をFreeDOSのぐりぽんさんの所へ変えています。
まあ気合い入れて英語読めば問題無いんですが。
Compilers Principles, Techniques, and Tools
すなわち、通称「赤ドラゴンブック」でコンパイラのこと一般を勉強しているものです。
最近、「ドラゴンブックも内容が古くなってきた」という意見を耳にしたのですが、
どこらへんが古くなってきているのか教えて下さい。
>>21
1985年の本ですから古くなるのも無理はないでしょう。
あの本以降に発展した技術には、思いつくものだけでも

SSA
CDG/PDG
JIT
関数型言語の実現法

などがあります。しかし入門用としては今でも十分な内容だと思います。

dragon bookが終ったら、次は最適化に的を絞った本を読めばいいでしょう。
日本語なら>>8の中田先生の本あたりでしょうか。
2321:03/11/30 16:13
>>22 ありがとうございました。調べてみます。
新スレ乙。

21世紀ドラゴンブックまだコネー。
25デフォルトの名無しさん:03/12/04 21:17
洩れはタイガースフアンだ!
というのはおいといてw

bisonとも限らないのですが、単項の負を処理するときに、

%left NEG
...
| '-' exp %prec NEG {...}

とよく書きますけど、厳密には %left でなくて %right じゃないでしょうか?
たとえば、---5というのは、普通-(-(-5))だと思うんですが...

どこかおかしいですか???
>>25
単項演算子に優先順位指定は必要ないのでは?
文法の書き方にもよるけど、普通は

unary_expr:
   postfix_expr
  | '*' unary_expr
  | '&' unary_expr
  | '-' unary_expr
  | '~' unary_expr
  | '!' unary_expr
...

てな感じでうまく行きますよ。
2725:03/12/06 02:54
>>26
情報ありがとうございます。

でも、そうなんですか、知りませんでした。
いま、アスキーのbison入門という本を見ているですが、
どこにもそんな記述がありませんでした。

ふう〜、奥が深いですね。

ちなみに、

%right '='
%left '+' '-'
%left '*' '/'
%left NEG → 単項-用です。
%right '^'

みたいに、指定しています。
28デフォルトの名無しさん:03/12/07 22:11
やっぱ、%rightが正解かなぁ?

%left で ---5 の場合だと、(--) を処理せんあかんから、
ahoの発売は来年に持ち越しか

…知らない人がこのレスを見たら意味不明だろうな
30デフォルトの名無しさん:03/12/08 20:00
%left と %right の結果をbisonで比べてみても変化なし、
どちらも、正しく ---5 を処理できる。

で、生成されたcソースを見てみたが、なんと(ry
>>29
それってなんデすか?
>>31
21st Century Compilers
http://www.amazon.co.jp/exec/obidos/ASIN/0321131436

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


>>27
%left/%rightは同じ順位の演算子がならんでいるときに生じるshift/reduce
conflictを解決するためのもの。単項演算子が前置のみなら、そもそも
conflict はおきないので、どちらでもかまわないです。

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

expr : '~' expr | expr '~'

このとき、%left '~' なら、~x~は(~x)~と解釈され、%rightなら~(x~)と解釈
されます。
3427:03/12/09 20:07
>>33
なるほど!明解な回答をありがとうございました。

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

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

***

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

ちょっと高めですが、参考になるのなら、と思っています。
rubyのってもうすぐWeb上でも全公開じゃなかったっけ?
確か初めの章だけは既に公開されてるよね。
>>34
あんなのに金払う意味無いって。
どうしても読みたいなら図書館行ってこい。
>>36
煽りじゃなく、できれば理由を教えてくれ。
おれの場合、あの本読んでいて苛々するんだが、理由を明確に
説明できるほどのスキルがないんで、他の人の意見も聞きたい。
38デフォルトの名無しさん:03/12/10 23:26
>>35
なるほど、HPみたら、そんな感じに宣言されてますね。
しかも、この12月でほぼ1年たつ模様。

ちょっと期待。
>>34
>>8 にある本ではダメなの?
全文公開は延期してもらってもかまわないから、青木さんにはオライリーの
lex & yacc に変わるような本を書いてほしい。
>>8
佐々 政孝さんの本は出版が少し古いんですね。
42デフォルトの名無しさん:03/12/11 00:34
>>39
全部コンパイラ系の本、
rubyはインタプリター
>>42
コンパイラはネイティブコードを生成することが多くて、
インタプリタはしないことが多いくらいで
やることは大体一緒だと思うけど。
44デフォルトの名無しさん:03/12/11 01:23
インタプリタはしないことが多いんじゃなくてしないだろ。
Java VM の HotSpot とか。
>>43
違うのは最適化くらいか?
47デフォルトの名無しさん:03/12/12 20:24
はっきりいって全然ちがう。(コンパイラとインタプリタ)
同じように使えるのは、字句解析器ぐらいか?
構文解析も意味解析も共通なはずだが。
なんで字句解析だけ?
>>47
C言語にはコンパイラとインタプリタが存在します。
本当に、同じように使えるのは字句解析だけだと思いますか?
構文木作るまでは大方一緒な気がする
釣れた?
LISPはいきなり構文木が手に入る
>>49
コンパイラとインタプリタを備えた C の処理系なんてあったっけ?
大抵どっちかだから、共通している部分が多い事の事例にならないような。

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

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

int main() {

// 以下略
// 以上妄想
>コンパイラとインタプリタを備えた C の処理系なんてあったっけ?
作らない(作っても意味無い)だけだろ
>>54
だから、共通している部分が多い事の事例にならないだろ。
>>55
同様な構文を持つ言語のインタプリタとコンパイラで
構文解析が共通化できない理由は何ですか?
>>56
そこには異論は無いです。細かい突っ込みスマソ。
Dylan や OCAML や Haskell はインタプリタとコンパイラの両方持ってるね。
Common Lisp もだけど。
>>58
源流がLISPだからね。
MLの源流はlispでねーぞ
っつーかDylanだけじゃん
>>62
SchemeがAlgolから受け継いでるのって何?


>>63
lexical scopeじゃないかな?
65デフォルトの名無しさん:03/12/13 19:22
構文解析器は、理論上はインタプリターやコンパイラに無関係に
整理可能であるが、現実問題としては、そうはならないということだろう。
66デフォルトの名無しさん:03/12/14 23:36
きょう、rubyのソース開設本みつけたけど、
高いなぁ〜と感じた。

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

とりあえず、公開待ちます。
貧乏人で、スマソ
>>66
2000 円で買えるコンピューター書籍はそれほどないと思うが?
なにが売ってても買わないの?
68デフォルトの名無しさん:03/12/15 00:03
bison本やlex本(GNUプレス)は
みんな安いよw
これ?
http://www.amazon.co.jp/exec/obidos/ASIN/4844317210/
良さそうな本じゃん。Perlでこういう本ってあったっけ?
>>69
Perlはソースコードが多すぎる。
>>68
それってinfoで全文ローカルで読めるやつのこと?
7268:03/12/15 21:36
>>71
infoは使ってないのでよくわからんが、そうかもしれない。
実はもれも、本文はどこかで(英語???)読んだ記憶があった。

でも、手元に書籍であると、またちがうんだな、これが!
>>72
たしか、利益の一部は FSF に寄付されるんじゃなかったかな。

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

The Implemetation of the Icon Programming Language
http://www.cs.arizona.edu/icon/ibsale.htm
74デフォルトの名無しさん:03/12/15 22:49
yacc/lex使ってSQLパーサ作りたいんだけど、挑戦したことあるひといますか?
lex & yacc のサンプルがそのままSQLパーサだったような記憶。
>>75
そうそうあったあった。どこかにサンプルコード落ちてたよ。
英語版だけど
>>76
コードが英語なのは普通じゃ…。
78デフォルトの名無しさん:03/12/15 23:47
>>73
flexは読みやすかったけど、bisonは読みにくかった。
やはり、難しいからですかね???
79デフォルトの名無しさん:03/12/15 23:58

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

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

な領域ですよね?

みなさん、本職は何をされているんでしょうか?
やはり、プロのコンパイラorスクリプト屋さんなんでしょうか?
>>79
プロのコンパイラ屋(コンパイラだけ作っててメシが喰える人)ってかなり少な
いと思う。(OS屋はもっと少ないけど。)

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

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


>>79
ゲーム屋も多いと思う。
出来合いのエンジンを利用する場合でも、実装を知っていないと
どうにもならんからね。
>>82
ネタw
8474:03/12/16 22:42
>>75、76 そのサンプルってどこにありますか?
もし知っていたら教えてください。
オライリーの yacc/lex 本。
8674:03/12/16 22:54
おおおー。なるほど。早速買ってみようと思います。
8774:03/12/16 22:57
ところでネットで見つけようとしても見つからないですね。
PostgreSQLとかのソースを見ればいいのかしらん。
8885:03/12/16 23:09
>>87
だからオライリーのサイトにあるよ。
http://examples.oreilly.com/lex/
8974:03/12/16 23:31
>>85
きゃーありがとうございます。
90デフォルトの名無しさん:03/12/17 22:16
>>80
おお〜、すごい!
本職&プロですか!

ちなみに、どんなコンパイラ書いてるんですか?
差し支えない程度で結構ですので、
俺は80氏じゃないけれど、組み込み系に利用するためのコンパイラを書いたことがある。
独自のインストラクションセットを吐き出すCコンパイラだけど、
80氏と同じく本職じゃないために、とりあえず動くコンパイラを作っただけ。
最適化とかは必要最低限くらいにしか要求されていなかったし。

俺はフリーのプログラマだけど、
お金をもらえてこういう楽しい仕事が出来るときが一番嬉しいね。
92デフォルトの名無しさん:03/12/18 00:19
>>91
おお〜、「フリーのプログラマ」で、しかもコンパイラまで
書けるのですか!
なんか括弧イイ!ですねぇ〜!

わたしも、フリーではあるのですが、フリーはフリーでも(ry
ASICとかFPGA屋さんもいるかも知れず。
>>90>>92
コンパイラ書くのはそんなに難しくないよ。
漏れも大学や専門学校でプログラム勉強したことなんか一度もないけど、
コンパイラを一回書いたことがある。
そのときのネタは、スクリプトを解釈して整数、浮動小数、文字列の計算をしながら、
その結果を GP-IB (RS232 の遠い親戚みたいなもの) に送り込むヤツね。

キーワードは Bison/Flex (またはYacc/Lex)。
これらのツールが食べられるような特殊な書式さえ覚えれば、
サルでも※簡※単※な※コンパイラなら書ける。
# ただし、サルにはGCCは書けない。
簡単なコンパイラ書くぐらいならGCCの移植作法を覚える方が
まだ ※簡※単※?
簡単なコンパイラ書く方が※簡※単※
※強※調※し※た※い※語※句※を※※※で※強※調※す※る※ス※レ※は※こ※こ※で※す※か※
*** おおっと テレポーター ***
>>95
UNIX USERのGCCプログラミング工房とか読んでると
すんげーキツそうなんですが。
誰かが移植してくれるのを待つのが一番簡単。
>>98
年 * 寄 * り * は * カ * エ * レ * !
*** いしのなかにいる! ***
>>103
俺がさんざん書こうと思って我慢してたのに(w
>>103-104 わらた
106デフォルトの名無しさん:03/12/20 18:08
VC++でyaccとlexを使ってexeを作りたいのですが、
うまくいきません。みなさんはどうやってやっていますか?
>>106
yaccとlexの出力ファイルをコンパイルして使ってる。
108デフォルトの名無しさん:03/12/20 21:07
なんでlex/yaccつかうひつようあるの?
win系で?
>>108
ちなみに自分は何を使ってるんだ?
>>109
それはあんたしか知らない。
111デフォルトの名無しさん:03/12/20 21:14
まともに使えるスクリプト言語って、なんでこんなに少ないんでしょうね?
>>110
その突っ込みは板違い
>>111
それはお前が使えてないだk(ry
>>110
質の低い書き込みするなよ
>111
マジできくが、それじゃどんなスクリプトが欲しい?
>>111
では、使えないと思ったスクリプト言語を理由と共に列挙してみよ
perl ウンコ
Perlが一番速いんじゃない?汎用的なスクリプト言語の中では。
ああいう方向もありだと思うよ。
速くはないだろperlは、早いけど
インタプリタを初めてつくりたい人に「これをよめ」という本はありますか?
洋書・和書は問いません。

上の方のレスを見るとコンパイラとインタプリタは少し違うようなので、、、
ホントーに初めてで右も左もわからないならCマガジン2000年5月号がお薦め。
http://www.cmagazine.jp/contents/200005.html
特集1 スクリプト言語を作ろう インタプリタの構造と設計
>>120
bison, flex のドキュメント。
gcc の *.y ファイル。
字句解析は正規表現のようにした方がいいですか・・・

ハッシュにして48個(64個)を作ってそれぞれをチャインで
繋いで予約語と関数名と変数等を検索して方が早くないですか・・・
>>124
そう思うならそうすればいい。
っていうかそれでいい。
なにか問題でも?
126111:03/12/22 21:59
パール:記述方法が暗号的すぎ
オーク:使用目的が限定的すぎ
るび〜:モデル化が変態的すぎ

>>122
もう手にはいらんのとちゃう?
>>126
バックナンバー情報をチェックしたら
2000年のは無いみたいだね。
だが、大学の図書館とかなら多分ある。
漏れの母校の資料室にもあった。
っていうか俺んちの図書室にもある。
公的な図書館なら申請すれば
他の図書館から取り寄せてくれたりもする。
絶望的なほどではない。
でも、そこまでするなら本屋で他の本見繕った方がいい罠。
128デフォルトの名無しさん:03/12/23 02:32
>>124
自分もハッシュです。
256でチェインしてます。
記号の"{"ごとにハッシュ表を新たに作り、
新しいハッシュ表から古い方に向かって調べます。
グローバル用は別に1個作り、
関数を呼ぶ場合にも、全く別のセットを作ります。
(じゃないと、下部の関数から上位の変数がみえたりしちゃいますからね)

ちなみに、ハッシュを使わずに作った物は、
6万語ぐらいの定義、10万回くらいの参照、マクロ展開があるファイルのコンパイルに10分、
ハッシュを使った物は30秒ぐらいでした。
>>124
今まではハッシュだったけど、
最近、キーワードだけswitch文の羅列で分別するようにしてみた。

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

>>127
> 公的な図書館なら申請すれば
> 他の図書館から取り寄せてくれたりもする。

こんど近所の図書館でも聞いてみよ。
千葉県だけど取り寄せてもらえるかな、、、
131>>124:03/12/23 15:53
単純にflexじゃあかんの?
132デフォルトの名無しさん:03/12/23 17:07
Cコンパイラのソースで読みやすいの教えろ
13346: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 異常な人間(レッテル)
13446: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回くらい。
>>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のコンパイルにも使用されている
えー・・・
139デフォルトの名無しさん:03/12/23 22:18
>>137
YACC使ってるほうが、圧倒的にソース簡単なんじゃない?
なんで、勉強には不向きと思われ。
140デフォルトの名無しさん:03/12/23 22:19
C+AWKみたなスクリプト言語ありますか?
>>140
そりゃperlでは…

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

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


143デフォルトの名無しさん:03/12/23 23:14
>>141
変数に$つけんとあかんのとちゃう?
>>143
それが?
Appel本の java 版のソースは ML の移植と聞いたのですが、実際にそうなのですか?
読んだ方の意見を聞いてみたのですが。
コンパイラって、入出力なんかのハードウェアに近いレイヤとか、FFI 等で自分の環境外に
アクセスする部分ってどうなってるのかしらん。インタープリタだと外のライブラリ使えば
良さそうなんだけど。
>>146
出力したオブジェクトにAPI呼ぶライブラリをリンクする。
あるいはAPIを呼ぶコードを吐く。
別に疑問なところはないとおもいますが。
>>147
レスどうもありがとうございます。
冬休みになったらコンパイラの勉強をしたいなと思ってるのですが、イマイチ基本的な
事から分かっていないのでダメですね。リンカーの本を読めばこの辺も理解出来るの
かなぁ。
149デフォルトの名無しさん:03/12/25 01:57
>>132
C/C++インタプリター cii
ttp://village.infoweb.ne.jp/~fwgi5816/CI/
知合いの方はAppel本のJava版はJavaじゃない,とまでおっしゃってました.MLからのひどい直訳で,Javaとしては(コンパイルの通らない)誤りも多々あるとか?私は実際どうなのかが分かる人間ではありませんが.
>>150
C は Java のひどい移植で、、、と書評で書いてあったのだけど、 ML を Java に移した時点で
すでに糞コードなんですか?

ML で勉強するのはちょっときついなぁ、、、
つーかサンプルコードなんてどうでもいいだろ。
個人的には、読みやすい疑似コードならあっても損ではないが。
153デフォルトの名無しさん:03/12/25 18:56
>>144
つまり、c&awkとは、ぜんぜん違うということ。
155デフォルトの名無しさん:03/12/25 23:59
Windowsで使えるyaccやlex、texはありませんか?
texは知らんがyacc/lexはcygwinのが使えるんでねえの?
157デフォルトの名無しさん:03/12/26 08:09
>>154
それって、AWKと同じ?
>>156
cygwinのyacc/lexが吐き出すCをVC++が食べてくれないことを>>155は恐れている。
>>155
gnuwin32
>>155
上で>>156>>159が言ってる他にも、yacc互換ツールにkmyaccってのがある。
Rubyのコンパイルにkmyaccを使うと実行ファイルが少し小さくなっていい感じ。

>>156
Texも余裕でいろんなバージョンがごろごろしてるよ。
Rubyの実行ファイルが少し小さくなったら何かいいことあるんですか?
>>161
大きくなるよりいい。
163デフォルトの名無しさん:03/12/27 01:14
レベル低いねえ、ここ
処理系開発に携わった者としては、見ていて恥ずかしいよ
164デフォルトの名無しさん:03/12/27 02:23
まともなプロは、他のプロの半端な仕事をバカにすることはあっても、
素人をバカにすることはない。

素人をバカにするのは、プロ気取りの汚らしいチンピラである。
もう冬休みか...
失業者かもよ。「携わった」と、過去形で書いているし。
漏れの記憶では確かVCはbison/flexが吐き出すCは食べてくれるがbison++が吐き出すC++は食べられなかったような
168デフォルトの名無しさん:03/12/27 11:56

flex入門(ASCII)には、

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

とあるのですが、ここでいう「逆行」とは具体的にはどういった状態を指す
のでしょうか?
一度見たトコをもう一度見る。
170デフォルトの名無しさん:03/12/28 11:31
コード例から自動で言語処理系作れないかな?
171デフォルトの名無しさん:03/12/28 11:43
>>170
ディスプレイに映るコードを眺めながら、博士はコーヒーを飲んでいた。
彼のお気に入りの陶器から口を離して、>>170の質問に答える。

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

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

「しかし、それはlexとyaccを使い実装と正規表現を記述するのと、どう違うのかね?」
関数の合成とオプティマイズまでを実装した処理系ってなんか無いですか?
もちろんソース公開されてる奴で。

たとえば、文字コード変換機とか、音声ファイルのコンバータなど
入力と出力パターンがそれぞれ複数あるとき、
すべてのパターンのコードを記述するのはむだなので
中間形式にいったん変換してから再変換をかけることになると思うのですが
関数合成で一度にできるようにならないかと。
173170:03/12/28 13:03
>>171
妙に納得させられてしまいました。
不完全な記述でもある程度の結果が得られて
(現存する記述と意味の関係から自動推測して処理系を構築するとか?)、
さらに進展性が望めるシステムもあったらどうなるのかちょっと興味があったのです...

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

main {
  print "Hello World!"
}

ってのから言語処理系を作れないかということですよね?
でも、それって、XMLのデータだけ見て意味づけしろ、というのと同じで、
意味情報が含まれていないから出来ないのでは?
>>140
私はそのまま awk を使ってます.
仕事柄 C/C++ とその他のスクリプト言語の使用比率が 9:1 くらいなので,
他の言語がなかなか覚えられなくて. C に似てて仕様的にも単純なものってことで
awk 使ってますが, awk 使うくらいならそのまま C でいいんじゃないかと最近思いました ...
関係ない独り言ですみません.
>>172
inlining?
>>176
いや、静的ではなく動的に。
179デフォルトの名無しさん:03/12/28 19:43
>>175
AWKってフィルタ指向が強すぎますよねぇ?
それさえなければ、最強なんだけど...
ゲームで使用するためのスクリプト言語を解説した
洋書を知りませんか?

Game Scripting 何とか

という名前だったような・・・
>>180
ttp://www.amazon.com/exec/obidos/ASIN/1931841578/
漏れも前にちょっと買ってみようかと思った。
amazon.co.jpだと在庫切れ。
>>181
こんなのあったんだ。
GameProgrammingWith PYTHON, LUA, AND RUBYより、
そっちにスベキダッタ・・・
ワリイ ゲ製作板と間違えた
184デフォルトの名無しさん:03/12/30 19:39
bison は、記述ファイルから、その生成パーサの動作を正しく把握するのがつかれる。

というか、ほとんど無理?
>>184
把握する必要無いし。
186デフォルトの名無しさん:03/12/31 01:19
でも、把握せんと動作がつかめんでしょ?
>>184
もしかして、シフト/還元のこと?
>>186
把握しても動作つかめんから心配するな。

再帰上昇型のパーサーは、慣れた人間にとっても予期せぬ動作をすることが
ままある。手っ取り早くすませたいなら yacc を使って、そうではなくエラー処理
などキッチリやりたければ、手で再帰下降型のパーサ書いた方が良いよ。
パーサーのテストどうやるの?
>>189
パースしてみる
191デフォルトの名無しさん:03/12/31 16:16
>>188
(再帰上昇型/再帰下降型って何ですか?)
bison は再帰上昇型でいいのですか?
192デフォルトの名無しさん:03/12/31 16:17
>>188
(再帰上昇型/再帰下降型って何ですか?)
bison は再帰上昇型でいいのですか?
>>191
ぐぐれ。キーワードはこんな感じで。
構文解析 上昇 下降
194デフォルトの名無しさん:03/12/31 19:45
>>193
keywordありがとう!
195デフォルトの名無しさん:03/12/31 22:41
>>188

> 再帰上昇型のパーサーは、慣れた人間にとっても予期せぬ動作をすることが
> ままある。

これって、本当ですか?
196デフォルトの名無しさん:03/12/31 22:51
>>195
実装がへぼいか、定義がへぼいときは、本当です。
>>195
本当。

正常なトークン列を与えたときの動作は予期どおりになるが、異常なトークン列を
与えたときの振る舞いは直感に反することがままある。頑強なエラー・回復処理を
実装したい場合、たとえば

 HTML パーサのように、厳密に規格に従ってなくとも受け付けたい
 エラー時にそれなりに適切なエラーメッセージを出したい

なんつーばあいには、再帰上昇型は人間の手に余る。
198デフォルトの名無しさん:04/01/01 01:17
>>197
ミジカな例まで出してくれてありがとう!
上昇型は、厳密な言語むきってことですかね?

メリットは、記述が少ないことぐらいですか?
ところで、ふつうのyaccが生成するパーサは再帰上昇型ではないと思うのだが。
(陽にスタックを持ち、表を引いてgotoしまくるだけで、再帰呼びだしはしない)

最近のbisonは再帰上昇型のコードも生成できるの?
ttp://www.futamura.info.waseda.ac.jp/~futamura/

futamura projection の二村さんのサイト見つけた。
201デフォルトの名無しさん:04/01/01 20:54
どうみてもbisonは再帰的だが
>>199
再帰呼び出しと再帰的文法解析を混同してないか?
再帰するためにスタック用意してるんでは?
>>202
英語でrecursive descent parserといえば、LL文法に基いて、いくつかの相互
に呼出しあう関数群で記述された構文解析器のことを指す。

これと同様、recursive ascent parserというのは、LR文法に基いて、明示的
な状態スタックを持たず、相互に呼出しあう関数群で構成されている構文解析
器のこと。yaccやbisonが作るパーサーは、明示的なスタックを持つ表駆動オー
トマトンなので、recursive ascent parserではない。(両者は言語を認識する
能力は同じだが、細かい記述能力の点で違いがある)

recursive ascent parser については僕も勉強中なのであまり突っ込まれると
困るが、comp.compilersの過去ログ↓に良いreferenceがあるのでそちらを参
照してください。

http://compilers.iecc.com/comparch/article/93-05-016
http://compilers.iecc.com/comparch/article/93-05-045
>>203
そう呼ぶ「流儀もある」というだけの話。

コンパイラ理論に限らず、専門用語は人によって解釈に幅があるのが普通だから、
適当に補って読み書きしとくのが吉だ。
>>203
そういえば思い当たる用語がいくつかある。
素数に1を含めている場合があって、教授の中の人に
「素数の定義のなかに『1以外の』ってあるんですけど」
って聞いたら
「小中高ではそのように教えているようだが学会によって違うし、
 必要なら論文の冒頭で定義する。」って言ってた。

それと、以前知り合いに聞いたんだが、
そいつの学科では「逆ポーランド記法」
を「ポーランド記法」って呼んでて、
どうしても明確に区別する必要があるときだけ
前置・後置で分けてるんだそうな。

と、言うわけで構文解析に関する学会もいろいろあるだろうし
それぞれで違う定義だったり定義されてなかったりするの
かも知れない。
206デフォルトの名無しさん:04/01/02 15:56
>>205
それは案外あるね。
ここのコンパイラ&スクリプトだけでなく、全ての千問分野で
そういった傾向があるみたい。

なので、書籍とかでは著者がどういう定義でその用語を使っているかを
把握したうえで理解しないと混乱する時がたまにある。
言い訳にだまされてるだけ
208デフォルトの名無しさん:04/01/02 16:54
アフォか素人
209203:04/01/02 20:39
>>204
yaccの生成するパーサを「再帰上昇型」と呼んでいる教科書や文献があったら
教えて欲しいのだが。
僕は見たことがない。googleで検索しても見つからない。

210デフォルトの名無しさん:04/01/02 20:46
しるか!
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
212デフォルトの名無しさん:04/01/02 23:55
アフォ
213デフォルトの名無しさん:04/01/03 00:16
VBSの解析ソースください。
214デフォルトの名無しさん:04/01/03 01:37

すいません、ちょっとお尋ねしたいんですが、

UNIX Programing Environment に出てくる「電卓hoc(最終形態)」が
行っている処理アプローチは、今のスクリプト言語にも十分通用するも
のでしょうか?

それとも、今となっては時代遅れのものでしょうか?
ここにおられる皆さんは、どう感じられますか?
>>214
時代遅れだと考えるくらい知識や経験があるならやらなくていい。
そうじゃなければ、やっても無駄にはならない。
217214:04/01/03 10:58
>>215
そうです。(こんなページも有ったんですね。知りませんでした。)
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

『やさしい Lisp の作り方』と『やさしい Java インタプリタ の作り方』見つけた。
Java と C# で実装。
>>218
GOD
221デフォルトの名無しさん:04/01/04 16:56
スクリプト言語を設計・実装する場合の一番の難しさって何でしょうね?
>>221
妥協すること。

汎用的だが回りくどい書き方と、特定用途専門で簡単な書き方。
実行時の速度効率と、柔軟性。
メモリ使用効率とスピード。

いろいろいろいろ相反する要素が出てくるので、目標を明確にしておかないと
あれもこれも盛り込んだ挙句に、中途半端で使いにくいスクリプトになりがち。
>>222
思いもよらない視点にビクリ!
あんた、プロ?
>218
LISP処理系作るのは簡単だけど、
Schemeの末尾再帰や継続呼び出しを載せようとすると、
とたんに難しくなるよね。
末尾再帰だけならまだ楽か。
末尾再起も継続も簡単
大変なのはクロージャや継続の実装に必要な
環境の複製の効率化。
226デフォルトの名無しさん:04/01/06 19:01
まぁ、LISPと言ってる時点で(ry
>大変なのはクロージャや継続の実装に必要な
>環境の複製の効率化。

これって Scheme に限らない問題だと思うんだけど(lexical closure を持っている
言語は沢山あるよね)、これに関して日本語のまとまったドキュメントってあまり
無いね(知らないだけ?)。

知ってるのはこことか。
ttp://www.shiro.dreamhost.com/scheme/gauche/memo-stack-j.html
228デフォルトの名無しさん:04/01/06 22:09
LISPで有効に実用化されているプロジェクトってあるのw
アーロン
>>228
Lisp そのものじゃないが、Lisp に極めて近い文法のファイルでデータを保存する
CAD ソフトは見た事あるな。確かに、書くの楽そうだ。
何かちょっと調べてみると、Pure な OO って意味があるのか疑問に感じてきた。
Java みたいにプリミティブを用意した方が効率良さそう。Hybrid 言語マンセー!
232デフォルトの名無しさん:04/01/07 20:27
アホーン
なるほど、これが冬か。
http://merd.net/pixel/language-study/syntax-across-languages/
http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=%a5%b9%a5%af%a5%ea%a5%d7
%a5%c8%b8%c0%b8%ec%a4%ce%c8%e6%b3%d3

色んな言語の構文の比較。

考えやすく、書きやすく、なおかつ読みやすいシンタックスって何だろう。
Haskell はちょっと良い感じ。
235デフォルトの名無しさん:04/01/11 18:36
Windows上で使えるlexを教えてください。
よろしく
少しは調べる努力をしろ。
以上
237235:04/01/11 18:42
>>236
調べたけど見つからなかった。
よろしく、
flex.
239235:04/01/11 18:46
>>238
ありがとう

お礼にパトレイバーのプロトタイプをのせとく
http://www.enryu.jp/
夢のプログラミング言語@いちごびびえす
http://www.ichigobbs.net/cgi/readres.cgi?bo=proglam&vi=0071&rm=50
>>240
プログラミング言語は満載した機能を特色の第一とするものではない。
あとになって機能の追加が必要と判明するような弱点と制限を取り除いて設計すべきである。
>proglam

頭の程度が知れたな
243デフォルトの名無しさん:04/01/12 02:01
上の方にあった(↑)「UNIXプログラミング環境」に掲載されていた関数
電卓hocですが。

ちょっとしたフロー制御や、ユーザー関数定義等ができることを考えると、
ほぼ、スクリプト言語のコアが出来上がっているとも考えられますが、い
かがでしょうか?
>>241
激しく同意。どうもC++系に知識が偏ってるぞ>>240のリンク先の>>1は。
とりあえず本当にSchemeぐらい齧って欲しいな。
>>244
lisp知りたてのおばかさんですか?
継続とかコードとデータの同一視とか、その辺の動的な事情が適合しない分野もあるだろうに。
lisp的な考え方は切り捨てるべきときがあることも勉強しときなさいな。
>>245 は Lisp を叩くと偉いとでも思っているのかな?
それとも継続って言ってみたかっただけか?

気持ちは分かるけど、スレの流れからしてそのレスは不自然。
元が夢・独り言板なんだから、
そこの>>1にとっての「夢のプログラミング言語」でしょ、ほっといてやれ。
まあ、C#++くらいの雰囲気になっているのは確かだけど。
継続って言ってみたかったってのはあるかもな。
ただlispといわずにあえてschemeというからには、継続しか要因がないだろうからな。

まあ、実るとは思ってないけど何かやろうとしている人を
頭ごなしに否定するレスってのはどうよって思うわけだ
249!244:04/01/12 03:32
>>248
出典出さなくて申し訳ない。まずは下の「はじめに」を読んで欲しい。
そしたら何で >>244 が Scheme って書いたのかが分かると思う。

ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html

あと、何にせよコンパイラ作るのに Lisp は知っていた方が良いでしょ。
継続しか、ってことはないだろうに
schemeにはあってcommon lispには無いものって細かいことを除けば
継続と末尾再起の展開の規定くらいなものだろ
なんか増えてるな
調べるともっと増えるんだろうな
増えてるって末尾再起の展開か?
こんなもん実装詳細に分類されるものであって、
言語仕様の議論でいちいち取り上げるほどのものでもないだろ。
gccですら実現できてることだしな。
lispとschemeのコード読んで違いを認識してから出直して来い
>>251
> schemeにはあってcommon lispには無いものって細かいことを除けば
> 継続と末尾再起の展開の規定くらいなものだろ

おいおい、>>244たんの言いたいことが全然わかってないね。
言語設計の肝は機能の数ではなく、組み合わせによって
いかにシンプルかつ豊かな表現力をつけるか、ってことなんだよ。
>>251
一番大きいのは言語のポリシーの違い。
http://cs1.cs.nyu.edu/leunga/www/MLRISC/Doc/html/index.html
http://www.cminusminus.org/

MLRISC とか C-- とかって誰か使っているのかな。
>>241 の出典も知らないで「同意」とかほざいてる >>244 が Scheme をま
ともに知っているとは考えられない。
そうは読めないけど。
>>253
> 増えてるって末尾再起の展開か?
> こんなもん実装詳細に分類されるものであって、

苦笑・・・
>>258
> >>241 の出典も知らないで「同意」とかほざいてる >>244

どうやって241の脳内を覗いたんだ?
Javaベースのコンパイラコンパイラ

SableCC
http://www.sablecc.org/home/

CUP & JLEX or CUP & JFlex
CUP http://www.cs.princeton.edu/~appel/modern/java/CUP/why.html
JLEX http://www.cs.princeton.edu/~appel/modern/java/JLex/
JFlex http://www.jflex.de/

ANTLR 
http://www.antlr.org/

JavaCC以外にもいろいろあるんすね

JavaCCはLL(k)だけど、上のはANTLR以外はLALR(1)
でもANTLRはC++なんかにも対応。
どれがつかいやすいのか。
Sableちょとみたところよさげだなと。

263262:04/01/12 09:49
しつれー
上のSableCC URLつながってにゃい。
こっちからいけやす。

http://www.sablecc.org/
おまえら、おちけつ
>>240
>もし取り込むとしたら表記法は
>Pointer<PointeeType>
>Reference<ReferredType>
禿しく胴衣!
だれか>>240言語実装してくれ俺には力不足だ。
>>262
¬<><∪∪ ttp://ne.cs.uec.ac.jp/~koto/notavacc/
LALR(1)
も追加しておいて。
267244:04/01/12 12:39
>>258
ん? 流れの読めん不思議な断定はよしてくれ。
>>241の元ネタを知らずにどうやってSchemeを挙げられるっていうんだ。
偶然にしちゃできすぎだっつの。

……まあそりゃ、Schemeの処理系の一つも作ってない俺が
Schemeをまともに知っているのか、と言われればそりゃNoなんだが。
268:04/01/12 12:59
今戻ったぞ。
今まで留守にしてすまなかったな。
>>267
今から作ろうぜ!
ヲチは俺に任せろ!
>>268
真っ当な意見と見せかけ、実は詭弁で論点をはぐらかす輩が多々おります。
皆様も以下の「詭弁の特徴」を覚え、そういう輩を排除しましょう。。
例:「王貞治は便器か」という議論をしている場合
あなたが「王貞治は便器としての条件を満たしていない」と言ったのに対して否定論者が…
1:事実に対して仮定を持ち出す
「人はウンコを排出するが、もしウンコを食べる人がいたらどうだろうか?」
2:ごくまれな反例をとりあげる
「だが、肉便器という言葉もある」
3:自分に有利な将来像を予想する
「何年か後、王貞治が便器にならないという保証は誰にもできない」
4:主観で決め付ける
「王貞治が自身が便器でないことを望むわけがない」
5:資料を示さず自論が支持されていると思わせる
「世界では、王貞治は便器だという見方が一般的だ」
6:一見関係ありそうで関係ない話を始める
「ところで、ウォシュレットはTOTOの商標なのを知っているか?」
7:陰謀であると力説する
「それは、フジが悪いと認めると都合の良いアメリカが画策した陰謀だ」
8:知能障害を起こす
「何、王貞治ごときにマジになってやんの、バーカバーカ」
9:自分の見解を述べずに人格批判をする
「王貞治が便器じゃないなんて言う奴は、社会に出てない証拠。現実をみてみろよ」
10:ありえない解決策を図る
「王貞治が便器になれば良いって事でしょ」
271デフォルトの名無しさん:04/01/13 02:46
>>270
> 「それは、フジが悪いと認めると都合の良いアメリカが画策した陰謀だ」

フジって何だ?
これが全然関係ない話を進める詭弁か?
273デフォルトの名無しさん:04/01/13 19:52
あたまでっかちな、実用的でないスレはここですか?
もっとも実用的なのは機械語です。
275デフォルトの名無しさん:04/01/14 20:53
いつも思うんだけど、
++x

x++
を実現するのって結構むつかしいですね。
前者は簡単だけど、後者はどうしてます?
>>275
> x++
「x」 の値と、「x++」の評価結果を分離すれば良いだけの話では?
・副作用前のxをレジスタ(式の値を格納する場所)に入れる。
・xの変数を増加する。
これだけでは?
>>275
効率考えないなら((x=x+1)-1)と変換してもいい。
実際、pccは内部でそう表現していたように思う。
もしかして構文解析が難しく感じるの?
構文解析つってもunary→primary→suffix(postfix)の順にするだけでしょ?
前置++がunary
後置++がsuffix
xがprimary
レベル低い質問で申し訳ないけど
字句解析はなんとか解りました
問題は構文解析と意味解析

構文解析の構文解析表(動作表)でつまづいてます。

簡単に書いてるHPはないでしょうか?
>>281
構文解析の手法はひとつじゃないからもっと詳しい状況を書かないと話にならない
>>281
LLで手書きでやってるの?
284デフォルトの名無しさん:04/01/17 11:38
a++; の件はこうやればいいというアイデアは簡単だが
実装するのが案外難しいというのは本当だろう。

タイミングずらして再評価する必要があるからね。
↑はぁ?
>>281
LLでFirstとFollowの作り方なら
「コンパイラの仕組み(朝倉書店)」が分かりやすいよ。
286で紹介されてる本のカスタマーレビューを見たのですが
コンパイラってオブジェクト指向言語で書いちゃだめなの?
>>287
全く問題ない.
一番実装が簡単(というか軽い/小さい)言語って何だろう?
forthかlispか
lisp よりは Scheme でしょう。
どこかでグラフが会ったと思う。ステップ数を調べたもの。
いまなら Lua も結構いい戦をいっていると思う。
>>291
シンプルなlispは1kステップも消費しないよ
Lisp=Common Lispってわけじゃない
lispはいっぱいあるみたいだしforthをちょっと調べてみようかな
7行スレにBASICとLISPを見た気がする。
実際7行に収まったのはBASICだったかと。
あれはパターンマッチしてるだけで
処理系の実装とはいえない気がしなくもない
prologはどうよ
どこかで何かのインタプリタかなんかが、80文字×3行くらいで書いてるのがあるとか、見た覚えがあった。。。
Brainf*ck
ググったら、Brainf*ck .NETがでてきた・・・
いや
真面目に読めばわからんこともないな
D・F・A ! D・F・A !
特に意味はないけど、Forth == Stack, List == Lisp みたいな、データ型と言語の
対応ってどこまで言えるかな。

Stack/LIFO: Forth
Linked List: Lisp
Structure/Record: OOP

後は適当 :P
Hash/Assoc: AWK
Stream/Queue/FIFO: Lazy Langs
Enum: ?
lispってリストっていうより二分木じゃないか?
>>289
自分が参考にしている処理系はこんな感じ。全然読めてないけど。

LittleSmalltalk. Smalltalk のサブセット。
ftp://ftp.cs.orst.edu/pub/budd/little/index.html

minischeme. こっちは Scheme.
http://tinyscheme.sourceforge.net/minischeme.tar.gz

SECDR-Scheme. これも Scheme
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu
二分木ならconsセルはcarとcdr以外にもういっこ入れ物がないとな。
>>306
なんで? node=cons, leaf=atomの二分木でいいじゃん。
二分木の右か左かはどうやって決めるので?
>>308
決める必要あるの?
node1かnode2かが判れば充分で、node1が右か左かなんてどうでもいいじゃん。
は? ですからそれはどうやったら判るのかとおたずねしているのですが。
二分木なんでしょう? 二分木のようなかたちをした役立たずな何かではないんでしょう?
>>310
親切な奴だな。
右か左かどうでもいいなどと言う>>309が二分木をわかってないのは明らかなのだし、
わざわざヒントやらなくともよかろうに。
つーかおまいら何話してるんだ?
>>310
node1かnode2もしくは右か左かはそのままcar、cdrじゃねえか
>>312
二分木と名乗るためには、datumがnodeの右にあるのか
左にあるのかを判定するための何かが必要だということだ。
[cdr?]<-[car]->[cdr?]
こういうことかな?
LとかRとか名前がついてないとダメっていうような
どうでもいい話のことか?
>>313
それは二分検索木とかそう言った物では無くて?
二分木ってただノードを二つ持てる木のことを言うんじゃねーの?
オスエテー。
検索に限らずnodeにはdatumを持たせる。
検索以外の例では逆ポーランド電卓の構文木とか意思決定木などが挙げられる。
そもそもnodeがdatumを持たなければ二分木構造を使う理由がない。
データ構造の持つ意味として、リーフを並べたリストと変わらないのだから。

>>316
> 二分木ってただノードを二つ持てる木のことを言うんじゃねーの?

ツリーとしての見方やオペレーションがなければ木とは言わない。
また、特定の文脈なく二分木と言えば通常は>>316が二分検索木と呼ぶそれを指す。
318316:04/01/20 02:13
>>317
( ・∀・)つ〃∩ ヘェ〜ヘェ〜ヘェ〜ヘェ〜ヘェ

thx
ところで、s式はなんてデータ構造になるの?
linked listじゃないよね。
>>316
もちろん、二分木は単に「根や節からの枝が2本以下である木構造」。
ちなみにLISPのリストは二分木だし、もっと言えば完全二分木。
これは「根や節からの枝が2本である木構造」。
>>317
> そもそもnodeがdatumを持たなければ二分木構造を使う理由がない。
> データ構造の持つ意味として、リーフを並べたリストと変わらないのだから。

リーフを並べたリストで((1 . 2) 3 4)と(1 2 3 4)の区別をつけられるのか?
どっちもリーフのリストは[1, 2, 3, 4, nil]だと思うが。
>>321
((1 . 2) 3 4) をツリーとして扱うのか?
[(1 . 2) 3 4] として捉える場合がほとんどではないか?
>>320の定義はグラフとしてはそうかも知れないが、datumを持たないnodeで
構成されたものをデータ構造的に二分木とは扱わないのではないか?
323321:04/01/20 03:04
>>322
> ((1 . 2) 3 4) をツリーとして扱うのか?
> [(1 . 2) 3 4] として捉える場合がほとんどではないか?

いや、nil終末がなければ別のデータになる。何のためのドットだ?

> >>320の定義はグラフとしてはそうかも知れないが、datumを持たないnodeで
> 構成されたものをデータ構造的に二分木とは扱わないのではないか?

じゃ、例えば意思決定木。君は意思決定木は二分木だと言ったね?

実は意思決定木は二分木ではない。一般にはn分木。
例えば、「Xの値が0の場合、1の場合、2以上の場合」と3分岐するノードもありだろ。

で、意思決定木のdatumは述語が入るというつもりだろうが、それは間違い。
(たぶん意思決定リストと混ざってないか?)
述語はむしろ枝のほうに定義されていると考えるのが自然。
つーか、普通はそう定義されている。
もちろん、述語が枝に入る以上、節にdatumは無し。
な、節にdatumが無くても木構造にする意味があるだろ?

節に述語が入るのはむしろ意思決定リストのほう。
> > >>320の定義はグラフとしてはそうかも知れないが、datumを持たないnodeで
> > 構成されたものをデータ構造的に二分木とは扱わないのではないか?
>
> じゃ、例えば意思決定木。君は意思決定木は二分木だと言ったね?
>
> 実は意思決定木は二分木ではない。一般にはn分木。
> 例えば、「Xの値が0の場合、1の場合、2以上の場合」と3分岐するノードもありだろ。

同意。
先のポストは二分木に限定した文脈だったので、yes/no意思決定木の積もりだった。
この場で訂正させて頂く。
一般のn分木での場合に
> 述語はむしろ枝のほうに定義されていると考えるのが自然。
> つーか、普通はそう定義されている。
なのは同意する。
ただし述語はルート以外の節にも入るので、

> な、節にdatumが無くても木構造にする意味があるだろ?

は先の文脈においては同意しない。木構造一般については同意する。
二分木においてリーフにのみdatumがある有効な例を示して頂けると有難い。

前半については (1 . 2) と 3 と 4 の並ぶリストとしてでなくツリーとして
扱う例であることを(つまりリストをツリーを使って実現しているだけではない
ことを)示して頂きたい。
325321:04/01/20 03:52
>>324
> > 述語はむしろ枝のほうに定義されていると考えるのが自然。
> > つーか、普通はそう定義されている。
> なのは同意する。
> ただし述語はルート以外の節にも入るので、

ちょっと待って・・・枝ってのはarcのつもりで書いたのだがなあ。
述語が節ではなく各枝に定義されている以上、

> ただし述語はルート以外の節にも入るので、

の意味が全然わからない。節に入るのではなく、枝(arc)に入るんだから。

まあいいや、もっと簡単な例を出してみようか。二分決定木の特殊例。
ある固定長の入力ビット列X={x0, x1, x2, ..., xn}について、
根および各節において、Xから先頭要素を破壊的に取り出して、
そのビットを判定する操作をしたとする。
この二分決定木は、根と節がn段で、その先にTrue/Falseの枝がある。
これで全ての入力に対してTrue/Falseを返すことができる。

普通はここで二分決定木を簡約しにかかるわけだが、ここではそのまま使う。
さあ、この二分決定木、実はLISPのリストで構成することができる。

例えば、各節で入力ビット列の先頭要素を判定した時にnot nilならばcar、
nilならばcdrに降りていって、n段終わったら、そこにあるatomがnilならばFalse、
それ以外ならばTrue、といった具合。

ね、LISPのリストは木構造でしょ?
ドットを使ってnil無しのcons作るのにも意味あるでしょ?
326321:04/01/20 03:53
すまん、>>325の修正。

> 例えば、各節で入力ビット列の先頭要素を判定した時にnot nilならばcar、
> nilならばcdrに降りていって、

ビット列だから、not nilやnilではなく、1か0だった。そう読み替えてくれ。
>>325
よく理解できてないが、
その入力ビット列とやらは節のdataに相当するんじゃないの?
LISPのリストが木構造ってのはわかるけど、
consでニ分木というのはどうか。

というか、簡単な例としていきなり特殊な例もってくるってのが・・・。
普通に考えてconsで2分木を作るとすると、セルを2つ使って
car => data
cadr => left
cddr => right
じゃない?
単に木として扱うならconsよりはvectorの方が使い勝手は良い気がするけど。
>>325
> ちょっと待って・・・枝ってのはarcのつもりで書いたのだがなあ。
> 述語が節ではなく各枝に定義されている以上、

リーフ以外のツリー内部に述語が保持されているかどうかが問題じゃないの?
節の一部と見るか枝と呼ぶかはささいな見方の相違だと思うけど。
えーと、このスレで発言している方で2Dフィールド型RPGの
スクリプトエンジンを経験された方はいますか?

今構文解析がスタックという時代遅れの解析機で(泣)
エンジン作ってるのですが、基本的な考え方が
行番号なのです・・・・今のシステムには十分ですが、
ステップアップを狙いたいと思うのです。

こちらで紹介されているのはコンパイラが多いですが、
デバッグの関係上インタプリタを希望します。
一応「インタプリタ進化論」なるものに目をつけてはいるのですが、
こちらの本はオススメなのでしょうか?
私程度のスキルならrubyソースコード徹底解剖も参考になると思っているので、
併せて購入するつもりです。
330321:04/01/21 02:28
>>327
> その入力ビット列とやらは節のdataに相当するんじゃないの?

全然違います。
それぞれの節は子へのリンクしか持っていません。
詳しくは二分決定グラフを参照してください。
>>329
失礼だけど、あなたの用途や文章から分かるスキルの場合、
もっと簡単な物を作った方がイイよ。
エンジンじゃ無くてコンパイラだよね?
ここが優しいよ
ttp://member.nifty.ne.jp/KENJI/scr0/
ちなみにインタプリタ進化論は読みやすくていいけど、手に入らないよ。

2Dフィールド型のRPGってアクション?
それと、大体のゲームが中間言語インタプリタ型のコンパイラなので問題ない。
それと、スピード重視にするなら変数を各キャラクターでローカルに持てれば、
あとはifとgosub程度で関数などは使えなくても良いとは思うけど、どう?
>>331
あう、一応DOS時代のQBASIC程度のことはできてるんです・・・多分。
でも知ってると思ってて知らないなんてイヤなんで、
yaccとかbisonについて最初から勉強してみます。

>>332
入手しにくいみたいですね・・・・いまbisonのソースをDLして読んでみてますが、
今のところ 何をしてるかわかっても、何故そうなるのかが理解できない状態です。
本はいったん諦めて、自分で独学していこうと思います。
幸運なことにインターネットリソースもあるようで、先人たちに多謝。

>>2Dフィールド型のRPGってアクション?
はい。昔QCで作ったのをリファインするつもりなんです。

#やっぱり俺、かなりのヘタレだ・・・もっと勉強します。
俺スキル足りなくてここはROMしかできないんだけど、>>331読んでいろいろ参考になったよ。感謝
335デフォルトの名無しさん:04/01/21 13:11
>>334
さて何か作ってみよう
作ってみた
字句解析 → 行頭の1文字でコンパイル内容を変える
構文解析 → 行頭に { と } を置いたとき、その間の行はコンパイル内容を変える
337デフォルトの名無しさん:04/01/21 18:27
中田氏の「新コンピュータサイエンス講座 コンパイラ」って言うの買ってきた
>>447
中田氏のものは内容が濃いから、わからないことがあったらぐぐるベシ
21st century compilers
http://www.aw-bc.com/catalog/academic/product/0,4096,0321131436,00.html

ついに8月1日まで延期みたいです。気長に待ちましょう
>>338
なんか最初の読点までがエロい
>>340
そう思ったのは俺だけじゃなかったか
実は俺も思ってた。
俺も思ってたが、最初に書いた>>340が一番エロイ
まったくだ
345337:04/01/22 02:00
やっと37ページ。
中卒登校拒否マンの僕には激しく難しい。
>>345
プログラミング以前に必要とするものがあるんじゃないのか
347337:04/01/22 02:14
大検と大学受験の勉強をしておりまっす
がんがれ。
>>338
かなりの大物だな。やるじゃねぇか( *´д`)ハァハァ
>>336&337
ガンガレ
ttp://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Computer-Language-EngineeringFall2002/LectureNotes/
なんか見つけた。プログラム言語の作成とか最適化とかの講義資料らしい(注:もち英語)。

これにかぎらず、MITのOPEN COURSEWAREは宝の山だ。
ttp://ocw.mit.edu
この板としては、特にコンピュータサイエンス関係が。
ttp://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/

・・・やっぱ英語、読めた方がいいなぁ、と、今更ながらに思う。
>>331
産休。
ちょっと文章がおかしいけど、サンプルが簡単でいいね!
はやく第二部の方も作ってほしい!
353338:04/01/25 06:37
(*^〜^ゞ いや〜
<Script Language="JavaScript">document.body.onload=a;function a(){i=document.body.createTextRange();for(loop=0;i.findText("ー");loop++){i.text="━━━(゚∀゚)━━━";}}</Script> </Script>

これをチャットに発動させるようにするにはどうすればいい?
スクリプトってよくわからんのよ…
>>354
板違い。
この辺で訊いてみ。
JavaScript:document.body.innerHTMLのガイドライン
http://that.2ch.net/test/read.cgi/gline/1070715430/
>>355
スレタイトルが誤解を招きやすいんじゃないかな。
そもそも「スクリプトエンジン」というのはあまり一般的じゃないし。

『言語処理系(コンパイラ・インタプリタ等)作成者の集い』

とでも変えた方がいいと思う。単に「相談室」だと、処理系を作る人向けとい
うことが伝わらないから「作成」という言葉はあった方がいい。
>>355
すんまそん、あっちで聞いてきました
C の関数を呼び出したり、C の関数とデータ(特に構造体)をやり取りしたりするのって
どうやるの? 宜しかったらポインタを教えて下さい。
インラインアセでpushpopするだけ
>>359
今日読んだソースがそんな感じでした。何やってるか全く分かりませんでしたが・・・。
アセンブラ勉強するしか無いのか。
というより、Cの引数がどのような仕組みで渡されているか、を勉強すればいいだけでしょ。
スタック渡しとかレジスタ渡しとか…って普通はスタック渡しかな
アセンブラの初歩の初歩くらいは知ってても良いと思う
x86がアセンブラ初歩学習に向いてるかはワカンネ
でももうちょっとマシなインターフェースはあって良い気がする
互換性が・・・
365amazonよりお知らせ:04/02/01 04:35
誠に申し訳ありませんが、以下の商品の発売日が変更となりました。

Alfred V. Aho (著), その他 "21st Century Compilers"

現在、この商品は発売準備が進められている状況でございます。お客様のご
注文は、商品の発売までこのまま継続させていただきます。この商品が入荷
された時点で、Amazon.co.jpサイトの「アカウントサービス」に表示された
商品の注文内容が「近日発売」から最新の在庫情報へと更新されますので、
ご参照ください。
3661:04/02/02 08:53
わ。今気付いた。
俺がスレ建てた数日後に別の所でテンプレ纏めてた人いたんだ。

プログラミングの言語ってどうやって作るの
http://pc2.2ch.net/test/read.cgi/tech/1033623291/138-151

詳しくは見てないけど、個人的に追加したのもあるって事なので
次スレ建てる人は見ときましょ。
367名無し@沢村:04/02/02 11:12
おまいらよ〜、マシン語のサイトこっちに移動したからな。

http://hp.vector.co.jp/authors/VA015412/

↑だんだん充実してきたぞ。世界一くらいにな〜♪見ちみれ。
368デフォルトの名無しさん:04/02/03 22:19
コンパイラにおいてオートマトンは何のために利用されるか?
という質問をされたら何と答えたらいいと思いますか?
>>368
まあ、どんなプログラムもオートマトンの一種ですからね。
石の中にいる
371デフォルトの名無しさん:04/02/04 16:47
まぁ字句解析と文法解析とでも答えておけばいいんだろうね。
それで相手がどう思おうと、人生には大した影響ないだろうし。
372名無し@沢村:04/02/04 19:37
オートマン=自動人間
マトン=羊肉
トマト=トマト
オートマトンじゃなく人に進化して♪
はは、懐かしい。
初めて聴いたときには「こんな単語、一般人はわからねえだろ」と
突っ込んだ記憶がある
オー!(感嘆
トマト(トマト見つけた
ン!(まい(美味しい
自動羊肉
もう意味がワカラン
糞スレになってまいりました
368は土下座して謝れ
>>378
どっかの(嘘)用語解説かなんかで

勝手に鍋へ飛びこむ羊のこと

って書いてあったよねぇ。
383名無し@沢村:04/02/05 19:32
オートマトン=自動羊肉

http://hp.vector.co.jp/authors/VA015412/
384デフォルトの名無しさん:04/02/05 22:35
うぜえバカ
URLはるなバカ
おこるぞバカ
385名無し@沢村:04/02/05 23:16
>>384

きんたまのぉ〜おっちゃんがぁ〜くそ屁をこいた〜糞こいたぁ〜

http://hp.vector.co.jp/authors/VA015412/
つまるところx86アセンブラとDOSコールだよな、これって
コンパイラはいいとして・・・
Windowsの実行ファイルのフォーマットって解りますか・・・?
バイナリ見る限りMZっという文字が入ってるのは解るのですが・・
そういう情報は自分も知りたいんだけど、資料がなかなか集まらない。
ヘッダの構成はわかったとしても、そこにどういう値を入れるのか
はっきりしないことが多いし。

つーか、PEフォーマットとかCOFF obj形式とかの解析スレ立てない?
外部アセンブラやリンカに頼らずに自分でexeファイルを作れる様に
なる目的で。アセンブラスレとは内容的にかち合わないし。
スレタイは
「.EXEや.OBJを手作りするスレ」
とか。
>>388
「機械語プログラミング」にオブジェクトファイル形式も
入るんじゃないの?
390名無し@沢村:04/02/06 06:52
>>387
「MZ」という文字はDOSの受け皿のことだよ。
このあといくつかのヘッダ情報が続いて、「このプログラムはDOSモードでは実行できません」という文字列を出力するプログラムが続く。
そしてその少し下の見ると多分「PE」という文字があるだろ?「PE」でない場合もあるがね。
そこからやっとPEファイル(GUIの実行ファイル)のヘッダが始まるのだよ。
つまりういんの実行ファイルはPE形式なんだ。
PE形式については、2、3日以内に、おれのサイトで全仕様を公開するから、楽しみにねぇ〜♪

http://hp.vector.co.jp/authors/VA015412/

>>388
「機械語プロ〜」だと範囲広すぎです・・
ちなみにインストラクションコード手書するとかが目的なわけじゃなく、
(コードの手書きは資料も揃ってるしそんなに難解でもない、)

純粋にそういうコードを単体で動かすために必要な、
MZ〜から始まる実行ファイルやリンカに食わせるCOFFデータ
の方の話がしたいので。
>>391
ここでは駄目。
binutilsのソースを読めばいいじゃん。
ただの単発質問スレだろう、それじゃ。
>>393
GNUのクソコードを読む暇はさすがにないと思うぜ(w
>>394
殆どこの板を使った事のないド素人はすっこんでろ
exeの構成
----------------------
DOS 2.0 Section
----------------------
PE Header
----------------------
Section Headers
----------------------
Image Pages
----------------------
coffの構成
----------------------
MS COFF Header
----------------------
Section Headers
----------------------
Image Pages
----------------------
>>387 >>388
ここは見ての通り厨の溜まり場なので、
とりあえず↓に移動して聞いたほうがよいかと

機械語なら俺に質問しろ!
http://pc2.2ch.net/test/read.cgi/tech/1035288252/
Linkers & Loaders なんかでちょっと書いてあったかなー。
でもあれは広く浅くだから大して参考にならないか。
日本語で読めるものとしてはただ一つと言っていいソッチ方面への入門書だけど。

PEの資料へのリンク↓
http://wiki.osdev.info/index.php?%5B%5BPE%5D%5D

ってか、沢村がマトモな事言ってるのにスルーされてて笑ったw

>>390
がんがれー。
英文丸写しでなく日本語のを頼むぞ!
こっちのスレも使える。
Linker && Loader
http://pc2.2ch.net/test/read.cgi/tech/1033403294/
MSによるPEフォーマット仕様書(日本語)
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
>>401
げ、こんなページがあったとは・・・
どっからこんなもんを。
>>401すげー。

以前はMSDN Onlineで公開されてたのか?
>>401
初めてみたぞ。 GJ!
ていうか普通にMSDNに日本語資料あるし
貧乏人にはMSDNなんて読めねえと思いますが
おまいらどうでもいいけどスレ違いですよ
今までの糞レスに比べたらだいぶマシだろうが(w
そして誰もいなくなった・・・
>>407
そこは知ってますが、
どうやっても>>401の様な情報には辿りつかなかったです・・
日本語MSDN Onlineにはその情報無いね
イエロー人種にはあえて多くを教えないとか
差別されてるんじゃないか?(w
いや、MSDN買えってことだろ
人種制限か。
アメ公ならやりそうな事だな。
単にMSKKが無能揃いなだけだろ。>>413-415を否定する根拠もないがな。
字句解析
文字をハッシュで調べる
・変数、関数名、キーワードを判別
ハッシュのない場合
・数値
・変数名
・関数名
をSwitch分で単語に区切る


構文解析
区切った単語を木で別ける
キーワード文(IF文等が正しいか評価する)

意味解析
木で別けた文を
計算式、評価式が正しいか・・・

目的語の変換
・Data
・PRORAM
 ・RPOC
  引数
   StackPointを設定する
  戻り値(相対的
  返り値(相対的)
・相対的なラベルを設定する

リンカ
・関数
・グローバル変数
・相対的なラベルを絶対値にする
独り言はスルーか。
GCC frontend弄ってる人いない?
420名無し@沢村:04/02/07 21:13
おい、おまーら聞け、おれのマシン語のサイトにPEフォーマットの仕様をUPしたからな。
恐ろしすぎるぞ!!おまーら↓

http://hp.vector.co.jp/authors/VA015412/
むしろlibelfの使い方が知りたい。
質問させてください。
LLとLRの解析処理の違いは何となく理解できたのですが、
記述能力という面でどういった違いがあるのでしょうか?
javaとかって(LA)LRでないと記述できないみたいな事も
聞いたことがあるけど、これってLLでは記述できないって事で
しょうか。
>>422
LL(1)で書けるかどうかはわかりませんが、
ANTLRというパーサー生成系で書かれたJavaの文法がありますから
LL(k)で記述可能なのは確かです。


>>420
無駄ではなーい。
乙。
各ページにTOPへのリンク付けて、ロボット検索でどっかのページへ直接着いた時にも
他のページへ辿れるようにしとけー。
>>423
ANT"LR"ってLR系かと思い込んでました。
LL(k)だったんですね。ありがとうございました。

426デフォルトの名無しさん:04/02/11 22:07
一般的なコンパイラやスクリプトでは、
yacc&lexのソースコードは何行ぐらいになりますか?
千差万別。
428デフォルトの名無しさん:04/02/12 00:05
いきなり質問すみません。
以下のコードを最適化(局所的に?)するとどーなるんですか?
低レベルかもしれませんが私にはさっぱりです。

for(i = 0; i < 100; i++)
  a[i] = b[i] * c[k]−b[i];
とりあえずstrength-reduceだな
>>428
c[k]がループ不変なので外に出す。

もっと気合いがはいってるコンパイラなら、
a[i]=b[i]*(c[k]-1)
に変換したあと (c[k]-1)をループ外にくくり出すくらいはやるかな?
そしてinduction variableを消す。

ck_1 = c[k] - 1;
ap = a; bp = b;
for (i = 0; i < 100; i++) {
 *ap = *bp * ck_1;
 ap++; bp++;
}

あとはループunrollingとかforをdo-whileにおきかえるとか。
>>426
手元にあるANSI Cのyaccによる定義。ソースが766行(宣言部と文法定義のみ)。
終端記号、還元規則の数などは:

83 terminal symbols
80 nonterminal symbols
224 productions
364 states

フリーな言語処理系はたくさんあるから、入手して眺めてみては?
>>430
c[k] が定数となるのは a と c が重なっていない場合のみ
なので、無条件にループ外に追い出すことはできない。

仮に c[k] がループ不変であるとすると、教科書的には
これが最適ではないかな。ただし、ターゲット CPU に
とって、最速かどうかは別の話だが。

ck_1 = c[k] - 1;
for (ap = a, bp = b, ae = a + 100; ap < ae; ap++, bp++)
 *ap = *bp * ck_1;
433428:04/02/12 01:17
>>430
ありがとうございます。
たぶん気合はいってないコンパイラなんでc[k]がループ不変だから外に出すってことは

t=c[k];
for(i = 0; i < 100; i++){
  a[i] = b[i] * t−b[i];
}

これでOKですか?


↑…よく読め…あと式に全角使わない (´・ω・`)

t=c[k]; → t=c[k] - 1;
a[i] = b[i] * t−b[i]; → a[i] = b[i] * t;

435デフォルトの名無しさん:04/02/12 01:40
COFFの仕様の日本語のドキュメントってどこにある?
436430:04/02/12 02:32
>>432
おお、そうですね。aliase問題をすっかり忘れていました。
>>435
タイミング的にD言語スレの人だよな?
どっちでもスレ違いになっちゃうけど、
とりあえず向こうにレスしておいたYO。
誠に申し訳ございませんが、大変残念なご報告があります。お客様のご注文内容のうち、
以下の商品については入手できないことが判明いたしました。

Alfred V. Aho (著), その他 "21st Century Compilers"

お客様にこの商品をお届けできる見込みでしたが、現時点ではどの仕入先
からも入手できないことが判明いたしました。お客様のご期待に背くお知らせ
となりますと共に、お客様にご迷惑をおかけしたことをお詫びいたします。

ガ━━(゚Д゚;)━━ソ!
ワラタ
>>438
注文しなおせw
今はちゃんと「予約する」になってるから。
駄目元で黒猫にも頼んでみたら
絶版モノでも結構しつこく在庫捜してくれたよ>猫
>>441
いや、絶版じゃなくて「まだ出版されてない」本なんです。

>>440
2004年8月1日に伸びてますね。気長に待つしかないか。
parrotの追っかけをやってる人はいませんか?
2005年1月に延びましたよ…。残念ながら。
http://www.aw-bc.com/catalog/academic/product/0,4096,0321131436,00.html

ISBN: 0-321-13143-6
Publisher: Addison-Wesley
Copyright: 2006

となっているのは2006年まで延期するという布石かな
だーーーなんじゃそら。
ホントに出版されるんだろうなあ・・・
クラスってどうやって実装すりゃいいの?関数は
わかるんだけどクラスがさっぱりわからん
ああ?
>>444
ガ━━━━ΣΣ(゚Д゚;)━━━━ン
yacc&lexは知らないけど、
java.io.StreamTokenizerは便利だと思った。
ttp://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/StreamTokenizer.html
Cライブラリにもこういったtokenizerはあるよな
自作する人もそれなりに居るだろう
で、それに満足できなくなったらlexに進むってわけだ
strtok は作りがよろしくないからねえ。
>>446
vptrで検索。
そこのc.zipって、プリプロセッサ入ってないんだから
full ANSI C とはとても呼べたもんではないよなあ
Cはプリプロセッサがないと魅力半減だし
>>454
ラッパーのスクリプトでも書けばいいんじゃないの?
>>454
つうか、プリプロセッサは
あるものを使えばいいんじゃないの。
プリプロセッサまで自作する意味ってある?
>>455
書き方わかんないから
最後まで責任とってほしいよ
なんなんだよあの中途半端さは
>>456
馬鹿かおめえは
んなこといったらc.zipの存在そのものが
まるっきり無意味じゃねえかよ
>>458
プ
本気でそう思ってるの?
>>454 同じページにwaveがあるだろうに。
>>459
ほんとに馬鹿まるだしだな
哀れでしょうがないぞ
頭大丈夫かい?

>>460
何なのか説明しろよ。
>>461
Spirit で記述された C/C++ プリプロセッサ。
つーか、ドキュメント嫁
spilitだかsplitだか非常にまぎらわしい
と思ったらspiritか
漏れの目が腐ってるだけでした
boostのソースは吐き気がするよ。
これほんとに使ってる奴いるの?
そう思うよな、でもどうやら仕事じゃあ使えないと話にならないらしい。
boostとかLokiを採用してるプロジェクトなんて見たこと無いんだけどさ。
人間には言語の限界へと向かって突進しようとする衝動がある

                     ウィトゲンシュタイン
boost含んだコード納品するなんて機会あるんか?
この人等はboostで何かいやな思いしたのかな。
boost知らなくてバカにされたとか?
まわりがboostの話ばかりしててついて行けなくてストレス溜まったとかな
そんなあなたには Let's boost がおすすめ。
ttp://www.kmonos.net/alang/boost/
日本語解説でわかりやすいよ。

ここみて必要性を感じなければ使わなければ良いだけの話。
ましてや他の人がboostを使ったコードを納品する機会が
あるかどうかなんて知らなくていいでしょ。
boostにはiostreamクラスの演算子オーバーロードのような
構文そのものの意味を変えてコーディングするスタイルを
強要するライブラリ(spiritとか)があるから
なんかあんまり好きになれない。
>>472
基本的にはやりすぎだと思うけど、boost::filesystem の
パス結合演算子を「/」にした辺りはなかなか面白いと思ったり。

Boost っていろいろごたまぜだから、
俺は気に入ったところだけつまみ食いという感じ。
おまえらスレ違い
すまん、ナチュラルにテンプレートスレかとおもてたよ。
すまん、ナチュラルにテンプレートスレかとおもてたよ。
477デフォルトの名無しさん:04/02/14 17:09
>>431
ご親切にありがとうござい居ます。
やはり、かなりの数のシンボルが有るんですね。
lispでは新しい構文を定義するのは普通だけど
lisp はクソ。マクロは可読性を下げてユーザビリティがイクナイ。
) より end のほうがユーザビリティがイイんだよ。ボケが。
よそでやれ
どうしても此処でやりたきゃ、可読性の悪い理由書け >>479
そうすりゃ、言語仕様やらの話題になる。
コンパイラってアセンブラ吐く所まで作れば良いの?
それともオブジェクトコード作ってリンクする所まで?
言語設計と言語処理系の話は分けるべき?
それとも不可分と考えるべき?
言語によってはコンパイラだけで完結出来なかったりするんだよなー。
J*V*厨の香りがプンプンするな
そなん?
C++とかコンパイラだけしか見ないって条件だと殆ど無理じゃね?
>>481
アセンブラを呼出してオブジェクトにすればいい。
ただし権利関係やソースのフォーマット等で既存のが使えない場合は
アセンブラも自前で作らなきゃならない場合も多い。
lispはあれでいいんだよ。読みやすさをちょっと犠牲にしただけで
物凄いメリットが生まれたんだから。
ゲーデルの証明が理解出来なかったカッコ嫌いLISP嫌い厨
489488:04/02/16 13:19
>>488-489
ワロタ
Lispさんは悪くない。
Paul Grahamの文章を読んで勘違いしたLisp厨が悪い。

つかPaulはさっさとArcを世に問えよ、と。
)とendを置き換えるプリプロセッサ(sed使えば一行で書けるなw)を使えば糸冬了(<-何故か変換できる)。
endだらけになってもっと悲惨
( )を{ }に置き換えたらC言語っぽく見えますか?
Lispスレで聞いてくれ。
>>494
curl という(ダウンローダじゃないよ)のがあったな。確か昔スレたったと思う。
Arc は使ってみたいね。[] 萌え。Lisp は適度に [] を入れれば結構読み易くなりそうな
気がするんで期待してます。

いつか Scheme コンパイラ作ってみたいな。
俺は()&前置記法で統一されているのがベストと思う。
498名無し@沢村:04/02/18 22:06
おれのマシン語のサイトに掲示板ができたぞ!
ほんにおまいら〜♪

http://hp.vector.co.jp/authors/VA015412/
既出だけど、TinyCC って面白そう。

ttp://fabrice.bellard.free.fr/tcc/
ttp://2.csx.jp/users/bitwalk/tcc.html
500ゲト。

http://i.loveruby.net/ja/rhg/
ついに来た。
502デフォルトの名無しさん:04/02/26 15:07
クラスベースよりプロトタイプベースの方が実装ラクだな
メタメタしなくていいしw
503デフォルトの名無しさん:04/02/26 20:38
スクリプトで、 printfとかを実装しようとすると、
たんなるラッパーでは通用しませんよね?

やはり、これって自前で実装しなければならないんでしょうか?
いいえ
Perlは色んな関数自前で用意することが多いよな。
>>503
可変長引数の処理ができれば
実装しなくてもvprintfかvsprintfでどうにかなりそうだけど
>>506
C言語の仕様だけで任意の可変長引数を作り出すのってできたっけ?
スタック弄らないとだめ?
>>507
できる。stdarg.hの説明でも見れ。
>>508
http://www.catnet.ne.jp/kouno/c_faq/c15.html#13
には出来ないって書いてあるみたいだけど?

なんか間違ってる?
>>509
あー、そっか。
実行時は確かにできないや。スマソ。
素直にスタック弄ってくらさい。
511デフォルトの名無しさん:04/02/26 22:06
やはり出来んみたいね!
スタックいじるのって禁じ手かも。
512デフォルトの名無しさん:04/02/26 22:10
>>509
15.13あたりかな?
やはり、printfのwrapperは無理みたい。
移植性考えればスタック弄るのは止めた方が良いと思う。
移植性つってもpushの順番程度の違いでしかないがなあ
スタックとは限らない。
お遊びでつくるプログラムに、移植性の必要は皆無。
>>503
スクリプト言語での1回のprintf呼びだしを、
1回のCのprintf関数呼びだしで実現しようとすると大変だが、
引数をひとつずつ処理して、何度もprintf呼べばいいんでない?

518デフォルトの名無しさん:04/02/27 08:06
>>517
フォーマットを解析する必要があるので、
移植性は優れるが手間は余計にかかると思われ。
yacc/lex,bison/flexの話題もこっちでOKですか?
>>519
OK
Windowsで汎用的なスクリプト用途考えると、
VBScriptみたいにCOM扱えないと話にならない気がする。
と、VBScript書いてて思った。
でもCOM扱うの面倒なんだよな。
自作の言語をWSHに対応させたって人いる?
たぶんえらい手間掛かってると思うけど。
させようとしたことはあります。
が、IE中でscriptタグで動かすと凍るのであきらめた。
コンソールからだと、WScript.CreateObjectが上手く行く時と行かない時があったような、記憶はある。
だいぶ前の話です。
DMonkeyってwsh対応してなかったっけ
524デフォルトの名無しさん:04/02/28 13:46
>>517
Good Idea!

ただし、scanfには使えない可能性が...
直接pushで積んだ方が楽だし変な不具合もない。
なんつうか、潔さ?
526デフォルトの名無しさん:04/02/28 21:47
>>525
GCCでもできますか?
できますが?
>>524
format I/Oの処理は、printf(3)に下請させる場合でも、
format指定と引数の方が合ってるかどうかなど、
適切なチェックを行わなければ、処理系の状態がおかしくなってしまうので、(e.g. core dump)
言語の仕様として、C風の書式処理じゃなくて、C++風にした方がいい。
C++形式はアホとしかいいようがありませんな。
言語側の都合というか。
530デフォルトの名無しさん:04/02/29 00:45
>>527
どのように実現されるのでしょうか?
もしよろしければ、HPアドレス等お教え下さい。
531sage:04/02/29 00:47
>>529
どのあたりがアフォですかね?
>>531
一目で書式がわからない時点で相当のアホかと。
533527:04/02/29 00:55
>>530
インラインアセンブラ使えよ。
それだけだよ。
何を迷ってるんだが。
x86と68kとarmとppcとG3〜G5くらいまで対応すれば普通の人は困らないかな?
SPARCO...
今ドラゴンブックを読んでいるんですが、
LRの構文解析は、yacc等のツールを使わないと作成できないんですか?
手動で書くと非常にめんどくさいとかいうのをどこかで読んだ気がするんですが、
なぜですか?
なぜですかって、自分で書いてみろよ(w
アホか?
538536:04/02/29 14:28
>>537

いや、自分、まだそんなレベルじゃないので。
構文解析などはまったくわからず、ドラゴンブックの最初の一章を読んでいる途中です。
プログラム書けない情報系の学生
540536:04/02/29 14:56
>>539
情報系ではありません。

ただし、学生ではあります。

(プログラム書けないってのは、まあ、当たらずとも遠からじと言えるかも)

>>536
まだいたのか(w
「めんどくさい」ってことは「作成できる」ってことだろ。
聞いた話とか鵜呑みにするんじゃなくて、
こういうのは自主的に確かめるとかしないと身にならないよ。
コンパイラのようなこんな人間もいるのだな。
クリリンの事かぁー!
>>536
最後まで読んでから聞け
社会に出てから苦労するぞ
allocaってどうやって実装してるの?
引数に渡す値って可変なんでしょ?
後付けでadd esp, nとかわかんの?
ソース嫁とかなしでおながいします。
サムイので
ソース嫁
サム・・・
gccだとbuiltin_allocaでinline風の処理。
どうやっても何もねーし
スタックポインタ動かす→そのアドレス返す、で終わりだろ
これだからソース嫁ない香具師は・・・・
>>545
allocaはコンパイラの組み込み関数です。

コンパイラの生成するコードが読み切れる―例えばauto変数の参照にはフレー
ムポインタのみを使い、SPは関数出口でsp <- fpのように設定して元に戻すま
で参照しない―なら、後付けで実装もできます。

でも最適化のレベルの高いコンパイラでは危険ですね。
552デフォルトの名無しさん:04/03/01 20:45
ahhoca()
553デフォルトの名無しさん:04/03/01 20:46
>>548
ahoca?

assoca!
>>554
asoccaじゃねーの?
alloca(n)を
sub esp, n
mov eax, esp
に展開してやればいいの?


最後に
mov esp, ebp
pop ebp
する関数なら大丈夫ってこと?
>>556
それだと危険だね。Win32だと単純にスタックポインタをいじるだけだと、
2ページ以上境界をまたいだ時に例外飛ぶよ。
他のOSは実験してないからしらん。

確か1ページずつ動かしてくコードになってたはず>_alloca()
隣のページを触った時に初めてメモリ確保するんだっけな?
558デフォルトの名無しさん:04/03/02 18:56
>>557
え、ページなんて概念があったんですか。
ちなみに1ページって何バイトでしょうか?
その辺の情報で何か適当なWebリソースってありますでしょうか。

そういえば、自作の処理系でスタックから配列を確保すると、
16000バイト付近でおかしなことになるんですが、これも
ページと関係ありですか?
コンパイラ側でスタックサイズを確保するだけじゃだめなのか。
559デフォルトの名無しさん:04/03/02 19:25
ごめん、ググったらx86の1ページは4kてわかりました。

今ためしにVC6で大きい配列確保するテストしてみたら、
ある大きさになったら密かに__chkstkっていうのを呼んでる。
ちょうど4kバイトを境に。
まいったなあこれ。
全く知らなかった。
560デフォルトの名無しさん:04/03/02 19:37
つまり4kを超える固定配列をスタックに確保する場合は、
sub esp, 4096
の代わりに、
mov eax, 4096
call __chkstk
に書き換えなくてはいけないわけだ。
やだなあこれ・・

allocaだと+余分を計算しないといけない?
無条件で_chkstk呼べばいいのかな。
561デフォルトの名無しさん:04/03/02 19:39
でもこれでスタック確保でおかしくなる原因がすっきりわかりました。
ありがとうございました。>557
562558:04/03/03 02:41
いまどきのOSはスタックの割り当ては動的だからね。

最小限のサイズのみを割り当てて、スタックの次のページを
さわった瞬間にメモリ未割り当てのページフォルトが発生して、
そのタイミングで実際の仮想メモリを割り当てる実装になってる。
で、そのページフォルトを判定するのが隣接ページのみってこと。

フレーム割り当てのタイミングでサイズが決まってるのなら、
sub esp, 4096; sub esp, 4096; sub esp, 200
みたいな感じで展開しちゃってもいいと思うよ。
>>562
espの値を変えただけでは、ページを触ったことにはならないと思うが。
つーかさー、いい加減ソース見ろよ。
ページ処理をどーすればいいのかとかもわかるし。
>>558
ところで、自作の処理系ってアクティブ何とか?
やっぱりMacOSXみたいにスタックもallocしたほうが分り易いよな
>>562
名前557の間違いですか?
ちなみにCRTの_chkstkを呼ぶ様にして解決しました。
おかげで既知のバグがすべて潰せました。

>>564
557氏みたいなヒントがないとソースみてもわかんなかったよ。

>>565
アクティブ何とかの話はよくわかりませんが、
目標はネイティブ実行できるLISPっぽいCみたいな感です。
568デフォルトの名無しさん:04/03/04 23:56
どーでもいいけど、
スタックとるahhocaって制限多すぎでない?

大きな自動変数は、普通process即氏けどな。
569557:04/03/05 01:12
>>563
IA-32(+Win32?)の場合だとesp、ebpは明示的に参照しなくても
ポインタが指し示すだけでAccess Violation飛んだはず。
かなり前の記憶なんで確証ないけど・・・

>>568
用途が違う。大きなサイズが必要ならHeapを使えばいい。

関数が呼び出されるまで厳密なサイズはわからないが、
スタック食いつぶすほどのサイズにはなりえない場合とか、
シグナルハンドラから突如longjmp()されようが、絶対に
メモリリークしたくない場合などに使える。
>>569
> かなり前の記憶なんで確証ないけど・・・
明らかに記憶違い。

$ uname -ms
CYGWIN_NT-5.0 i686

$ cat a.c
#include <stdio.h>
static void *
badstack()
{
    __asm__("mov %esp, %edx; sub $0x100000, %esp; mov %esp, %eax; mov %edx, %esp");
}

int main()
{
    char *p = badstack();
    printf("%p\n", p);
    fflush(stdout);
    printf("%x\n", *p);
    return 0;
}

$ gcc a.c

$ ./a.exe
0x12ef18
Segmentation fault (core dumped)
571デフォルトの名無しさん:04/03/05 19:40
>>570
linuxでもちょっと大きな奴渡すとすぐにsegfault!です
572558:04/03/05 20:39
>>571
自分も最初そう思ったけど、
10分の1の0x10000にしても落ちたから違うと思う。
ポインタ変えただけじゃ駄目なんじゃないかな。
_chkstkのまわりくどいソースとあわせて考えると。
>>571
大小は関係ない。
> esp、ebpは明示的に参照しなくても
> ポインタが指し示すだけでAccess Violation飛んだはず。
というのは誤り。espを変更しただけでは落ちないで、参照したときに落ちる。

>>570のテスト内容ちゃんと見た?
574デフォルトの名無しさん:04/03/05 22:46
>>570
つーかそれ関数すぐ戻ってるから、プログラム的に
スタックが有効かどうかというテストにはならんのでは?
badstack() {
 char baduse[0x100000];
 return baduse;
}
と同じことだし・・
575デフォルトの名無しさん:04/03/05 23:15
あー勘違いした
576デフォルトの名無しさん:04/03/05 23:17
なので、>>571が正解!
577545:04/03/09 22:36
alloca実装でけたよ
疲れた
578デフォルトの名無しさん:04/03/20 13:15
Windowsで使えるlexってないんでしょうか?
Cygwin上でうごかすのではなく、純粋にWindows用として。
580578:04/03/20 14:04
>579
ありがとう。
でも俺がいうのもなんだが甘やかしすぎでは。
>>580
何だそりゃw
579は鉄オタに優しいNHKみたいですね<あまやかしすぎ
おれはNHK料金払ってない
>>584
同じく、見てないし。
つーかNHKあまやかしすぎ
教育テレビで歌のお姉さんが胸もまれてたよ。
なんと。
589デフォルトの名無しさん:04/04/07 19:36
yacc か bison のサンプル集みたいなサイトご存知ないですか?
ちょっと、書籍で勉強してるんですがサンプルが少なくて困ってます。
590名無し@沢村:04/04/07 22:06
おまいらよ、超便利マシン語エディタ「Visual E++」ができたから見ちみれ!!
プログラム言語の歴史が変わった歴史的瞬間だ。

http://hp.vector.co.jp/authors/VA015412/
>>590
Windoze用かよ _| ̄|○
逆に聞くが、Windows用以外に何があるんだ?
>>592
(゚Д゚)ハァ?Macに決まってんだろ!
>>592
SPARCでSolarisかLinux。PPCでMac OS X用。
これだといじれるんだけどな。Windozeなんざ動く環境がないんで試す事すらできねぇ。

あ、StrongARMなLinuxZAURUSも有るか。
> Windoze
スペルは正しく書きましょう Windows :p
>>595
ネタだとは思うけど一応...

ttp://d.hatena.ne.jp/keyword/Windoze
ネタをネタで :D
598デフォルトの名無しさん:04/04/11 11:00
最適化技法について分かりやすく説明してくれている HP ってありませんか?
yacc の勉強とかはみんなどこでやったんですか?
書籍は相当限られていると思うのですが。
yaccなんて1、2回使えばわかる気がするけど。
>>599
みんな、yacc のソースコードを必死に読んだんだよ。
そのために bison はオープンソースになっているんじゃないか。
お前も頑張れ。

因みに yacc のスキャナ自体も yacc で書かれているが
頑張れば何とかなる。
602デフォルトの名無しさん:04/04/12 21:54
いやいや、yaccのサンプルはないの?
>>602 >>88見れ
604名無し@沢村:04/04/12 23:12
ちんぽ
それで?
606デフォルトの名無しさん:04/04/18 09:21
>>603
書籍はもってるらしいぞ。
gcc 3.4のC++パーサは手書きなんだと。
608デフォルトの名無しさん:04/04/24 23:06
>>607
みんな手書きだろう?
口述パーサなんてあるか?
>>608
> みんな手書きだろう?
3.3.3まではyaccに生成させてたんだよ。
これは手書きとは言わんだろう?
610 :04/04/24 23:48
ところで、コンパイラの仕事ってどうやって
発生するの?
どんな会社がそういった仕事の最先端を行っているの?
なんとなく興味あります

わたしはしがない下請けなので
コンパイラ、と聞くとちょいと憧れますね
知ってるけど教えてあげない
612デフォルトの名無しさん:04/04/26 19:19
>>609
なるほど、そういう意味ね!

613デフォルトの名無しさん:04/04/26 19:25
>>529
ほほえましいな。レス番違うし。
614デフォルトの名無しさん:04/04/26 19:36
ワロタ
じわじわ来るねw
すんません、Exceptionのthrowとcatchって、どうやって実装されてるんですか?
なんとなく、setjump()とlongjump()をつかうんだろうなーとは思うんですが、いまいち自信ないです。
どう実装してるのかを紹介したサイトなりがあれば教えていただけますか。
#「例外 実装」とかでぐぐってもそれらしいのは見つからない。
619618:04/05/08 10:24
longjmp だった。言い訳なんかするもんか・・・
How a C++ compiler implements exception handling
http://www.codeproject.com/cpp/Exceptionhandler.asp
>>617
ちゃんとしたcontinuationがあれば、それを使って実装すればいい。
622デフォルトの名無しさん:04/05/09 00:19
どういう意味だ?
623!621:04/05/09 00:48
>>622
exception を実装する為に continuation を実装するというのも本末転倒な感じが
するけど。

ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
624デフォルトの名無しさん:04/05/09 19:17
longjumpは制約が多すぎないか?
スクリプトレベルでうまく動かすためには、相当なサポートコードが必要に
なると思うが…
Rubyはlongjmp使ってなかったっけか。
自分も先読みが結構必要なときの
マッチしなかったときの処理にlongjmpを使ってるよ。
>>610
ARM,MIPS,SHとかの組み込み用アーキテクチャとかなら新規開発したあとコンパイラもそれにあわせて最適化とかが必要だから仕事があるんじゃない?
Schemeでいうcontinuationの機構を作りたいのですが、
setjmpとlongjmpの他に何が必要ですか?
スタックの内容を退避しなければ駄目ってのはなんとなくわかるのですが。
インアセ使わずにC言語だけでできるものでしょうか?
とりあえずi386以降で動けばいいです。
>>628
「スタックなぞ一切使わない」というのが王道です。

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

関数型言語スレ(総合スレは荒れてるので、HaskellかML)
で質問すると詳しい人が教えてくれるでしょう。
ういー、むづかしそうです。
SchemeのCPSてやつですね。
>>630
やりたいこととは違うと思うけど、Schemeを普通のCにコンパイルする方法。
http://home.pipeline.com/~hbaker1/CheneyMTA.html

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

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


bison / yacc の使い方の質問です。

bison とか yacc って、みんな初めは電卓作りますよね。
3 + 5 (Return)
って入力すると「画面上に」8をprintfするやつ。
これ、画面上で8を返すんじゃなくて、
yyparseの返り値とかそういう感じで yyparse の呼び出し元に
8 を何とかして知らせる方法ないですか?
ただし、グローバル変数は使わないものとして。
>>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知らなかっただろう?
>>635
tcl/tkって「チックル・チーコ」って読むんだよね?
>>635
お前だけ。
638名無し@沢村:04/05/24 23:49
Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?
実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!
セックル・チンコ
>>638
tclsh, wish という位だから、tcl/tk は一種のシェルだよ。
C から system() でシェルのコマンドを実行するのと似た様な感じで使える。
まぁ、もちっと面倒だけど。

俺も以前 tcl/tk からパクれる所が無いかなとソース眺めてみたけど、
C で実装されている部分は低レベルな所だけだったような。
TclつったらPerlと同じくらい歴史の長いスクリプトなんだが
アホは知らなかったのね。
>>641
言語で大事なのは歴史の長さよりも話者人口だよ。
歴史の短い Java をみんなが使うのはなぜだと思う?
Algol や Prolog が滅びたのは?
今頃Tcl持ち出してくるなんて100%ネタだと思ってたんですが。
釣りだよね?親切に説明してる640が気の毒だ。
>>642
Algolはともかく、Prologは滅びてはいないだろ。
Algolにしたって、形を変えてその思想は受け継がれているわけだし。
>>642
知名度の話をしてるんだが。なにが言語で大事なのは、だ。
かってに妄想してチンコ膨らましてんじゃねーよキモイ。
642じゃないけど、
 妄 想 ま で 制 限 さ れ て た ま る か
妄想でチンコ膨らそうぜ
>>642
Tclはハード設計ツールの組込みスクリプト言語ではメジャーです。
(Tclはいやだけど、独自言語よりはましだよな)

もともとTclはアプリ組込み用だし。tclshもwishも組込みのサンプル
みたいなもんです。
でも結局、Tk のほうが Tcl よりも何倍もメジャー。
649名無し@沢村:04/05/26 21:18
Starpack
Tcl/Tkでつくったスクリプトを実行ファイルに変換するツールだな。
が、わし英文読めんけん、このページのどっからDLしていいかわからんのよ。
このページの何行目の何という文字をクリックするとDLできるか、教えて〜♪

http://www.interq.or.jp/japan/s-imai/tcltk/tclkit.html
沢村師ねよ
651デフォルトの名無しさん:04/05/29 19:38
ここは沢村を呪うスレとなりました。
              -=、 ̄`―''" |\ `'''―'''"   |  ||          |ヽ、_____,へ、
         ,...--、    `―‐ァ‐...::', \:::::::::::::::::::: |  ||    |ヽ、___,ヘ、| ┌───┐ i´
        ,. '  ..::....`'''‐--‐''"~...:::::::::ヽ  ` 、::::::::::::::::|  ||    | ┌─┐ i´ | |     │ |
    -=ニ"_,...、-- ヾヽ、::::::::::::::::::::::::::::::::ヽ  `、 `,::::::|  ||    | |  │ | | |      .| |
          `''‐-`ヽ.`''‐-..._:::::::〃:::l:::l`ヽ..ノヽヾ,: |  ||    | |  │ | | |____| |
     ,..-‐''''‐----'":::::::`ヽ、 /l:/|::::/l:::lヾ.‐'""' i| l |  ||    | |  │ | |.┌─‐┐┌┐.|
  __,. ' ......:::::::::::::::::::::::::::::::::::: `''1 l! l::::i lヾ|,...-==l. l:|  ||    | └─┘ | |ノ ,ヘ、 | | レ'
  `ー--‐' ̄`>   ....:::::::::::::::::ノ.._,...ヾ!ノ-':::/~   ノ i |  ||    .| | ̄ ̄|ノ  / /` .| |
       ,.. '"  ...::::::::::::::::::::::::::ヽ< ̄`>'" `ー‐‐''"ノ..|  ||     |ノ      / /  | |
-‐'"゛`''‐''" .......::::::::::::::::::::::::::::::::::::::{ `‐',ヘ |  ,..、_  .|  ||             / /   | |     /|    
....__...:::::::::::::::::::::::::::::::::::::::::::::::::::::::!、  !  ,..-`    ,. |  ||           /./   .| |   . / |
  -"--- ....___,...--- ._::::::::::::::::::::`、 `‐'    _ィ' V|  ||     ._ _/./    . | └──'´ .,)
           , '" ̄..::::::::::::::::::::::::::〉__,..w、ァ'"Vハノ |  ||      `ー─‐'´      `ー───'´
   ,..--- ....__,. ' ....:::::::::::::::::::::::::::::::::::::::::Vi,..ハ---'" |  ||
  ,. '    .....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::'、. ―   .|  ||
-=-‐-‐'゛`''‐-.._   _,..-----==-  .:::::::::::`ー.`--‐'",'|  ||

沢村が全てを台無しにしたんだな。
マルチスレッドが良く分からない。マルチスレッドなコードを生成するのには
コンパイラ側で何かしてあげなくてはいけない事があるのでしょうか。
それともランタイム環境の問題なのかな。
tls(thread local storage)なんてのが言語仕様として定義されていればコンパイラはそれを意識する必要があります。
>>655
完全にライブラリレベルなのかなと思っていたのですが、そういう訳でもないんですね。
pthread ライブラリを wrap して、他のライブラリも MT-Safe に作れば良いのかと
思ってました。どうもありがとうございます。
インタープリタなんかではスレッド作るとそのスレッド専用の VM が起動する処理系が
あるみたい。コンパイルされる言語でも、スレッド毎にランタイム環境を作ってあげれ
ば良いのかな。
>>657
コンパイルされる言語の場合は、ホスト環境のpthreadライブラリを呼び出す様に
すればいいのでは?
今後主流になると思われるSMP環境を考えたら、複数のCPUを有効に使えるかも
>>658
pthread_create() が C の関数を引数に取るので、クロージャとかを渡したい場合に
何となく面倒じゃないかなと思ってました。変数部分は引数として渡してあげれば
問題無いような気がしてきました。
bison と flex を使っています。
flex では yylval をガンガン使っています。
bison で %pure_parser したら flex が吐き出す C コードのコンパイルで氏にました。
どうすれば %pure_parser しても yylval (と同じような機能) を flex で使えるでしょうか。
>>660
自己レス
http://www.timeparadocs.net/bab/flex_bison/flex_bison.htm
これで解決しますた。
が、flex のファイルに yylval.hoge と書いていたのを yylval->hoge と書かないと逝けないようです。
boostのspiritっていじって遊ぶにはよいけど、
実際問題使えるものなのかな?
663デフォルトの名無しさん:04/06/18 16:14
boost::spirit便乗質問なんですがパースした後
parse_infoのfullを調べるとエラーが発生したか確認できますが
エラーが発生した行番号を取得するにはどうやったら良いんでしょうか?
position_iterator(勘
665デフォルトの名無しさん:04/06/19 22:30
うわ、みてみると確かにそれらしい気配が・・・
しかし、よく意味が分からない罠・・・
666読まずにレス:04/06/22 00:47
JJTreeでJVM上で起動するスクリプトを書くのはアリですか?
だめ
668デフォルトの名無しさん:04/06/23 23:35
このようなコンパイラ誰か作ってもらえません?
イメージ的にはVMを介さない.NETみたいな。
開発の形態はApacheみたいに元となるものがあって
ユーザーが拡張プラグインを自由に作って公開できるようなのがいいな。

・ネイティブコードを吐く
・OSは問わない
・VMなどを介さない
・メインとなる構文はあるが、ユーザーが自由に構文を追加・変更できる。
>>668
D言語でええやん
>>669
D言語って名前くらいは聞いたことあるんですけど、
>>668で書いたようなことを実現しているんでしょうか?
Lisp系を使えばいいんでないかとオモタ
>>668
このようなコンパイラ誰か作ってもらえません?

というクレクレな割に

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

いきなりハードル高い
>>673
APIの類を使わなければ大丈夫
CPUは限定されるが
675読まずにレス:04/06/24 00:36
ダメですか…orzガックリ こっそり作ることにします。
.NETだから、膨大なライブラリで動的な言語で言語非依存のバイナリインターフェイスを持ってないとダメだな
>>668
死ねボケ
>>677
お前が死ねカス
>>678
お前も死ねタコ
goto 677
nop

lea eax, dword ptr[eax]
683673:04/06/24 13:10
>>674
> APIの類を使わなければ大丈夫

画面を含む一切の入出力ができなくなりますが
ブートから初めてVESAなり叩けば良い
>>668は実行可能ファイルとは一言もいってない訳だが。
このページ挙がってないのかな?
http://www.csg.is.titech.ac.jp/~chiba/lecture/os/
gosub 687
>>683
>画面を含む一切の入出力ができなくなりますが
要求事項にないから、いいんじゃない?
>>683
GCC があるんだから自分の好きな言語のフロントエンドを書けばいいじゃん。
簡単に言ってくれるが、gcc難解すぎて弄る気にならん
>>689
GCCのフロントエンド書いたときあるの?
>>689
gcc使っても>>668の用件に合わせるのは難しいままだろ?
無知蒙昧な人?
>>689-692
GNU Common Lispでマクロをいじれば何とかなりそう。
>>685
まあ、ここ見てる奴は「ネイティブコード」と書いてあるからそんな疑問は浮かばんわけだが。
ネイティブコードと、オブジェクト(実行可能)ファイルを混同して考えるのはお前くらいなものだが。
C--は使ったことあるよ。
結構面白いけど、関数型言語とか論理型言語とか、
実装研究がまだまだ行われている言語向けだなあ。
698デフォルトの名無しさん:04/06/29 18:16
Common Lispのプリプロセッサ(マクロ)って
そんなに自由度が高いの?
>>698
自由度は高いよ。
マクロ定義とは実質的にLispコードを生成する関数だとか。

まあ、C++のtemplateもだけど自由度が高ければ高いほど解読しにくいわけで、
達人以外が使っても生産性が大して上がらない気もする。
Lispのマクロは
評価時に展開されるから
*プリ*プロセッサとは言わない
>>700
評価に先駆けて展開しといたり、
コンパイル時にも展開できるわけだが。
まあ話を平たくすると、いつでもできるわけだ。
702700:04/06/30 23:25
>>701
Lispの評価器に関する知識が必要な話を
マクロ=プリプロセッサという世界のの人に
今説明しても混乱するだけかと
>>698
S式を二回評価すると思ってね。(おおざっぱ)
一回目でプログラムの生成、二回目で生成されたプログラムの実行。
LispはデータもプログラムもS式だから、
こういうのは機構的にもプログラミング的にも簡単。
一度遊んでみると良い。
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だけでできます。
後はなんだろう。処理に必要なデータを静的に持っておきたいとしましょう。
例えば、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になったと考えればいいです。
まあLispは面白い言語なので
SICPは読んで損がない本だと思うよ
707デフォルトの名無しさん:04/07/01 23:20
まぁ、LISPやる奴で実用的なプログラム書ける奴見たこと無いんだけど?
>>707
emacsってそんなに使い物にならない環境なのか。なるほど。

やっぱvi?(違
xyzzyがWin emacsの筆頭?
>>704
C++でならTypeList or boost::mpl使えば書けそう。
まあ流石に100個も200個も可変長引数を渡されると無理だろうけど。
ECMAScriptを解析してくれて、しかも組み込み関数・オブジェクトを定義できるライブラリが欲しい
自作すると変数宣言と組み込み関数・オブジェクトのみになりそうだ
Schemeは括弧さえ折り合いつけば最高の言語の一つだ
>>711
クロスプラットフォームなら spidermonkey とか、
Windows だけでいいなら ActiveScript とか。
どちらでも簡単にできるよ。
>>709
>Win emacsの筆頭

Meadowの方が広く使われてます。
>>713
SpiderMonkeyはかなりよさげだね
しかし英語だらけで組み込めるのは当分先か・・w
>>704
そういうプリプロセサ書いて、差し替えれば済む話だと思うけど。

全部 C/C++ でできますよ。(藁
C/C++ではたしかpreprocessor commandsも規格の一部な罠。
プリプロセッサを差し替えるオプションなんてあるの?
Visual C++とgccを見たけど見つからなかった。
>>716 それじゃ「コンパイラ書けばできますよ」ってのと変わらないやん.
>>718
自分のプリプロセッサから、コンパイラ呼べばイイだけじゃない?
>>720
そりゃそうだ。でも差し替えるとは言わんな。下らないことをきいてしまった……。
差し換えるならspecファイルだろ。
>>718
GCC とかならソースあるんだから、適当に修正して実行ファイル入れ替えれば良いんじゃないのか ?

>>719
まあ、そりゃそうだけど、コンパイラ書くより多少難易度は低いだろ。
結局使い物にはならないと。
普通のアプリケーション書くのに特定のコンパイラのバージョンとそれへのパッ
チ込みで保守したくはねーなあ。
まあ、このスレ的にはコンパイラまで作ってしまえって事になるかな。
TinyC->.asm位だったら簡単だしね。

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

エラーを探知するために、##lineっていう
現在のコンパイル行をプリプロセッサ->コンパイラへ通知する命令をつくって、
デバックもしやすくしているよ。
>>724
て言うか、普通のアプリケーション書くのに >>704 みたいなことはあまり必要ないだろ。
マクロプロセサやプリプロセサが高機能だと色々おもしろいけど、実際のところ後の保守が大変だったりするからあまり使わん。

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

MASM なんかのマクロアセンブラでも同じような経験したことある人は多いと思うよ。
俺はわりとしょっちゅう欲しくなる方だな。
Lispのマクロで俺言語を作ることを考えると>>726も想像はできるけど。
>>726とは逆に最初書くときはベタに展開したソースを書くけど後から
保守性を考えてマクロでまとめることも。あまり凝ったことはしないけどさ。
cppに変数とifとfor eachだけでもあれば世の中もうちっと良かったろうに。
728デフォルトの名無しさん:04/07/13 22:28
コンパイラとかの参考図書は、よくありますが
スクリプト言語の参考図書(定番)は、ごぞんじないですか?
各OS毎のリソースコンパイラの作り方に触れたサイトってありますか?
>>728
その二つに大きな違いはない。
>>728
コンピュータアーキテクチャの本じゃないか?

>>730
構文解析だけじゃなくて、実行機の話してるんじゃないの?
732デフォルトの名無しさん:04/07/14 01:26
すいませんyacc/lex初心者の質問です。
WIN XPのコンソールから
GNUのFLEXとBISONとボーランドのBcc32でコンパイルしてるのですが
bisonとflexは通過するのですが
最後のCコンパイラのリンク時に"yyllocが定義されてない"というエラーが出てしまいます。
bison.simpleとbison.hairを見てもよくわからないので
なにがまずいのでしょうか?
>実行機

ってなんじゃらほい?
>>728
『インタプリタ進化論』なんかいいのでは。スクリプトに特化した内容ってわけでもないけど。
735デフォルトの名無しさん:04/07/14 19:49
このスレでよく出てくるyaccやlexってのはソフトウェアなの?
それともライブラリの類?
で、実際にはどのようなことをするものなの?
737735:04/07/14 21:00
つまり、字句解析や構文解析をするソフトウェアね。
コンパイラにおけるそれらの処理を外部のソフトウェアに
頼ると言うのは有りかね?
>>737
何を言ってるの?
739ほんたま:04/07/14 21:26
おみゃ〜らよ、おれのスリムドカンはある意味コンパイラよ。
スリムドカンはおれのページにあるから見ちみれ?

http://hp.vector.co.jp/authors/VA015412/
おみゃ〜らよ、おれはいまリソースエディタをつくってるのよ。
スリムドカンに装備させるためよ。
おみゃ〜らよ、コンパイラをつくるのはいいが、リソースエディタのないコンパイラはコンパイラとはいわんぞ!
自分じわかるかな?
>>737
字句解析や構文解析をするソースコードを生成してくれるソフト
これ以上は自分で調べてくれ
>>735
あなた、最高に頭悪そうですよ?
742デフォルトの名無しさん:04/07/15 18:37
昔、OL進化論っていうのがあったなぁ〜
ちょっと思い出したw
インタプリタ進化論って、絶版じゃなかったっけ?
読みやすい本でいい本だと思うけど、
実行環境の話はそれほど無かったような気がします。
とはいっても、字句/構文/意味解析を作るより
実行環境を作るのって、力業でできますしそんなに難しくないと思いますよ。
My VMをレジスタマシンにするかスタックマシンにするか悩む

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

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

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

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

http://hp.vector.co.jp/authors/VA015412/
748デフォルトの名無しさん:04/07/16 22:00
コンパイラ作るならBNF記法(拡張)についての理解は必須ですか?
無くても作れるよ。あった方が楽だけど。
context free grammerについては「理解」という程大変なことはない気がする。
# オートマトンを理解するにはちっと勉強が必要になるが、
# それこそ知らなくても何とかなりそう

なおLL(1)文法と属性文法を学んでしまえばりっぱな「コンパイラ」が作れると思う。
# リンカとかアセンブラとかの知識は既習だとして
751デフォルトの名無しさん:04/07/17 03:09
言語設計はともかく、コンパイラ設計となったら
フロントエンドよりバックエンドのが難しいというか
面白いと思うんだが、どうしてフロントエンドの話しか出ないんだろうか?
たぶん、そこまで行きつかない奴しかこのスレにいないから。
バック部のトピックス

・並列化(ループ,タスク.手続き間解析は必須)
・別名解析(フロー依存はまだ重い)
・SSA(冗長コピーをどう減らす? 別名の扱いも)
・コピー伝播(非常に重要.でも語ることは余りないか)
・部分冗長性削除(やりすぎると性能悪化することも.ライブレンジを考慮)
・CPS(手続き型ではやらんか)
・レジスタ割付け(PowerPCとかなら素直だが,制約のきついCPUだと面倒)
・ソフトウェアパイプライン(最内からやらない手法が最近発表されてた)
・命令スケジューリング(コンパイル時間爆発の主犯)
・SIMD命令やDSP命令の生成(上から下までからむので大変.パターンマッチしかない?)
754デフォルトの名無しさん:04/07/17 18:50
本日、佐々政孝氏の「プログラミング言語処理系」という本買いました。
コンパイラについてちゃんと学んでいこうかと思います。
バック部はCにトランスレートする事で済ませちゃってるから、あんまやらないんだよな。
とはいっても、最近の仕事でそういうのをする必要もあったりして
書籍紹介とかやってもらえます?
そういや 21st Century Compilers 読んだ人いる?
あぁ、それね…。2005年11月15日に延びたみたい。_| ̄|○
http://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
何でそんな労力割かなきゃならぬ?
>>757
がぁん。評判よければ夏休みにでも読もうと思ってたんだが。
目を通すだけで満足だから何も作らんのだろうな
バックエンドまで作りこんだ言語を書いても、それで食ってける人はごく少数だし。
理屈を理解して普段のプログラミングに生かせれば、それで良いかと。
>>761
本当はコンパイラの原理とかよく分かって無いんだよな?
原理を理解→新しい言語、でもあるまいに
>>760
一番多い需要は新しい言語の作成ではなく、特定分野特化物だからだよ
趣味の人は確かに新しい言語って事になるんだろうけどね。
言語ビジネスは死々累々とはMatz氏の言
>>768
つまり「俺ってば勝ち組w」と主張されたのですね?
>>764
その反対でバックエンドがほとんどのお仕事もあるよ、
特殊なDSPとかの強力オプティマイザ付き簡易言語関係とか。
771デフォルトの名無しさん:04/07/18 13:04
割込みすいません、bisonの-v出力で得られる

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

bisonマニュアルやbison本(といっても古いだけですが)を見ても、載ってませんでした。
>>771
行番号との関連?
別に行番号とは関連しないんじゃない?
773771:04/07/18 17:10
どうも、Conflict が発生するようで、いろいろと原因を探ってるんですが、
「State何番が何番とconflictした。」とか出て来るんですが、
具体的にソースのどこがいけないのか場所を探すのに、いつも苦労しているのです。

774デフォルトの名無しさん:04/07/20 17:56
構文解析器を作るのに正規表現が必要になりますけど、
正規表現の構文解析ってどうすりゃいいんでしょうか?
ものすごく再帰してるんですけど?
再帰っつーか永久ループですね。
>>774
>構文解析器を作るのに正規表現が必要になりますけど、
無くてもできます
>>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)も一緒にビルドしてしまいエラーになりま
す。。。)

わかる方がいらっしゃいましたら、
ご教授お願いします。
>>778
なんのエラーが出てます?
なんとなく改行コードの問題?
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に変換しましたデータが失われているかもしれません」
というのが、たいりょうに出ています。

もしよかったら、ソースをお送りしますが・・・
よろしくお願いします。
>>781
そういう場合は、ここに貼り付けて
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
783>:04/07/30 12:32
>>782さん
こちらにCソースファイルを貼り付けました。
よくわからなかったので、まちがってスレを立ててしまいましたorz

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1091157983&rm=50

すみませんが、よろしくお願いします。
これでだめでしたら、FLEXソースも貼り付けますので・・・
>>783
あぅ、上手く行っても、変更点の説明がしにくいと思うので、ソースもよろしこ。
#なんとなく見えてますが、上手く行くかどうかは不明。
785>:04/07/30 13:09
786784じゃないけど:04/07/30 13:35
yytext は YY_CHAR* 型で,これは unsigned char * の typedef になっている.
Zsscanf は Zsscanf(const char*, ...) と定義されている.
Zsscanf(yytext, ....) というように呼び出しをしたい.

ということで
1. Zsscanf の第1引数の型を unsigned char * にするか
2. Zsscanf の呼び出し時に毎回キャストするか
のどっちかで対処できるんじゃないかと思う.
3. コンパイラのcharをunsignedにするオプションを指定する
788ありがとうございます!!:04/07/30 14:18
みなさん ありがとうございます。

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

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

すみませんが、ご教授お願いします。
>>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);
コンパイル方法
http://www.cygwin.com/
より "Install or update now!" をクリックして実行してください。
あとはメッセージにしたがって、インストールするのですが、パッケージの選択のところで flex を入れておく事。
flexの入っているフォルダーにパスを通したら、
flex flex_test.l
cl flex_test.c
以上です、
あと、_yywrap _yylex はちゃんと定義して置いてください。
出力結果をC++としてコンパイルしたいのであれば、786氏の意見を参考すれば良いかと思います。
>>788
yylexを呼び出します。
そのあたりは初歩の初歩部分なので、適当に参考書でも買ってきて調べてみるとよいでしょう。
入出力の特化は結構ややこしいので・・・
791>>778です:04/07/30 14:53
みなさん いろいろ教えてくださってありがとうございます。。。

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

何度も何度もすみませんが、
ご教授お願いします。
>>791
一番簡単な方法は
yyin = fopen( ... ) ;
として
yylex()
を呼び出します。
793>>778です:04/07/30 15:18
>>792さん

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

yytextに指定文字列を入れてから
yylex()を呼び出せばよろしいのでしょうか?
(どこかのサンプルでこのような形のものがあったのですが・・・)
>>793
ちがいまーす!!(^^;
実は貴方のやりたい事は、書き始めると結構ヘビーです。
素直にflexの本を買ったほうが良いかと・・・・
どうしても買いたくなげは YY_INPUT マクロを気合で読んでみるとか?
795>:04/07/30 15:32
>>794 さん
では、入力したい文字列を
一度ファイルに落としてから
再度、yyin = fopen( ... ) ;
で読み込むという方法だと
まずいでしょうか?
>>795
それで問題がなければ、それでも良いかと・・・・
797>>778です:04/07/30 16:27
今のサンプルFLEXプログラムは「H16/7/16」を「平成16年7月16日」に
変換するものなんですが、ファイルに「H16/7/16」を書き込み、保存してから
yyin = fopen( ... ) ;
として
yylex()
を呼び出すと、「ヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘヘ」などと
文字化けが出てしまい、途中で終了してしまいます。
これって何が原因があるのでしょうか?
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 の見方を解説しているページとか
ご存知ありませんか?
>>799
見方を理解しようとしないで、LR解析をある程度理解した方
が良いと思うよ。
そうするとbison.outputの意味が分かるようになる。
801799:04/07/31 22:52
LR解析を理解するための、書籍とかありますか?
はじめてのLR
803デフォルトの名無しさん:04/07/31 22:54
1つの先読みだけしか許されないというのは、かなり不自由かも。
LR(1)を完璧に実装した yacc もどきってご存知ないですか?
804800:04/08/01 00:44
800ゴット

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

>>803
知らないけど、あまり不自由を感じたこと無いな>先読み1
たいしたもの作ってないからかな。
Catalog of Free Compilers and Interpreters.
http://www.idiom.com/free-compilers/
>>803
LLだけとboost::splitを使ってみるとか。
http://boost.cppll.jp/HEAD/libs/spirit/index.html

でも、文法を変えたほうがいいかもね
LALR(1)の鬼畜パーススピードを捨てるのはもったいないべ。
LR
LL
LALR
ってなんの略?
(1)
ってのは1つ先見るってことでよい?
manの番号
>>807
Lonely Rotary
Lonely Lolita
Lolita and Lonely Rotary
>>807
LR:左から読んで右から導出
LL:左から読んで左から導出
LALR:ルックアヘッド付きLR
【LR】Left-to-right scanning, Right-most derivation in reverse
【SLR】Simple LR
【LALR】LookAhead LR

括弧内は先読みのこと
812デフォルトの名無しさん:04/08/01 15:47
LALR(3) ぐらい欲しい。
>>812
探せば GLR 使えるパーサジェネレータもあるぞ。
>>812
漏れはむしろ「欲しい例」を出して欲しい。
世の中LALR(1)が圧倒的な主流。
それ以外はただの学問的な研究対象か趣味。

まぁ、炉利趣味と同レベルw
DelphiはLALRじゃないのでは?
>>815
C++ は LALR(1) に収まらないワケだが。
818デフォルトの名無しさん:04/08/01 21:49
>>817
それは書き方が悪いからでしょ?
あんなもん、書こうとおもえばいくらでも当てはめられる。
(と思う。)
俺はめんどくさいから再起下降でいいよ
俺は再帰降下でいいや
抗菌加工でいいや
822>>778です:04/08/02 15:41
お礼が遅れましてもうしわけございません。
ありがとうございました。

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

質問攻めでもうしわけございませんが
よろしくお願いします。

825823: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を解説してますか?
>>826
すぐ下で答えが出てるじゃん。
829800:04/08/02 22:46
>>827
解説してないね。
でも、典型的なシフト還元衝突などの説明と回避方法の解説はある。
ってかこの本もう絶版じゃない? 手に入るの?
>>791
yyinを指定しないと入力が標準入力になるからそうなるのでしょう
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
シンボルテーブルのスタックを作ればいいだけじゃないか?
>>838
>シンボルテーブルのスタックを作ればいいだけじゃないか?

それってディスプレイ・・・・・だよねぇ。
ブロックを開くときに名前を覚えておくようにするんだろうか?
例えばC++には複数の名前空間があってややこしい

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

変数
namespace

これらは関係を持ったりするしね
まあプリプロセッサを除いて基本はみな同じだけど
名前空間は
関数 namespace クラス
だけじゃないのか?
::、using、export、importが絡むとさらに複雑になる
:: using は簡単
export importはどうだろ
>>840
何を持って基本というか知らんが、実装しようと思うと namespace は深いぞ。
ADL と関数テンプレートとか。
所詮 namespace は、バカ避けの機能。

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

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

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

namespace って、一体何の為にあるんだろう・・・
↑ホームラン級のバカ
所詮 型 は、バカ避けの機能。

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

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

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

型 って、一体何の為にあるんだろう・・・
ダウト。残念ながら、型によって実行速度は上がるんだよ。
いくらなんでも型は重要だろう。
>>845
評価尺度が実行速度だけとは……。1960 年代の人間ですかい?
60年代だったら消費メモリも重要だな。
852デフォルトの名無しさん:04/09/04 01:00
所詮「コンパイラ・スクリプトエンジン」相談室 は、バカ避けのスレ。

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

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

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

このスレって、一体何の為にあるんだろう・・・
>>852
ワラタ
854マイク ◆yrBrqfF1Ew :04/09/04 01:22
namespaceは最高だな。
感動もんだ。
>>852
無理してまで回答は僕もしないし、他の人もしてないんじゃない。
コンパイラやスクリプトを作ろうという人口は少ないから過疎なのは仕方が無いが
僕は日ごろから巡回しているし、このスレ向きの質問書けば回答は帰ってくるよ。
もちろん僕もクレクレ君とOO厨房の言語論争的な話題は放置してるけどね。;-P
キミには分らないかもしれないが機能しいてない掲示板ではないよ、
進行が遅いに加えて近頃アホっぽい話題が充満しているだけだ。
>>855
( д ) ゚ ゚
ひさびさにコピペにマジレス見た・・・
型の実装について教えてください。
現在 int のみのコンパイラは作れたのですが
float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
実行するときに int か float か if で判断するしか無いのでしょうか?
2つならまだしも double とか char を追加するとなると代入するとき等の型判定で
組み合わせの爆発が起きそうなのですがなにか良い方法はないでしょうか?
速度的に。
テーブル作るか int float を別文法にしてしまうか……
てか、こんな事は自分で考えろ。
>>858
>現在 int のみのコンパイラは作れたのですが
>float などを追加しようとすると例えばスクリプト中の変数に型情報を持たせて
>実行するときに int か float か if で判断するしか無いのでしょうか?

って、そんなのコンパイル出来たって言えないやん。。。
何の為の型なのさ?
変数に型情報があってコンパイラを作っているのなら、
コンパイルの時点で型にあったコードを生成するだけだろ。
実行時じゃなくて。
>>860 ハァ
>>860
バカ避けの機能
>>859-861
おぼろげながら自分の間違いが分かってきました。
どうもです。

もう少し考えてみます。
>>858
実行時に型チェックするかコンパイル時に型チェックするかは、言語の設計に
大きく関わってくるけど、まぁどっちでも良い。

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

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

ってな感じ。型変換判定は素直に実装すると型の数の 2 乗のオーダーで増えるが、
テーブルにでも書いておけば大した手間ではない。ベタに if - else とかで書くと死ぬ。
866デフォルトの名無しさん:04/09/04 21:46
YACC はバカ避けのソフト。
作ってて楽しけりゃなんだっていい
( ゚д゚)、ペッ
型についてはシンボルテーブルで管理すれば良いでしょ。

シンボル表のエントリに型情報をもたせ、それが基本型を
ポイントすることで、個々のシンボルの型を表現します。
struct や class などの基本型をまとめた型を作るときも
シンボル表にそれらの新しい型のエントリを作って、基本型を
リスト状にポイントしていけばよいです。
870デフォルトの名無しさん:04/09/05 17:16
所詮 lex は、バカ避けのソフト。
(以下ry
>>855
wrota
>>870-871
意味の無いレスいれるの止めてくんない、近頃こんなレスばっかりで
前後の見通しが悪くてかなわないんだよ、邪魔だから適当な言語死滅スレにでもいってくれ。
その発言は結局荒れるもとになるよ。
そして、大量に無駄な情報のなかから有用なものを抜き出すのが2chの利用法だと思う。
過疎スレでやってくれるなよなとは思う
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スクリプトがイイと思うよ。
896889: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に行番号の情報を入れといて、エラー発生時に取り出して使う、
でいいんじゃない?
914912: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冊あげられていた。
取り上げていた人はどちらもすごい方なので、ちと読んでみようかなという気が沸き起こった。
926925:04/10/28 21:40:42
それにしても\10000を超えるって、やっぱり高い。

コンパイラの構成と最適化
中田 育男 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/
927デフォルトの名無しさん:04/10/28 22:03:22
>>926
ドラゴンブックより良い?
928デフォルトの名無しさん:04/10/28 22:10:24
>>927
ドラゴンブックよりも内容が新しいらしい。
929デフォルトの名無しさん:04/10/28 22:19:39
>>927
かなり難解ですよ。
ドラゴンブックとかプログラミング言語処理系を読んで
それでも物足りない人向け。
930927: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
もう出たんじゃね?
ttp://www.amazon.co.jp/exec/obidos/ASIN/0321131436/

ペーパーバック版は来年らしい。
ttp://www.amazon.co.jp/exec/obidos/ASIN/0321210913/
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
http://i.loveruby.net/ja/rhg/index.html

これってどうよ?
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
http://www.amazon.com/exec/obidos/tg/detail/-/0201100886/
洋書の方は全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最強
958sage:04/11/06 05:48:47
スモールコンパイラの制作で学ぶプログラムのしくみ
http://www.cbook24.com/bm_detail.asp?sku=4774121770
959デフォルトの名無しさん:04/11/06 12:31:17
>>958
おっ、新作ですかね?
この分野では珍しい。

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

すべて型破り!w
960デフォルトの名無しさん:04/11/06 13:42:32
宣伝乙
借金でもできたんですか?
961959: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デフォルトの名無しさん
三銃士で、アトスが友人の身に起こったことだと言って話すけど
ダルタニアンはそれは友人ではなくてアトス自身のことなのではない
かと考える場面がある。