1 :
デフォルトの名無しさん :
2007/09/02(日) 08:13:36
2 :
デフォルトの名無しさん :2007/09/02(日) 08:14:32
3 :
デフォルトの名無しさん :2007/09/02(日) 08:15:05
4 :
デフォルトの名無しさん :2007/09/02(日) 08:15:35
5 :
デフォルトの名無しさん :2007/09/02(日) 08:16:57
6 :
デフォルトの名無しさん :2007/09/02(日) 08:17:40
おつ
8 :
デフォルトの名無しさん :2007/09/02(日) 12:28:37
spiritってコンパイラスクリプトエンジンに使うのにどうなんだろ? っていうか、再帰下降パーサ自体どうなんだろ?
9 :
デフォルトの名無しさん :2007/09/03(月) 08:26:48
Bison -y Exr.yでy.tab.cを作って gcc y.tab.c -ly -o E でEという構文解析プログラムを作りました。 で、./E[enter] して 1+1とか式を入れるとSyntax Errorが出ます。 原因としては何が考えられるでしょうか?Cygwin使ってます。 文法プログラムは「コンパイラ構成法」p21の %% input : expr '\n' ; expr : expr '+' term | expr '-' term | term ; term : term '*' factor | term '/' factor | factor ; factor : 'i' | '(' expr ')' ; %% yylex() { return getchar(); } です。
>>9 そりゃ1+1はその文法に合わない入力だからじゃね。i+iなら通る。
試験するときは文法に適う入力かどうかを考えないと。
つまり、1+1でsyntax errorになったのは正しい動作だったということだ。
文法を定義する時に自分でどういうものを受け入れるかは分かっているんじゃないのかね?
それとも、どこかからサンプルを持ってきて適当に改造したから、
何をやっているか自分でも分からないとか?
11 :
10 :2007/09/03(月) 08:56:53
あ、あと、 input : expr '\n' ; って定義だと例えば'i' '+' 'i' '\n'の入力で受容された後は、 何が入力されてもsyntax errorになるのは分かってるよね?
12 :
デフォルトの名無しさん :2007/09/03(月) 09:02:33
10さんありがとうございます。自分がやってることが分かってませんでした。 いまいじくって理解しました。
ゲーム開発用にC言語の文法がそのまま使えるスクリプト言語を作ってるのですが、 配列や構造体の初期化処理をどうスマートに実装しようか悩んでます。 特に、ローカル変数の初期化時に変数を用いて初期化する点など。 なにか良い方法や参考資料とかないでしょうか?
16 :
14 :2007/09/08(土) 15:31:16
> 実際のCコンパイラが吐くコードを見てみたらいかが。 確かにw、ちょっと調べてみます。 > 普通にC言語使うのとどう違うのか。 一応、ゲーム用に文法を拡張して使用する予定。 並列処理(ノンプリエンプティブ)用の文法と、イベント処理用の文法は組み込みたいな、と。 あと、データ構造定義のヘッダーをCとスクリプトで共有するのも目的です。 CINTは本も持っているのですが・・・、挫折しました。
>>13 これ良さそうですね。
ちょうどHaskellでそれなりの規模のプログラムを作ってみたかった所なので
これにそってやってみます。
>>14 LuaとかSquirrelじゃダメなん?
19 :
14 :2007/09/09(日) 19:50:01
Squirrelは初めて知りました。参考にさせてもらいます。 VCで配列や構造体のローカル変数の初期化をアセンブリ言語に吐き出してみたんですが、 既値での初期化でも思いのほか代入の羅列処理でした。 あんまり悩まずに、この方法で実装してみます。
21 :
14 :2007/09/10(月) 19:03:29
> tcc: tiny c compiler ありがとうございます。 これも参考にさせてもらいます。
22 :
デフォルトの名無しさん :2007/09/23(日) 01:43:08
bisonとflexを組み合わせて使う場合、 bison側のコードからyyinを参照するにはどうしたらいいのでしょうか? extern FILE *yyin; main(){ while(!feof(yyin)){ yyparse(); } } 上のような感じで使おうとしたところ「yyinは宣言されていない」 という旨のエラーが出てしまいました。
Ginってどうよ???
ご自分で判断なされては
(´;ω;`)ブワッ
俺はGin見て、アイデアが思い浮かんだのでありがてぇ思っただよ
29 :
デフォルトの名無しさん :2007/10/05(金) 12:57:30
Ginって?
やれやれだぜ もうパーサジェネレータの話は禁止しようぜ ここからパーサジェネレータから先の話だけな
勝手に決めるなよ
ANTLR 3 をC言語で扱うサンプルないかな? それかANTLR3に近いパーサないかな?
>>27 まじ凄いんじゃね?
というぐらいしか俺にはわからんが
詳しい人解説たのむ
解説も何も見たままだが。
用語が判らんとかなら
>>6 の本でも読め。
そういえば、parrotって完成する日が来るんだろうか
>>27 は、最適化されたVMを提供するようだが、
使っている人のサイトとかみると、
実際はまだまだ未完成でバグバグみたい
LL(1)は構文木作るの面倒だな。
39 :
デフォルトの名無しさん :2007/11/11(日) 12:18:03
コンパイラ構成法 原田 賢一著 を読んでいっているのですが、理解できないところが多々あります。 演習問題の解答、解説等が載っている本などはありませんか?
>41 中身まだ全部見てないけど面白そう。こういう講義受けたかったな。 新しい方(2007年版)って今講義中なのか。
LALRのパーサー使ってきたけど、文法が複雑になると、Shift-Reduce衝突を除去するのに 一苦労。で、LL(*)のパーサーを使い始めたが、左再帰除去しないといけないので可読性に多少難あり。 でも、慣れれば、複雑な文法定義するのにLL(*)のパーサーの方が開発しやすいのかも。そんな予感。
いいなあ東大。めっちゃ楽しそう 俺の頭では入れなかったよ
45 :
43 :2007/11/25(日) 22:08:15
Expr = OrExpr OrExpr = AndExpr { "OR" AndExpr } AndExpr = NotExpr { "AND" NotExpr } NotExpr = "NOT" NotExpr | CompExpr CompExpr = AddSubExpr { ("="|"<"|">"|"<="|">="|"<>") AddSubExpr AddSubExpr = MulDivExpr { ("+"|"-") MulDivExpr } MulDivExpr = Primary { ("*"|"/") Primary } Primary = NUMBER | ("+"|"-") Expr | "(" ExprList ")" ExprList = Expr { "," ExprList } これで、優先順位OR<AND<NOT<比較演算子<2項+-<2項*/<単項+-で括弧付きが最優先になるよな?・ 後、単なるスカラー値のみじゃなく、(3,4) = (2,3)や((3,4),(5,1)) + (5,1) などもacceptできるよな? LL(*)のやっぱ、楽そうだな。
46 :
43 :2007/11/25(日) 22:11:57
いや、上の文法だと単項+-と括弧付きの優先順位まずいかも。うむむ。
47 :
43 :2007/11/25(日) 22:14:56
ExprList = Expr { "," ExprList } は ExprList = Expr { "," Expr } だった。
48 :
43 :2007/12/01(土) 13:31:25
MulDivExpr = UnaryExpr { ("*"|"/") UnaryExpr } UnaryExpr = [("+"|"-")] Primary Primary = NUMBER | "(" ExprList ")" だった。 LLパーサー何気にいいんだけど、セマンティックアクションの実行されるタイミングがようわからん。 例えば、 AddSubExpr = MulDivExpr { ("*"|"/") MulDivExpr (. アクション .) } で、"*"まではパース成功して、右のMulDivExprで失敗してもアクションが実行される。 うーん。構文チェックだけならいいけど、構文木作ると、エラー時に上手くか書かないと 迷子のノードができて、メモリリークなる。orz
確保したメモリをすべてグローバル変数にリンクリスト形式で繋いでいって、パース終了後にまとめて解放、とか
Lisp風の言語ならそっくりLispの方がありがたいんだが要するにLisp1等価って事だよな?(RnRSに従わないCommonLispは満たさない)
ClojureはASMっていうバイトコードジェネレータを使ってるんですね。 ASMはBCELやSerpより軽量で高速でgroovyでも使われてて サイズがBCELが350KB、SERPが150KB、ASM 2.2が33KB だそう。GroovyやJRuby等で使われてるみたい。
箱?
何用の言語なんだろ? オレオレ言語としては機能が充実してるけど、 何かに特化してるわけじゃなさそうだし。
>>53 『本格的なオブジェクト指向プログラミング』って書いてあるけど、
何が出来たら本格的なんだろうか。そこに書いてある限りでは、
クラスが定義出来てインスタンスが生成出来て継承関係を作れる
みたいだけど、リフレクションとかインスペクトが出来るわけでは
なさそう。
プロトタイプベースのオブジェクト指向に対して クラスベースのオブジェクト指向を本格的といってるのかもしれませんね。
本格的とか元祖とかを付けるとウケがいいからだろう 特に意味を考えてるとは思わない
自分の言語ならそのへんはこだわりを持ってるのが普通じゃないか? 「本格的オブジェクト指向ってなんですか」とでも訊けば語ってくれるよ多分。
あくちぶべーちっくは本格的ですか?
そもそもオブジェクト指向みたいな現場から発生した醜いパラダイムに 本格的も糞もないだろうにw
ほー、PARC は現場なのか。へー。
そうだよ
>>62 をゴールドバーグ女史が読んだらなんと言うだろう
申し訳ない、私は日本語は読めないんです という主旨のことを言うのでは
67 :
デフォルトの名無しさん :2007/12/19(水) 22:55:40
HTTPのRFCを見るとヘッダの文法がBNFで書かれていました。なので、yaccとlexを使えばHTTPヘッダを解析できるかなと思った
のですがlexで入力をトークンに分割するのが難しそうで行き詰まりました。Java等のプログラム言語だと、コメント部分でもない
限りトークンの区切りは空白文字でよいし、+を見たらPLUSとか適当なトークンとして認識すればよいしで字句解析部分はわりと
簡単そうですが、HTTPだと、たとえばAという文字を見たときに、UPALPHAと認識すればよいのか、HEXと認識すればよいのか、
それとも状況(lexの状態?)に応じて、数文字まとめて別のトークンとして認識したほうがよいのか、よくわかりません。UPALPHA
とかHEXというのは、
http://rfc-ref.org/RFC-TEXTS/2616/chapter2.html に載ってる終端記号名です。
こういう場合、どう字句解析を行うのがよいでしょうか?どういう細かさのトークンをyaccに上げればよいでしょうか?
練習として、BNF通りのヘッダであればどんなに複雑なものであってもパースできるパーサを作ってみたいのです。
アドバイスをお願いします。
まずは日本語をしっかりな。
BNFで表現してあったって文脈自由とは限らないと思うんだぜ。 まあパーサからレクサへ状態を渡すとかするんだけど、それはそれで大変だし 何もlex使わなくてもパーサを手書きすればいいじゃん。 自分で手書きできない人だったらlex/yacc使ってもあまりいい目は見ない気がする。
70 :
デフォルトの名無しさん :2007/12/20(木) 11:16:55
>>69 BNFで表現できるのは文脈自由文法であると習いましたが違うんですか???
パーサ手書きでもいいんですが、たとえばどのような構成にするのでしょうか?
とりあえず、英大文字・小文字は1文字づつyaccにあげればいいんじゃ? で16進数の構文をyaccで定義すれば?
yacc デカルチャー
>>72 なんつー古さだ(20年前ぢゃねぇか:実はperlネタのところでも見かけた)
74 :
デフォルトの名無しさん :2007/12/20(木) 21:00:53
>まあパーサからレクサへ状態を渡す こんなことできたっけ?
レクサーを自前なら可能だけど、lexではできない。flexはしらね
(f)lexはlexer内で状態遷移できるよ。Cのコメント分を字句解析するときに使う奴。
>>71 本当に1文字づつ以外読まないのなら、字句解析を一切していないのと変わらないと思うんだがw
>>73 最近よく見かけるようになったのは
再放送してるからだろうw
>>77 字句解析一切していないからってそれがどうしたんだよ。
字句解析が不要ってこと?
え?字句解析してない?しまった〜〜下手こいた〜〜〜 ズン・ズン・ズン・ズン
ツマンネ
>>53 MikoScript面白いですね。
リレー型関数コール演算子は、Rubyみたいに、下手な既存classの拡張をせずとも、
メソッドを追加したように見せかけたり、
既存の関数を、作成したclassのメソッドのように見せかけたりできる。
puts("hoge");
を
"hoge"'puts;
と書いたり、
a = int(1234.56)
を
a = 1234.56'int
と書いたり。
代入型の関数コール形式は、
言語仕様としては、シンタックスシュガーの域を出ないが、
全てがオブジェクトではない、言語にはよさそうな仕様。
コマンド型の関数コール形式は、ま、いらんなw
ところで、箱がいまいちわからん???
> 代入型の関数コール形式は、 > > 言語仕様としては、シンタックスシュガーの域を出ないが、 > 全てがオブジェクトではない、言語にはよさそうな仕様。 代入型の関数コール形式も、 言語仕様としては、シンタックスシュガーの域を出ないが、 全てがオブジェクトではない、言語にはよさそうな仕様。 ミス・・・
どのへんが本格的なの?
87 :
デフォルトの名無しさん :2008/01/01(火) 16:03:44
>>41 こんな感じで他の大学も講義の資料公開(?)してくれると嬉しいな。
講義で使ってる本の紹介だけでもいい。
アメリカみたいに講義をpodcastで公開してくれなくてもいいから
雑誌も減ってきてるし、なかなか体系だって勉強できるネタが少ないのが最近の悩みだから
おっぱいそん入門 ぷりんとぼいん ”こんにちは おっぱい!”
>>87 ガベージコレクションが気になった
mallocをGC_MALLOCに変えるだけでfleeいらずとはこれいかに
>>89 Keep your dog free from flea!
>>90 OK. I understand!!! Thanks. :D
これいかに、ってベームGCだろ条項
ぼえーむじーしーと読んでたのは俺とお前だけの秘密だぜ
La BohemeGC
ぼへむじーしーってよんだmした><
オペラだったらボエームって読んでええんでないの?
BGCか
ふと思ったんだが、バイトコードのコンパイラって可能? 例えば、Javaとか.NETのソースをコンパイルしてできた、バイトコードをネイティブ形式にコンパイルする
GCJはclassファイルをネイティブにコンパイルしてるよ
>>99 にわかですまんが
ネイティブってことは逆にVMじゃ動かんの?GCとかどうしてんだ?
gcjでネイティブコンパイルしたら本物のネイティブコードになるのでVM上では動かない GCとかは実行ファイルにリンクするランタイムライブラリ(libgcj)に含まれてる
>>101 更にgcjのランタイムにはJVM相当機能も含まれてて.classの実行もできる.
なのでjarの動的ロードとかも可能になってる.
# クラスライブラリ足りなくて実用するのは大変だが…
104 :
101 :2008/01/13(日) 15:38:31
caperのなかのひとサルでも分かるチュートリアルつくってorz 特に構文木のところがサパーリ
105じゃないけど、caperべんりです、ありがとさんです。
107 :
デフォルトの名無しさん :2008/01/13(日) 20:39:18
caperって?
ググレスカ
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、 flexを動かそうとすると、bash: flex command not foundとでます どーやれば、うごかすことができるんすか?
>>104 今のJVMは起動時間はクソ遅いけど処理自体はそれなりに速いからねぇ…
gcjでネイティヴバイナリ化するとアプリの起動時間はJVMより速くなる.
が,処理時間は正直速くならんね…
111 :
デフォルトの名無しさん :2008/01/14(月) 12:39:53
112 :
デフォルトの名無しさん :2008/01/14(月) 13:31:46
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、 flexを動かそうとすると、bash: flex command not foundとでます どーやれば、うごかすことができるんすか?
>>105-107 caperおもしろいな
あとは、軽い汎用VMでもあれば、お手軽自作言語が簡単にという夢を見た
VMは作るのだけならそんなに難しくないよ。 むしろ既存のVMに乗せる方が困難なんじゃないだろうか。
>>114 同意。
組み込みでメモリ制限がきつい時にマクロの一種としてVM作ること多いんだけど、マジでそう思う(VMも似通ってるけど特殊なプリミティブが組み込み対象別なのでメモリ制限の関係でいまいち統一的に扱えない)
Pコードか!
似たようなもの。 セルフコンパイル、自己デバッグくらいは処理できる(実機ではそんなメモリないけど、エミュをデスクトップ機上に簡単に作れるのでそちらでデバッグ) 32KワードくらいのRAMのうち16K自由にできれば自己完結環境になれるからね>>pcodeがUCSDのだとすると
118 :
デフォルトの名無しさん :2008/01/16(水) 19:58:47
p2cコンパイラをcygwin環境で動かすにはどうしたらいいですか?
おー 簡単な物は大学の授業や演習の資料とかではあるけど ネット上でブラウザで閲覧可能でまとまってるものはごくわずかだからなぁ
MS-DOSのバッチファイルのBNFってどこかに落ちてませんかね。 googleしてみた限りでは見つからないのですけれども・・・。
バージョン違いがあるし、難しいんじゃないかなあ? そもそもコマンドベース言語だし。 過去、バッチを読み込むプログラムは存在してるから、 その作者に連絡とってみるとか。
テンプレにある、コンパイラ構成法の正誤表がアクセスできん。
GCって昔読んだ説明から、何ひとつ進歩してないような気がする。 気のせいか?
125 :
121 :2008/01/24(木) 21:12:43
>>122 レスありがとうございます。
引き続きもうちょっと色々と調べてみようと思います。
>>124 の言う昔が僕の言う昔と違うことだけはわかる。
ここ5年だったらあんまりかわらんが、10年だとだいぶ違う。
statements や expression や leftvalue(左辺値) などの意味は分かるのですが、 primary とはどういった時に使われるのでしょうか? あるいは、どういったものをいうのでしょうか?
primary expression (一次式) なら定数や変数など それ以上分解できない式のことだが
GCが進歩したのはJavaのおかげ。 Lispだけではとてもとても。
>>129 そういう意味でしたか、どうもありがとうございました。
> ・タイトルが思い出せないのだが、リファレンスカウントと > ガベージコレクションは双対である、とかなんとかそんなの。 A Unified Theory of Garbage Collection
LisperはN64で使われてるとかいろいろ誇らしげに言うからな GCは進歩したのもLispのおかげなんだよ
>>134 GCに一番寄与したのってSUNのプロダクトだとjavaよりselfじゃないのかな?
ここ(笑) とは趣旨が違うよなぁ。 なにか新しい言語を、作りたい人じゃなくて使いたい人のためのスレか。
OOP言語統合とか、関数型統合とかないからねえ OOはネガティブなスレしかないw
>>119 のid:authorNari がGC本の翻訳希望者つのってる。本気かいな・・・てか需要あるんかいな・・・
140 :
デフォルトの名無しさん :2008/01/30(水) 23:36:23
LISP使いの人が一番だなって感じたことがあるんだけど、 それは、 プライドの高さ。(マジ
>>140 なんで? どの辺が??? そんなプライド高くねぇとおもうぞ………
少なくとも俺のしってる奴は, みんな, C とかアセンブラとか書けるし…
そう言う問題とはちゃう?
>>140 ワシはLisp使いだがプライドって旨いのか?
まだ食った事ないぞ
Lisp を貶せば自分が高みに上がれると思ってる奴ってまだ居たんだな この多言語時代に、とっくに絶滅したと思ってたよ
にじみ出るプライドが俺を呪い殺そうとしている^p^
せっかく煽ったのに、内容がここまで勘違い全開だと恥ずかしいな。
>>145 馬鹿が見る豚のケツって言葉を思い浮かべた
lisp = 鮫島事件 おや?誰か来た様だ
俺はJavaとか使ってる奴とは違う。
かわいそうに、java屋以下とは……
馬鹿さ比べでjava屋以下になっても あんまり悔しくないよなぁ
所詮Windowsなんて使ってる以上、どちらも一緒
ruby v.s. php か
お前ら
>>1-6 を読め
ただのLL談義はスレ違いだ
155 :
デフォルトの名無しさん :2008/02/03(日) 22:16:59
質問です。 bisonで、下のリストのconflictがどうしても消せません。 通常の式と、定数式を別に扱いたいんですが、両方にある単項マイナスが 解決できないようです。 %precを使ってもうまくゆきません。 どうにかならないでしょうか? -- %token tkNUM tkVAR %left EXPC %left '+' %right '-' %% /* 式 */ exp: expc %prec EXPC | tkVAR | exp '+' exp | '-' exp ; /* 定数式 */ expc: tkNUM | expc '+' expc | '-' expc ; %%
157 :
デフォルトの名無しさん :2008/02/03(日) 22:42:43
ところでみんな、コンパイラ/インタプリタを作るにあたり、 C言語とアセンブリ以外の言語で、という条件だったら、 どの言語使う?
C++
なんか %prec の使いどころがようわからんのだけど、 単項マイナスのためのおまじないとしか俺理解してないので なんか変じゃないの? としかアドバイスできない。
Cみたくネイティブコードコンパイラがあって Cよりずっと型安全な言語がいいなぁ どんな言語があるかよく知らないが
GCJ?
>>160 その条件だと SML, OCaml, Haskell が該当する。
これらの言語は処理系の実装によく使われるけど、
ランタイムの制約が大きいので要注意。
何も考えずにHaskell
ランタイムの制約って何?
>>164 自前で GC を用意したいとか、Int は 32bit ないと嫌だとか、
細かい処理系の実装を弄りたい向きには合わない
楽したいならむしろ良いのかもしれんけど
>>165 なるほど、インタプリタの話か
コンパイラ書くことしか考えてなかった
真面目にインタプリタを書くなら、Haskellで書かれたバイトコードコンパイラ+Cで書かれたバイトコードインタプリタ
みたいな構成にすれば良いかな
%prec EXPC が変だな。
168 :
155 :2008/02/03(日) 23:29:15
>>167 %precがないとexpの'+'とexpcの'+'でconflictが起きるんです。
expとexpcを混ぜて定義しようとするからconflictするわけで exp: tkVAR | tkNUM | exp '+' exp | '-' exp expc: tkNUM | expc '+' expc | '-' expc
170 :
155 :2008/02/03(日) 23:54:08
>>169 それだと定数式もexpになってしまいます。
要するに、
a + 2 + 3
を、
tkVAR + expc
としてパースしたいんです。
パーサの段階で定数式を最適化したいんです。
難しいですかね?
パーサの時点で定数式の最適化って 2 + a + 3 とか最適化できなくね?
172 :
155 :2008/02/04(月) 01:27:57
>>171 それはできなくて良いです。
つか
>>155 のやり方でもうちょっと書いてみたけど、
演算の優先順位でも問題が発生したのでやっぱり
諦めることにしました。
面白いアイディアだと思ったんだけどなぁ…
「パーサの段階で定数式を最適化したい」んならアクション中で最適化すればいいだろ 文法レベルで最適化する意味が分からん
構文のレベルで弁別しといたほうが楽、という理由はあるかも。 優先順位付けで誤魔化すんじゃなくて、きちんと優先順位を組み込んだ 構文規則にして、あと、何かテクニックがあったような気がするんだけど...
175 :
155 :2008/02/04(月) 12:01:23
>>173 tkVAR '=' exp
tkCONST '=' expc
みたいに書けると良いかなと思ったんですよ。
>>174 > 何かテクニック
参考になる資料があれば是非教えて頂きたいです。
Haskellでインタプリタか・・・ Haskellってメモリ気にし無さすぎだからヤバそうなイメージがあるけど、 実験用と以外で使われているんだろうか
ああああ、アホか俺は。 そんなのは処理系依存だよな。 スマソ。
%right '-' も変でないか その構文では2項演算子じゃないよね
確かに
衝突の消し方は、Rubyを256倍使うための本 無道編、で読んだような気もする。記憶が正しいという自信はない。 とりあえず衝突が出なくなるところまでコナしてみたわけなのだが、これで希望する構文規則になっているだろうか。 %token tkNUM tkVAR %% /* 式 */ exp: exp_ | expnc '+' expc_ | expc '+' expnc_ ; exp_: expnc | expc ; expnc: expnc_ | expnc '+' expnc_ ; expnc_: tkVAR | '-' expnc_ ; /* 定数式 */ expc: expc_ | expc '+' expc_ ; expc_: tkNUM | '-' expc_ ; %%
%token tkVAR tkNUM %left '+' %right UMINUS %% program : | program line ; line : '\n' | exp '\n' ; exp : expr { printf(" expr\n"); } | cexpr { printf(" cexpr\n"); } ; cexpr : cexpr '+' cexpr { printf(" c+"); } | tkNUM { printf(" %c", $1); } | '(' cexpr ')' | '-' cexpr %prec UMINUS { printf(" cneg"); } ; expr : expr '+' expr { printf(" +"); } | expr '+' cexpr { printf(" +"); } | cexpr '+' expr { printf(" +"); } | tkVAR { printf(" %c", $1); } | '(' expr ')' | '-' expr %prec UMINUS { printf(" neg"); } ; %%
続き int yyerror(char *msg) { printf("%s\n", msg); return 0; } int yylex(void) { int ch; while (isspace(ch = getchar()) && ch != '\n') ; if (isalpha(ch)) { yylval = ch; return tkVAR; } else if (isdigit(ch)) { yylval = ch; return tkNUM; } else { return ch; } } int main(void) { yyparse(); return 0; }
183 :
デフォルトの名無しさん :2008/02/05(火) 16:31:40
メンバーアクセスと呼び出しの構文規則を考えていたんですが、 expr: mem-expr mem-expr: invoc-expr ['.' invoc-expr]* invoc-expr: prim ['(' [arg]* ')']* prim: ident |(expr) こんな感じで C++ や Java 風の式を評価できますか? 結合順とかは問題なさそうでしょうか?
184 :
183 :2008/02/05(火) 16:36:02
一応、こんなのは全部許したいです。不正なものは意味解析ではじく方向で。 foo.bar.baz; foo.bar.baz(); foo.bar.baz()(); foo.bar().baz; foo.bar().baz(); foo.bar()().baz; foo.bar()().baz(); foo.bar()().baz()(); foo().bar.baz; foo().bar.baz(); foo().bar().baz; foo().bar().baz(); foo()().bar.baz; foo()().bar.baz(); foo()().bar().baz; foo()().bar().baz(); foo()().bar()().baz; foo()().bar()().baz(); foo()().bar()().baz()(); (foo).bar.baz; (foo).bar.baz(); (foo).bar.baz()(); (foo).bar().baz; (foo).bar().baz(); (foo).bar()().baz; (foo).bar()().baz(); (foo).bar()().baz()(); (foo()).bar.baz; (foo()).bar.baz(); (foo()).bar().baz; (foo()).bar().baz(); (foo()()).bar.baz; (foo()()).bar.baz(); (foo()()).bar.baz()(); (foo()()).bar().baz; (foo()()).bar().baz(); (foo()()).bar()().baz; (foo()()).bar()().baz(); (foo()()).bar()().baz()();
うぜえ・・ それぐらい自分で判断しろ 半年ぐらい既成の文法眺めてろ
ヨミ肉w
187 :
183 :2008/02/06(水) 08:45:44
189 :
183 :2008/02/06(水) 12:11:15
再帰下降のパーサを手書きしてるからパーサ【ジェネレータ】の話じゃない。
>>183 Javaは関数ポインタないから(hoge)() とか hoge()() はできないよ。
Javaの構文規則みても、あんまし参考にはならないと思う。
C言語の本に書いてあるよ
1.6で関数型ができるという話はどうなってるの? Java
そんな話ないよ
ごめん、7だった。
>>193 あれは func() じゃダメで func.invoke() とかやる事になってる。
名前空間汚れるから互換性捨てないと func() みたいな呼び出しは無理。
あごめん
しばらく動きなかったからすっごい見てなかった
>>105 どんな解説でしょうか?
caperというよりもっと一般的な話であるなら、
すでにあるものよりうまく説明できる自身がまったくナイデス
256倍のraccのやつとか読むといいと思うけど
まだ売ってるのかな
>>106 用途とかバグとかウザいところとかあったら教えてください
.....
書き込みから20日もたってるのでいまさらだけどw
つーか今になって見ると 俺が読んでもわからんですね たとえばTutorial 1: > 7行目のupcastは、各非終端記号の型から、Parserのインスタンス化のときに > テンプレートパラメータとして与える「値集合すべてをあらわす型」への変換を提供する関数です。 > セマンティックアクション関数がひとつでもある場合、安全な型変換のために > この関数が定義されていなければなりません。 ハア? わけわかんねーよバカじゃねーの って感じw とはいえこれはこれで「yacc使ったことある人」対象であれば 簡潔にまとまっているような気もしないでもない 気が向いたら読み直して書き直してみます
なんかワロタ
作者キター caperでJavaScript生成させると this.get_arg = function( base, index ) { return this.stack[ this.stack.length - ( 3 * ( base-index ) + 2 ) ]; } みたいなコードが出てくるけど this.get_arg = function( base, index ) { return this.stack[ this.stack.length - ( 3 * ( base-index ) ) + 2 ]; } の間違いじゃないすか?
javascript普段使わない上
3時間くらいで書いたコードなのでまったく思い出せない……
が
そのようですね
現在のコードだと、
パーサは動くけど
セマンティックバリューにぜんぜん意味わかんないものが返ってくるってことかな?
>>200 さんはそれでわかったのでしょうか?
202 :
デフォルトの名無しさん :2008/02/07(木) 23:36:20
え?どれを3時間だって?
>>202 jsジェネレータ(caper_generate_js.cpp)です。
といっても、自分に興味がほとんどないので
上のようなバグ出しちゃうわけですが……
C#やDのジェネレータを書いてくださった方もいらっしゃるので、
他の人でもさほど難しくなさそうですよ。
PHPも需要がありそうなんで挑戦しようとしたんですが
PHPの仕様のアレさにやる気が失われました。
難しくはないと思うのですが。
週末久しぶりにバージョンアップしようかと思います。
上のバグ直してC#やDのジェネレータを取り込んだバージョン。
む、C#のジェネリクスってduck typingできないのか もらったコードバグっててちょっと使えないな…… C#はいったんなしにするか
Dは普通に動いたっぽい C#ジェネレータはundocumentedでだして 誰か得意な人に見てもらおう
スレチガイ
パーサジェネレータのスレってどこにあるん?
>>208 今のところここがもっとも近い、そういう意味じゃ
>>207 は微妙な指摘というか言葉たらず。
独白に近いのでそういう事はBlogでやれって意味じゃまさに207の指摘どおり。
趣味で(ほぼ無意味ですが)C++とほぼ同等のコンパイラを作っています。 当然テンプレートとかはないですが、文法がそっくりという意味です。 質問なのですがC++は何故、クラスの定義がファイルの行数的に先に行なわれていないとコンパイルエラーになるのでしょうか? 例えば CHoge test; class CHoge { }; こういう順番だと、CHogeって何?未定義なんだけど。ってエラーになりますよね。 ファイルの上から処理して言ってるのだから当たり前なのは分かってます。 ですが先に class などの定義系を先に処理してからにすれば回避できる問題かと思います。 「先に全ファイルをチェックして定義系を処理してから、再度全ファイルを処理する」 という2度処理が、C++が生まれたころのマシンスペックではもったいなかったのでしょうか?
過去の名残。
>>210 Cのstructの仕様をそのまま引き継いでるだけかと。
C++というよりは、Cが生まれたころのマシンスペックだろう。
>>211-212 なるほど、ありがとうございました。
無理にそこを真似する必要はなさそうですね
最初のC++コンパイラはCへのトランスレータだったような気がする。(SS1の頃でメモリも16M位が標準だった)
質問 Javaっぽい言語でスクリプト作ってたんですが、数値型に何も考えずに int, short, byte, long をつくったんですよ でもおかげでかなりVMやコンパイラの仕組みが複雑になってしまってコマってます 正直、shortとかbyteってみなさん使ってます? (メモリーをケチる目的以外で) バイナリファイルを解析する時とかはさすがにbyte単位で扱えなければ話にならないと思いますけど ByteArrayStreamみたいなものがあればそれでいいかなぁとか考えてるのですが…
Javaっぽいって…
>>217 すごい誤解招きそうな文章でしたね
Javaっぽい文法でスクリプトを作ってたんですが〜としてください
byteやshortも過去の遺産じゃね? よっぽどメモリーがきつい環境で無い限り、演算もintのほうが速いわけでもあるしint使うわ
あるいは、メモリに常駐するデータ量が2Gか4Gかという差があるとかな
確かにそれくらいメモリーの差が出るなら考えるなw まぁそれもByteArrayStream?があればそっちでいいわけで Javaのものだと仮定すれば、あれランダムシークもできるし(Byte型の配列とほぼ同義として扱える)
>>216 JavaVMも配列とかフィールドにはbyteやshortがあるけど、スタック中ではint扱いっすよ
いちいち丸め処理が入るだけで
long, float, double や参照は別扱いだけど
C でも汎整数拡張とかあって、 式中では勝手に int に格上げされるな。
でも、エンジニアリングモデルでは普通に使ってるよ。
226 :
デフォルトの名無しさん :2008/02/21(木) 23:44:59
場違いかも知れませんが、宜しくお願いします。yacc/lexはc言語での 作りですが、perl言語で同様の処理をしたいのですが、処理系はあるの でしょうか? 以前は、随分と前に見た事はあるのですが、最近は見かけなくなりまし た。知っている方、どうかそのインストール方法...等アドバイス宜 しくお願いします。
Racc
kmyacc
gnu makeのBNFとかってありますかね?
やはり新しい言語の方が優れてるのですか?
兄より優秀な弟などいない
>>231 GNU Make のソースツリーの中に無いの?
知らないけど。
Lisp 最高〜!
そういえば、昔どこかのサイト(海外)で、 プログラミング言語の上下関係を図式化したものがあった。 そこでは確かに Lisp が一番上位に来ていたような… 何がいいのかさっぱりわからんがw
>>239 原文を見てない範囲での推測だが、
S式という情報の取扱形式が
全ての上位に来ると言う意味なら判らなくもない。
ただそういう比較は扱う人の主観でしか有り得ない。
Adaのマルチタスクプログラミング舐めてるのか!
Lisp - C の連結はありえない
>>241 これは面白いな。
ところで、最近のマクロという名のプログラムはどこに?
面白くないぞw
>>241 部分部分を見るとアレだけど、大まかな流れは頷けなくもない。
LanguagesではなくProgrammersを扱った図だからね。言語の宗教論争とはちょっと事情が違う。
「上位」プログラマは、多くの場合「下位」プログラマ"でもある"(その言語を使える)か、
あるいは"すぐにそうなれる"(パラダイムを十分把握していて、表面の違いを学ぶだけでいい)状態にある。
きっちり成立しているとは言わないけど、少なくとも、同じ事を上下逆に考えるよりは成立している。
だから全体を、あくまで曖昧なレベルで、クラス図の比喩として見ることができるんじゃないかと。
別の言い方をするなら、この図は、
「あなたが言語Xと言語Yを使えて、どちらかの言語名+プログラマ、でしか自称してはいけないと言われたら、
どちらを口にすれば、自分のスキルや経験値をよりあますことなく示唆できるだろうか?」
っていう「ソート」の結果であり、実際、まんざらデタラメな結果ではないと思う。
LispとCが使える人だったら、この図の「Lispプログラマ」に自分を置くし、たぶんそれで正解だろう。
逆を自称するよりは、その人の経験してきたことの「より多く」を伝えられると思う。たぶん。
> クラス図の比喩として見ることができるんじゃないかと。 そんな必要はないだろ。 その見方から何が得られたかも書いてないし。 クラス図言いたいだけと違うんかと
ジョークにマジレスしてる
>>246 もよくわからんのだが…
>>249 ジョークがまんざらでもないことを面白がってるんだよ。
「そうそうあるある」ってのが笑いどころのネタだしな
まんざらでもないからこそジョークとして成立してるところに 「いやこのジョークはまんざらでもないんだよ!」と解説しちゃうところが無粋すぎ。 ってかスレ違いすぎだな…
そうとも思わないが?スレチ なかなかおもしろいと思う。
使用者のヒエラルキーなんてマ板の範疇だろ・・・ スレ違いどころか板違いだ
まぁ、自分が悪く言われているジョークが面白くないのは自然だ。
>>241 の元ねたの最下位カーストだけ妙に具体的なのは
おもしろかったw
お気に入り言語が下にあるからって、そんなにカリカリせんでもw
出来が悪いのはともかく、 言語の階層じゃなくて、 プログラマーの階層なんだぜ?
古臭いネタまだひっぱるのか?
約一名のこのネタの腐しかたが特徴的すぎるんだが、何がそんなに気に入らないんだろw
誰のこと?
野村君のことだよ
鈴木君は?
鈴木君は良い奴だよ。 先週、尻にタイ焼きを詰まらせて亡くなったけど。
田中くんは?
山田さんは?
おーい
中村くん
なんだい?
ちょいと待ちたまえ
273 :
デフォルトの名無しさん :2008/04/07(月) 12:00:22
>>272 オハヨー!!
∧∧ ∩
(`・ω・)/
⊂ ノ
(つノ
(ノ
___/(___
/ (___/
 ̄ ̄ ̄ ̄ ̄ ̄
あげてもいいですか?
いいけど、またLISPネタになるだけだよ?
278 :
デフォルトの名無しさん :2008/04/23(水) 22:42:00
本のサンプルで利用されているANTLRをお勉強中。 今までこういったものを触ったことが無いので枠枠してる。
SquirrelとXtalのソース見て勉強中 頭では分かっていても、実際にコードへ落とすときに悩んでしまう
プログラムの最適化方法、特にベクトルプロセッシングの最適化について知りたいのですが、 どこか参考になるサイトはありませんか? よろしくお願いします。
つ『コンパイラの構成と最適化』
了解しました。ありがとうございます。
髭を伸ばそうかと思っているんだけど、おまえら髭どうしてる?
剃ってる
髭はバリカンで刈ってる。 別に髭専用バリカンてわけでもない。
年単位で前に読んだ記憶があるネタだな
俺はひげ専用バリカン持ってるよ。 長さを自在に調整できるやつ。 ただ今使っているのは電池専用なので使いにくい
型名と変数名を名前システムの観点から考察した 議論ってなんかある?
いきなりどうした、頭大丈夫か?
静的型って、型名と変数名とスコープを結びつけるわけじゃん。 抽象データ型って、変数名とスコープを介して 型名とプロシージャ名を結びつけるわけじゃん。 こういうのを名前システムとして眺めたら、 なんか見えてこねえ?
なにが言いたいのかわからん マヨイガでも見えてんのか
今
>>289 の脳内で画期的な理論が生まれようとしている!
のかもしれない…?
ただの型推論なんじゃない?
GUIクラスライブラリのBoxクラスを想定。 Boxクラスには、x, y, width, heightというフィールドがある。 xとyのあいだ、widthとheightの四則演算は原理的に 禁止。書けてしまう&実行できるのは、言語が 行き届いてない証拠。 言語レベルで禁止するには、x, y, width, heightを それぞれ別の型にしてしまえばいい。 でもそうすると、Xクラスのフィールド名はx、Yクラスの フィールド名はy、てなことになるわけだ。 これって間抜けじゃね? 型名と変数名を名前システムの観点から考え直せば、 こういう間抜けなことの起こらない方法が見つかるかも しれない、ってこと。
キログラムとセンチメートルといった単位の違うものを足したりできなくしようというわけか? 興味深いけど、なんか面倒臭そうな気がする
過度な形式化は無用な世話だ
>>295 間抜けでもいいなら、不正な操作を禁止することは既にできるわけだろ
冗長だから短く書きたいというなら型システムの問題ではない
Lispのマクロのようなものがあればいい
>>298 一概にそうは言い切れないだろ
略記法を展開する過程が型情報に依存するなら、単にマクロで構文を導入するのでは済まない
>>296 カロリー換算することで、燃費というプロキシは必要になるが計算は可能だな
ガチガチに縛るのもどうなのかなぁと思うのだが
俺の視点はずれてるのだろう
>>299 たとえばCのsizeofは型情報がないと計算できないが、
逆に言えばsizeofのような演算子を必要な分だけ追加すれば済むってことか?
新機能を追加しないと展開できない略記法? ハードル上げ過ぎ
マクロ云々みたいな実装レベルの話じゃなくて、継承とかみたいな概念レベルの話をしているのでは? 型の拡張というよりも、むしろ単位という新しい概念の導入に近い気がする。 整数型とか実数型とかはそのまま受け継いで、それとは独立に演算の制約情報を付加する、って感じで。 物理とかのペーパーだとよく単位つけたまま式に代入したりするけど、それをPCで実現させるような。 俺言語での超適当な例。 unit : Volt, Ampere; // 電圧・電流の単位を定義 unit : Watt = Volt * Ampere; // 電力と電圧・電流の関係を定義 variable Integer [Volt] : vol; // 整数型(単位ボルト)の変数volを宣言 variable Integer [Ampere] : amp; // 同様 variable Integer [Watt] : wat; // 同様 variable Integer [Volt * Ampere] : wat2; // これもアリか。Wattと同じ。 variable Integer : num; // もちろんただの整数型も宣言可能 vol = amp; // ERR wat = vol * amp; // OK wat = vol + amp; // ERR vol = wat / amp; // OK vol = vol * num; // OK vol = vol + num; // ERR
variable Integer : num; // もちろんただの整数型も宣言可能 こればっかり使って全て台無しって事にならんかなぁ? unit : Ohm; unit : Volt= Ampere * Ohm; とかせんといかんの?
>>295 >>303 Boost C++ ライブラリに昔あったなあそれ。
今ではなくなっちゃってるっぽいけど。
変数に次元を割り当てて、異なる次元の変数同士の加算減算をしたり、
次元を無視した代入を行おうとすると、コンパイルエラーを吐いてくれるやつ。
情処のプログラム研究会あたりでネタにな・・・らなさそうだな
ならないな。こんなのとっくの昔からある話題だし。 言語レベルでやるようなもんじゃない。
ハンガリアンなんて便法じゃなくて、型で強制すべき、ということでしょ。 それを支援する言語というテーマは、まんま同じものが過去になければ、 研究会発表ぐらいならいけるんでない?
強い typedef でおkだろ。
312 :
デフォルトの名無しさん :2008/05/10(土) 14:27:11
具体的な機能に飛びつく前に、こういう問題を概念レベルで 上から俯瞰できるような観点はないか、そこが知りたい。 数学基礎論だと、群だの体だの圏だので俯瞰するわけだ。 そういう観点があって初めて、5次以上の解の方程式が 存在しないことがわかる。 なにをどう構成して名づけるか? 変数名・型名・スコープは 構成の仕方の一例にすぎないわけよ。 演算子と構文にいろんなやりかたがあるように、名前システムにも いろんなやりかたがあるはず。多分。 そのいろんなやりかたってのを、「あれを思いついた」 「これを思いついた」ではアドホックだから、名前システム という観点が欲しい。
314 :
デフォルトの名無しさん :2008/05/11(日) 00:19:43
>>283 レーザー脱毛した。
もともとそんなに濃くなかったけど朝がなんとなく楽になった。
他の脱毛よりましらしいがレーザーもすんげー痛い。
>>314 痛いのか、知って良かった。
朝剃っても夕方泥棒みたいになるんだ。
316 :
デフォルトの名無しさん :2008/05/14(水) 15:51:01
質問。 εって一つ先読みして即還元すればいい?
317 :
デフォルトの名無しさん :2008/05/16(金) 07:20:07
「はじめてのコンパイラ - 原理と実践」って書かれてることに間違いないですよね? 正順LRって単語でググってもあまりヒットしないので不安なんだけど。
318 :
デフォルトの名無しさん :2008/05/16(金) 07:44:02
普通 正準LRっていわんか? canonicalの訳だろ?
319 :
デフォルトの名無しさん :2008/05/16(金) 07:50:18
>>318 ってことは、正順と書いてあるこの本は駄目本ってことですか?
ドラゴンブックは暗号が多すぎて解読が難しかったので、この本を
無条件に信頼できると良いのですが。
無条件に信頼って物を学ぶ態度じゃないだろw とりあえず仮に教科書を信頼して勉強をすすめる 知識が付いてきたら別の情報源との突き合わせも難なくできるようになるだろうから、 間違ったことを覚えていたらそのときに訂正すればいい もちろん間違いの多い教科書を避けられるならそれが良いけどな
321 :
デフォルトの名無しさん :2008/05/16(金) 08:24:02
ないよ
323 :
デフォルトの名無しさん :2008/05/16(金) 08:45:33
>>317 スタータキットとして割りきって使えよ。
「原理と実践」でそんな薄い本。
甘えすぎ。
325 :
デフォルトの名無しさん :2008/05/16(金) 08:56:58
>>324 平易な言葉で書かれた素晴らしい本だと思うんですがね。
内容が正しければ良書なのですが。
ドラゴンブックマンセーしてるやつは3の倍数。
順は"順当"の順だから間違いってほどではないだろ。 いずれにせよ、どうでもいいことだろ。 そんな短い本で終わることはあり得ないんだから。
327 :
デフォルトの名無しさん :2008/05/16(金) 09:25:01
>>326 この本に含まれていなくて且一般に重要なトピックは何ですか?
こんな短い本・・・とおっしゃるくらいだからいくらでも挙げることが
できるんですよね?
それともあなた何も理解せずに適当な単語を並べてるただの3の倍数ですか?
そのくらい自分で調べろよ。 本じゃなくて、お前の勉学の態度が悪いんだよ。
329 :
デフォルトの名無しさん :2008/05/16(金) 09:32:53
>>328 結局のところ全く理解していないので一つも挙げることが出来ないのでは?
情報が足りるか足りないかなんか 実装してみたらわかると思うけど それ以前に実装しようと思うだけでわかるかもね
情報引き出すための煽りか
>>330 それだと実装手法は一つしか学ばないでいいって態度だね。
333 :
デフォルトの名無しさん :2008/05/16(金) 09:38:42
>>331 引き出す情報を持っているかどうかが問題。
たぶん持ってないな。
仮にそうだとして それを指摘して 誰になんの得があるというのか 勝利宣言するならその本読んで 実装する必要があるし 自分の立場がわかってなさそうだな
>>334 もうやめれ。
傍目に見てお前の無知はばれてる。
ややこしくなるからわからないならレスするな。
IDの無い板でそれを言っても何の説得力もないけどな
知らないならレスしないでください の変形かw
338 :
デフォルトの名無しさん :2008/05/16(金) 11:44:13
知らないのにレスするとはなんとおこがましいのでしょう。
339 :
デフォルトの名無しさん :2008/05/16(金) 12:44:48
お前ら楽しそうだな。 チャットばかりしてないで、スレタイに沿った話しろよ。
340 :
デフォルトの名無しさん :2008/05/16(金) 12:56:36
やさしい構文解析はいつ出版されるのか。
構文解析をコードで理解するよりも、まだやることは多い気がする。 状態遷移図を書きまっくて、 NFA からε遷移が無くなるように DFA する辺りとか。 オートマトンを追いかけてのスキャンを考えて、 例外処理までもを備えた形にはどうなるのかとか。 一見動いて見えるコードを下手に書いてしまうと、後が大変になる。 思考実験で状況を追いかける位にはなれたらなー、とは思った。独感だけど。
342 :
デフォルトの名無しさん :2008/05/18(日) 21:26:16
>一見動いて見えるコードを下手に書いてしまうと、後が大変になる。 そうか? それこそが、ITで必要なことだと思うが、 あっ、研究は別ね。
344 :
デフォルトの名無しさん :2008/05/19(月) 09:48:43
COBOLのコンパイラを探してるんだけど、何か無いかな? 条件としては フリーで独自の例外表記が無くて 外部テキストファイルの読み込みが可能 ソースと実行結果をテキストで出力が可能な奴を探してるんだ。 ずっと探してるんだけど実効結果をテキストで出力可能な奴が見当たらないorz
345 :
344 :2008/05/19(月) 11:27:19
すいません。追記としてwindows上で動く奴があったら教えてください
347 :
344 :2008/05/20(火) 10:14:30
>>346 本当にありがとうございます。
ぜひ、参考にさせていただきます
348 :
デフォルトの名無しさん :2008/05/20(火) 10:25:53
349 :
デフォルトの名無しさん :2008/05/23(金) 09:50:42
expr: expr + expr |expr - expr |special special: expr + expr
動的コンパイラや最適化の勉強をしようと思っているんですが、Ruby とかのス クリプト言語で書かれた、最適化の勉強用のおもちゃコンパイラ的なもので手 軽なのって無いでしょうか?
・brainf*ck インタプリタを作った事が無い人でも作れる 結構最適化に向いていると思われる
352 :
デフォルトの名無しさん :2008/05/24(土) 18:53:35
353 :
デフォルトの名無しさん :2008/05/25(日) 17:57:53
一瞬、メイド特化言語に見えた。
緊急入院
C言語のコンパイラを探したんだが いろいろあるんだね・・・知らなかった。 ぶっちゃけお勧めって何? OSはWinXPとVISTAで。
>>355 英語学者が英語をしゃべれるとは限らないという。
Cコンパイラの話はコンパイラスレではなくCスレで聞け。
358 :
355 :2008/05/27(火) 08:28:01
スレチすまそ
359 :
デフォルトの名無しさん :2008/05/27(火) 22:36:22
>>351 brainfuck でできる最適化って具体的になにがあるでしょうか?
>>359 コンパイル時の定数畳み込みだろ。
究極的には入力命令","の影響の及ぶところとそうでないところを判別して、
影響の及ばないところは全てコンパイル時に計算することができる。
たとえば、
++[>+++<-]>.,.
というプログラムなら、
putchar((char)6);putchar(getchar());
と最適化できる。
>>360 ありがとうございます。
>究極的には入力命令","の影響の及ぶところとそうでないところを判別
これって、定石ではどうやってやるんでしょうか?まったくわかっていないけ
ど、コールフローやデータフローの解析をする?
362 :
デフォルトの名無しさん :2008/05/28(水) 22:54:14
あたりまえですがなw
>英語学者が英語をしゃべれるとは限らないという。 日本語学者が日本語をしゃべれるとは限らないという?
海外の日本語学者にはそういう人もいるだろ
地震の研究者がカンファレンスで日本にきて初めて地面の揺れを経験して 「今のは何だ」 と騒いだ話を思い出した。
こういうやり取りが某スレで展開されてましたが、今の流行ですか? 638 名前:デフォルトの名無しさん 投稿日:2008/05/25(日) 00:23:06 アムロ・レイだってマニュアルが無ければ ガンダムを操作することは出来なかった つまりはそういう事さ 639 名前:デフォルトの名無しさん 投稿日:2008/05/25(日) 00:38:18 それ以前にアムロもカミーユもロボット作ったりしてなかったか? つまりはそういう事さ
教えて下さい。 Lispって人工知能とかで使われたりしてるって よく本とかに書いてあるのをみるんですが、 何が(どこが)人工知能にむいているんでしょうか? 逆に、他の言語だと何が(どこが)向いていないのでしょうか?
>>1 にかいてあることがわからない人は、中がっこうからやりなおしてね。
やり直しも何も中学生ですが何か?
>>368 わからねえならわからねえってハッキリ言えよこの屑が
371 :
デフォルトの名無しさん :2008/06/01(日) 19:28:18
分かってれば情報垂れ流しとか、ハッキリ言うとそれは廃人です
貴様らはいちいち回りくどいな lispスレで聞けやこのハゲ!
>>370 わからない場合はわからないと言ってもいいんだけど、残念ながらわかるんで、
「わからない」と書くと嘘をついたことになっちゃう。だから書けないw
あと、わからない奴が「わからない」と言うのは、名指しで答を求められて
「何か言わなきゃいけないけど答がわからない」という状況に陥ったときであって、
この場合は誰も当てはまらない。わからない奴はただ「黙ってる」場面だよ。
つまり、「わからねえなら黙ってろよ」と煽らなきゃいけない。君のはまるっきり的外れ。
頭の悪い子が興奮すると、こういうミスで大恥かいちゃうから気をつけようね。
こういうところで知能レベルってバレちゃうものだから・・・。
わからねえってハッキリ言えよこの屑
煽りたい盛りのゴミはほっておけ まぁ放ったところで有益な答えが返ってこないだろう事実は変わらないがな
わかりません、ごめんなさい。 僕達は屑です
>>376 それでいい
おまえらもこれからは素直に生きろよな
>>377 「おまえら」なんて他人事みたいに語ってるが「僕達」にはお前も入ってるんだぜ?
いい加減うぜぇ
ここはRuby坊のLisp叩きスレですか?
Ruby坊はあらゆるスレに来てあらゆる言語を叩くので、 特にこのスレだけがどう、ということはないです。
373さん、ここは子供の来るところではありませんよ。 さて、終了です。 スレを元に戻しましょう。
おまえらスルーしろよ 糞が
385 :
デフォルトの名無しさん :2008/06/04(水) 00:23:33
インタプリタをCで作りたいです。 お勧めのサンプルって、無いですか?
>>384 頭の悪い子供には無理な注文。
相手の想定を上回ることを書いて鼻をあかしてやろう、と無駄なことを意気込み、
結果アピールできるのは自身の上昇した血圧だけ、というこの一セットは、彼らの宿命なのです。
で、>385は放置か?w
相手してあげたいなら、存分に相手してあげればいい。
断る。
自分のお勧めはCマガジン 2000年5月号。 十数ページの記事で一応インタプリタが作れる。
>>385 テキストで書いてあるソースコードを読むようなインタプリタから
始めることはおすすめしない。
単純な仮想機械からやってみてはどうか?
Brainfuckインタプリタでいいじゃん
あんなの厨房でもできるじゃん
>>393 BFソース -> sed -> Cソース -> gcc -> ./a.out
ってシェルスクリプト見たとき吹いた
>>395 TextBox(BFソース)->javascriptでreplace->javascript->eval
の変化系っぽい
BFソース + Dソース --(Dコンパイラ)--> executable ってのなら前に見たな。 D言語では、コンパイル中にファイルを読み込んで、文字列操作をして、 その結果をコンパイルされるべきソースコードの一部に組み込めるらしい。
VCGグラフって、JPEGとかに変換できないのでしょうか? 見れなくて…
そのまんまの名前の可視化ツールあったと思うが。
How to build a monadic interpreter in one day (based on papers provided by the Haskell community and some other resources) 午前: 仮想機械 午後: パーザ Haskell習得とインストールにさらに半日くらいかな?
ここは、lispは禁句?
下手に話題振ると、あっという間にlispスレになるよな
構文解析をすっとばせるlispは、構文解析までしか語れない住民の多いこのスレでは不評です。
タイトル忘れた。 Kamin: Tim Budd's C++ Implementation of the Kamin Interpreters
407 :
367 :2008/06/05(木) 22:24:23
ありがとうございました。
>>385 UNIXプログラミング環境
hocインタープリタをC+yaccで作る例が乗っている。
完全なソースコードも著者のWebSiteからダウンロード可能!
データフロー解析の簡単な例とか教えてください。
やべ、いまさらだけどBNF理解した 興奮してきた
そこでパーザ・コンビネータですよ。
え、どこどこ?
415 :
デフォルトの名無しさん :2008/06/21(土) 18:17:29
インタプリタしかないようだが。
417 :
デフォルトの名無しさん :2008/06/22(日) 03:16:27
ぱいぱい
stackless pypy
421 :
デフォルトの名無しさん :2008/07/10(木) 10:16:23
>>1 計算機理論の基礎(共立出版) とかも、参考文献にはいいかも。
422 :
デフォルトの名無しさん :2008/07/13(日) 17:58:45
>>422 著者はすばらしいが
COINSは金の使い方が意地汚いからここで紹介するな
ダウンロードするのに個人情報収集とかとんでもない
アホなことしているしヤメロいいな?
なんでそんな必死なん?
425 :
デフォルトの名無しさん :2008/07/14(月) 04:31:14
COINSに予算取られたとか、何かうらみでもあるんじゃねーの?
426 :
デフォルトの名無しさん :2008/07/16(水) 19:18:26
名前からして「硬貨」かw
> ダウンロードするのに個人情報収集とかとんでもない > アホなことしているしヤメロいいな? 成果出しました、ほーらこんなに使われてるんですよ、と主張しないといけない、とか 事情はいろいろあるのヨ。俺は中の人じゃないから知らんけど。 とりあえず空欄でsubmitしてみて文句言われなけりゃおkだろ。そんなもんは。
428 :
デフォルトの名無しさん :2008/07/18(金) 14:28:18
一般的な JIT コンパイラの挙動について教えてください。 JIT コンパイルする箇所は動的プロファイルの結果から決定すると思うんだけ ど、実際に JIT コンパイルを行う _タイミング_ も実行時の情報を使ったりと か、何か工夫されてたりするの?たとえば CPU が空いてる隙にやるとか、メモ リが空いてる隙にやるとか。具体的な実装の名前もわかればうれしいです。
JITコンパイラではないが、Crusoeは、コードを実行しながら、実行しているコードを 効率化する、と資料にあった。つまり、実行頻度が高いコードほど、効率化が 繰り替えされて、より効率のよいコードで実行されるようになる、と。
Crusoeははやい話x86エミュレーターだよ。 単なるソフトエミュと違うのはx86コードを処理する際にCrusoeにあった命令形態に 翻訳して予約メモリにキャッシュと持っててる。 なので一度翻訳した部分がキャッシュにあれば、2回目以降は処理効率があがる。 でもキャッシュのサイズも無尽蔵ってわけではないので、新しい翻訳をする際に 空きがなければ古い翻訳部分が捨てられて、入れ替わりにそこへ入れられる。
なんだソレ。ただのディスクIOキャッシュじゃん。
432 :
428 :2008/07/18(金) 23:38:44
crusoe も JIT してるのか。。。最近の intel な CPU も μOP に JIT コンパ イルしてから CICS で実行するから、同じような仕組みでキャッシュしたりす るのかな。あと、JVM とかはどうなんでしょう。CPU がヒマになったタイミン グをみはからって JIT コンパイルする、みたいな仕組みってある?
>>432 だれだったかちょっとすぐに名前でないけど
たしか最適化には現状3つしか方法がないはず
そげな事してたら、コンパイルが済むまで待たされるやろ。 「おじちゃ〜ん、JITのおじちゃん。ねぇ、コンパイルして〜」 「今いそがしか。こんどヒマのときにコンパイルしちゃるけん。 10円やるけん、あっち行ってうまい棒でも食べんしゃい」 「おじちゃん、こすか〜!もうよか。インタプリタのおばちゃんに頼むけん!」
標準語でおけ
436 :
428 :2008/07/19(土) 01:31:41
>> 434 いや、だからユーザ入力が途切れてイベント待ちのヒマなときとかに投機的に JIT コンパイルしとくのって、あるのかなーと。
ヒマなときもせっせと働くんか。 JITしていられない性格なのか?
貧乏性だから、あくせく働いて、ほっとするスポットもないのだ。
>>140 言語比較のスレなんかでLispではこんな機能があるぞって説いて回るやつがいたがあれはうざかった
COINSはあくまじゃああああああああああああああああ
COINS って 殆どGCC v4 のパクリだよね JITも、誰か HotSpot って言ってやれよ
LLVMの方が最強だし つーかCOINSってなんで20億以上も突っ込まれてるのか 意味がわからん 中の人ここで釈明してくれ ちなみにLLVMは税金じゃない民間からの金が年間5000万 x 8年で 出来ている。それであの驚異的な完成度だ
どこがどうパクりなんだよ。Javaで書いてあるコンパイラのどこが、 Cで書いてあるGCCのパクりなんだと小一時間。 最適化コンパイラのためのフレームワークなんだから、実装1個作るのとは 工数のケタが違う。 フレームワークになってるから、例えばSIMD対応最適化を、プラグインで 作ることができたりする。PROあたりで発表されてるだろ?
>>443 それはLLVMでもできるよね?
じゃあCOINSの価値は何?
またお得意のオナ研の成果ですかねw?
できるの? 実例示してね。
LLVMは中間表現が低レベルすぎる
ISO通りそうだしこれからは標準になるけどね どっかの田舎COINSとは格が違うw
投入した金で、LLVMを開発してる連中レベルの 人材が育ったのなら許せるけど
>>448 そんなのないじゃんLLVMはOpenGLの
実装なんかで実績あるけど一方
COINSは何か成果ありますかね?
技術的にもし仮にすぐれていても
使う人材いないならゴミ技術と等価じゃぼけ
なんでそんなに必死なの?
税金使ってるからじゃねーの?
東大の研究室の方が使ってるんじゃね?
いやいや、道路建設なんかもっと使われてるよ
じゃあCOINSの圧勝ってことでいい?
LLVMの方が安いし出来いいし もうCOINSは終了でいいよ
東大だけとかどんだけ 無駄金使ってるんだよ
で、誰かCOINSを使って拡張した人はいるの?
ところでCOINSってなんだ?
大学の図書館にいっぱい本買ってもらいました。ごめんなさい
460 :
デフォルトの名無しさん :2008/07/20(日) 04:35:18
> つーかCOINSってなんで20億以上も突っ込まれてるのか マジ? ソース(ry しかし、嫌COINS連中はなんで必死なんだ?
第5世代プロジェクトをやたら嫌ってる人と同類でしょ
第5世代プロジェクトは面白いこと一杯やっていたんだけど、 ネガキャンみたいになって、後に繋げることができなかったね。 荘園、PIMOSなんて地味に続けていたら面白かっただろうに。
>>462 あいつ等は金と成果のために人のこと
陥れることばっかり考えてた奴等が
多くて人がある時期からついてこなくなった
だけだろ
なにいってんのかわからん。悪意だけ撒きちらされても電波か私怨にしか見えない。
>>443 >どこがどうパクりなんだよ。Javaで書いてあるコンパイラのどこが、
>Cで書いてあるGCCのパクりなんだと小一時間。
その生い立ちと、目的は一緒ではないが、メカニズムとしては良く似ている部分が有るのも事実
gcc と GCCの区別出来て無い人?
貴方が使うかもしれないgccコマンドはそGCCフレームワークのバイナリ生成物に過ぎない
そもそも、Javaで書こうがCで書こうが関係無いしw
GCC(v4)が単なるコンパイラの1実装って思ってるのも痛い
実際GCC(v4)の中身は、ある言語から、ある実行環境の最適化されたネイティブコードを
生成する為のフレームワークととして作られており、
対象言語、処理系に依存しない
依存部分は別モジュールになっている
某社CPUのハイパースレッディングだろうが、マルチコアだろうが、
MIPS派生CPUだろうが、昔なつかしVLIWだろうが対応が可能
>フレームワークになってるから、例えばSIMD対応最適化を、プラグインで
>作ることができたりする。PROあたりで発表されてるだろ?
巷に溢れるx86系のバリエーションは殆どがオプション指定で対応しているので
ハードコーディングのよう見えるけど、それはあくまで利便性とメンテナンスの為だけ
OSに対しても然り
GUIが付いていて、プラグインて名前にしないとだめですか?
>>465 当然だろそれにgccは仕様書を公開していない糞集団だし
GCCに高レベルな中間表現が導入されたのは最近 これってCOINSのパクリだよね
COINSの話題をするなと 先週言っただろ俺の話を聞け
472 :
デフォルトの名無しさん :2008/07/23(水) 19:19:15
Javaのソースをパースしたいのですが、出来合いのパーサはありますか? たとえばEclipseのパーサは外部から利用できないのかしらん。
JavaCCのcontribにいくつかある。
>>472 javac のパーサーなら Tree API から使える。jdk1.6以上必要だけど
COINSは悪魔
477 :
デフォルトの名無しさん :2008/07/25(金) 16:44:50
COINSは使うな
I love COINS.
ゴルァアア
関係ない所で荒れるからCOINSの話題は禁止ね。
「COINS禁止」じゃなくて「技術に関係ない話題禁止」だろ。
483 :
デフォルトの名無しさん :2008/07/27(日) 08:50:44
話題にするほどのものでもないしな。 禁止するまでもなく、全く話題になっていなかったものが急にこの状態だと、 自演を疑ってしまうな。
急に盛り上がったのは>422が発売されたせいでしょ
どうせ出版社の工作員だろ
佐々先生は神
COINSの何が悪いのか技術的観点からの意見が一個もないよね。
何が良いのかもないじゃないか。工作員がうぜぇ。
489 :
デフォルトの名無しさん :2008/07/29(火) 07:37:42
>>487 はげしく同意
ぜーきんぜーきんといわれても外からじゃわからん。
税金つかってるんだったらなおさら使ってやらないかんじゃないか
> 税金つかってるんだったらなおさら使ってやらないかんじゃないか 本末転倒だろそりゃ。 税金つかってるんだったらなおさら……というなら、 広く使われないといけない(広く使われるほど出来がよくないといけない or 広く使われるよう使いやすさ等を宣伝しないといけない) というのが普通の議論だと思うが。
税金とかどうでもいい。まずは使ってみて評価しないと始まらない。 いきなり「使うな」とか書くなら技術的な問題点をきちんと書け。
なんでCOINSアンチが湧いてるの? 両親でも殺されたんかな。
税金のムダ使いと連呼してる未踏スレの厨かもな
COINSって未踏関連なのか?
論文書ければそれでいいよ 論文書くのが仕事だから
>487 >489 >491 そこまで言うんだったら、まずは使ってみてレビューを書いてくれ。
「そこまで言うんだったら」って、明らかにおかしな主張につっこみ入れてるだけだろw
COINSに文句つけてるのは十分な予算を取れなくて逆恨みしてるダメ研究者なの?
どこで尋ねればいいのか分からなかったので、ここでお尋ねします。 ある正規言語Aの状態遷移図で、全ての受領状態から開始状態へεの矢印をいれただけでは、 A*を認識しない可能性があると本にあるのですが、そんなことってありえますか? A*以外の言語を受領してしまう可能性が(副作用的に)発生してしまうのは理解できるのですが、 認識しないというのがどうも理解できなくて、…
空集合を認識できないんじゃない? >499
>>500 すいません、「元の開始状態も受領状態にする」ってことを書き忘れていました。
ごめんなさい。
たとえば"あいうえお"という正規言語があって、これに対する(あいうえお)*というのを考えたとき、 空文字列も受理しなければいけない。 空文字列は受理状態からεの矢印を入れただけで必ず認識されるだろうか?
あら、かな〜り遅かった。すんません。
帰納法でA*を認識することを示せそうな気はするけど…。 Aをn回繰り返したものが認識されると仮定して、Aをn+1回繰り返したものが認識されることを示せばいいんでしょ? どこに穴があるんだろう?さっぱりわからん。
とりあえず空文字が答なんじゃないの?
>>501 はかなりおかしいと思う。
元々受理状態じゃなかった初期状態を受理状態に変えたりしたら、全然関係なかった文字列まで含む言語になってしまう。
506 :
500 :2008/07/30(水) 00:59:42
>501は反則だよ。 さすがにそれを「正規言語Aの状態遷移図」と言うのは苦しいと思う。 A*の状態遷移図はこんな感じだから、 --------------ε------------ | ---ε--- | | | | | | V | V (s) --ε--> (s A f) --ε--> (f) >501の条件を突っ込めば等価になりそうですな。面倒だから証明しないけど。
>>501 を許したら、例えば"abc"という入力で開始状態に戻ってくる遷移図を考えると、
abcがAに含まれない場合でも、(abc)*が修正後の言語に含まれてしまう
だから
>>499 で
> A*以外の言語を受領してしまう可能性が(副作用的に)発生してしまうのは理解できるのですが、
と言ってるんだろ
499はε遷移を追加した場合の副作用についてであって、開始状態を無理やり受理する話とは別のような気もするが
そういや、何の本に>499 & >501が書いてあったの?
511 :
499 :2008/07/30(水) 22:05:44
共立出版の計算理論の基礎(原著第二版)です。 P.99の欄外にそんなことが書いてあります。
とりあえず言葉の定義から勉強し直せ。
とりあえずCOINSには注意しろ
514 :
デフォルトの名無しさん :2008/08/02(土) 00:51:44
>>498 もしかしたら触れてはいけない、コンパイラ界の2chの鮫島事件みたいなものなのかもw
Lisp使いには注意しろ
>>515 なんでLisp?とりあえず叩けばCOINSから話題がそれるから?
consと勘違いしたんだろ
489が図星だったからアンチは消えたのかな
javaベースなのが気に入らないんだろ
.Netに書き直せばいいのか
いや、OOじゃないとダメだろ?この先。 つまり、 (ru
なるほど。Rubyで書くというのはおもしろいかもしれないね。
だからCOINS禁止って言ったのに・・・
で、CONSは未踏関連なの? そうなら全力で攻撃するけど
CONSのことをちょっと調査してきます 未踏関係者がいた場合報告します
なぜか叩かれるCONS。かわいそうなLISP。 いろんな意味でRubyの圧勝だな。COINSはどこいったんだろ。
COINSって科研費しかもらってないから まともな分類だと思うけどなぁ 税金ばら撒きプロジェクトとは違うと思うよ
やはり「税金の無駄遣い攻撃厨」だったか
530 :
デフォルトの名無しさん :2008/08/09(土) 00:34:48
最近Perl5.8でJavaパーサー書こうとしています。 ↓こんな感じです。 my $re_define = qr! (?{ moveToken(); }) #現在位置を進める (??{ $re_type })[ \t]* (??{ $re_var })[ \t]*; #正規表現の遅延評価 (?{ put(@tokens, getToken()); }) #現在位置-前回位置(つまり、上でマッチした部分)を保存する [ \t]* !x; 似たような暴挙に手を染めた方はいますか?
俺ならParse::LexとかParse::Yappから入るな。
恒例・パーサの話題禁止しようぜ
そんじゃあ、その後に続く「LISPなら〜」「Rubyのほうが〜」「Haskellが〜」も禁止しようぜ
534 :
デフォルトの名無しさん :2008/08/09(土) 09:46:25
1と2,2と3を近いものと感じるからといって1と3を近いものと感じるわけではない
3になるとバカになるからそれはない
すいません質問なんですが、簡単なコンパイラを作っているのですが、内部的に 字句解析 構文解析 意味解析 を分離して作ろうと思っています。 そして、それぞれの機能にあたる関数名を 字句解析→Lexer() 構文解析→Parser() と決めたまではよかったのですが、意味解析の適当な名称が思いつきません。 意味解析部はどう命名するのがセオリーなんでしょうか?
modern compiler implementation in Javaだと Lex、Parse、Semantic Actions、Semantic Analysisになってる
538 :
536 :2008/08/10(日) 21:59:00
ありがとうございます。 Semantic ActionsとSemantic Analysisはどう違うんでしょ。 「解析」なので後者の方が意味解析っぽいですが・・ LexやParseのように一文字では適当な命名はないんでしょうか。
annotateとか?
Analyzerでいいんじゃないの?
anilingusでいいじゃん
jiku_kaiseki() koubun_kaiseki() imi_kaiseki() 完璧!!!
anal
Analyzer.Lex() Analyzer.Parse() Analyzer.Semantic()
ワタシハテンサイ
ナンダト!コノオレサマ ヲ サシオイテ テンサイ ヲ ナノルトハ イイドキョウダ
Anal.Sex()
インタプリターもコンパイラと構造は一緒ですか?
インタープリター+(コンパイル時)部分計算=コンパイラ
最近は、どこまでがインタプリターで、どこからがコンパイラなのか 境目があいまいなので深く考える事ぁ無い
C言語で字句解析部を作っているのですが、webや参考書などに参考になるコードはありますでしょうか 「C言語 字句解析」などで検索はしているのですが、C言語で作った物はあまり見つからなくて困っています
lex/flexとかじゃだめなの?
処理系の作り方本で、Cで実際に実装してる本がいくつかあるので そのへんを見てみれ。 というか、今時、文字列処理をやるのにC言語はだるいと思うのだが。 積極的な理由がなければとりあえずLLで動くものを作ってしまったほうが いいと思う。
>>552 大学の実験の予習なんですが、実験の環境がCと決まっているので……
>>553 わかりました、本屋とか尼で探してみます
アドバイスありがとうございました
学生なら図書館のほうがいいかも。
実装寄りのコンパイラとかの処理系の教科書で、 いきなりLexとかyaccとか使って説明してる本って何なのかと思うわ。 まずはスクラッチでの実装例を示すのが一番わかり易いと思うんだが。 lexとかyaccがやりたいんならその後で説明つければいいのに。
オートマトンの説明終わったらパーサージェネレーターでいいじゃん。
トンカツの作り方を教えるために わざわざ豚の飼育方法から教える事ぁ無いやろ。 豚肉はスーパーで買ってくればいい。
Parserならまだしも、lexerなんて手で書く必要はない。 正規表現のmatcherなら、手で書いてみる価値あるけどね。
学習用なら一度は手で書くべきだろ
>>561 そうそう、理解するためにはそれが一番。
で、その後lex/yaccで完成させればいい。
「コンパイラの」学習がしたいだけならパーサなんてすっとばしていいだろ そこに興味がある奴はあらためて勉強すればいい
課題がPL1ぐらいの実装なら手で作ればいいし PHPとかを課題で実装するならlexer使わないと 終わらないと現実的に思う どこぞの3分クッキングみたいに 引き出しから既に煮た具材とかは出てこないんだし ある程度時間も考慮してlexer併用すべきだろ
一度手で書いてみればいいんじゃないか。 lispのリーダなんかはだいたい手書きだから見てみるのもいいのでは。
Lispのリーダは簡単だから手書きなんじゃなくて、 普通の字句解析生成ではまったく歯が立たないから手書き。 Toy実装でよいなら、PL1くらいのがお勧め。
そんなことないだろ。 lexで生成させたトーカナイザで切り出しても書ける。 リーダマクロとか言い出すと困るけどさ。
>>567 それキモイ実装にしかならないから
辞めてw
>>567 入力を再帰パース出来ないんちゃうか, lex/flex シリーズ?
lex/flex + 再帰できない yacc じゃ大幅に無理なような気が...
bison って, 生成されたパーサ再帰可能になるんだっけか?
リードマクロないなら簡単です。
571 :
デフォルトの名無しさん :2008/09/15(月) 15:52:41
.NETコンパイラを簡単に作れるコンパイラコンパイラみたいなのってないんでしょうか?
>>571 簡単にというのがどのレベルなのか知らないけども。
.NET 用の(.NET でも使える)パーサーとかなら検索したらすぐ出てくる。
.NET 自体がライブラリに CodeDOM とか LCG とかコンパイラ作成支援機能を持ってる。
最近は DLR も使える。
>>568 なぜ? 全く普通の使い方にしかならないと思うが。
>>569 なぜyacc? lex使うからといって必ずyacc使うと決まったわけでは全くない。
リーダが再帰すりゃいいんであって、リーダから呼ぶlexerが再帰する必要は
全くない。
言語処理って仕事ある?
575 :
574 :2008/09/18(木) 08:59:29
寝ぼけてエスパー書いてしまった 言語処理関係の技術を使う仕事ってどんなもんがあるのかな? マクロとかゲームのスクリプトとか? あと、コンパイラベンダーって凡人が就職できる場所ですか?
コンパイラベンダーなどと言うものはいまやないのと同然。
>>576 ,577
ありがとう
とりあえず黙ってドラゴンブック買ってくる
>>575 別にプログラミング言語を開発してるベンダに限らず、色々なDSLやクエリ言語は
至る所で開発されてるから、需要はゼロではないと思う。
IT土方万歳糞斜陽国日本のソースコードを ばら撒かれると大変迷惑
29日の日にでる本買う人いる?
著者 坂本千尋 著 出版社 ソフトバンククリエイティブ ISBN 978-4-7973-4762-3 発行日 2008年9月29日 価格 3,570円 (本体3,400円+税) 仕様 単色刷/B5変型判/492頁 分類 プログラミング(C言語) ソースコードを読み込み、バイトコードを生成し、仮想マシンで動かす、スクリプト言語の「翻訳および実行のための環境」の作り方を解説。
書名は省くのかw
シュールな回答だなw
書名教えてくれよw
これってゲームなんちゃらって本何冊か 書いてる人?
著者名で検索してみた
ゲームプログラミング書きすぎだろ
1. スクリプトエンジン プログラミング 坂本 千尋 (大型本 - 2008/9/27)
ttp://www.amazon.co.jp/dp/4797347627/ 2. ロールプレイングゲームプログラミング 2nd Edition 坂本 千尋 (単行本 - 2006/12/23)
3. Professionalゲームプログラミング 2ndEdition (C magazine) 坂本 千尋 (単行本 - 2005/9/28)
4. 3DRPGプログラミング (C magazine) 坂本 千尋 (単行本 - 2005/6/29)
5. アドベンチャーゲームプログラミング 坂本 千尋 (単行本 - 2002/6)
6. 花飾り (創作市場増刊 (6)) 坂本 千尋 アトリエ染花 (大型本 - 2002/6)
7. ロールプレイングゲームプログラミング 坂本 千尋 (単行本 - 2001/9)
8. Professionalゲームプログラミング 坂本 千尋 (単行本 - 2000/12)
9. アドベンチャーゲームプログラミング―美少... 坂本 千尋 (単行本(ソフトカバー) - 2000/4)
10. コサージュのおしゃれ―作りかたと楽しみかた 坂本 千尋 (単行本 - 1985/12)
この人の書籍はタイトルがシンプルで内容が非汎用的という共通点があると認識している
地雷確定と
アドベンチャーゲームプログラミングは昔買って読んだけど、当時の俺には有用だったよ。 すごく基本的な内容だったから、物足りなさを感じる人は居ただろうけどね。 でもなんか、急に分野が変わってるな今回。別にこの人が書く必要無い気がするんだが。
>>592 ゲーム向けスクリプトエンジン作成の知識の転用じゃね?
594 :
:2008/09/24(水) 16:57:03
500ページ近くあるんだな。題材考えたら本格的にやったらそれでも足りんかもしれんが。
まぁ糞本ですよ買うと公開しますよ 詳細は言えんけど
596 :
デフォルトの名無しさん :2008/09/25(木) 11:54:48
コサージュのおしゃれ、なんかワロタ
じゃあ買って公開してくれ
599 :
:2008/09/25(木) 20:00:35
仮装マシン! しかし表紙はかっこいいな。
おおー
>>589 で見たときはまだ表紙載ってなかったぞw
つかやたら凝ってるな、これで中身もちゃんとしてればいいんだけど。
この手の本で表紙凝ってるのは100%糞
> この商品を買った人はこんな商品も買っています > eb!コレ エビコレ+ キミキス
図書館で借りたコンパイラの本の例題がOberonでした・・
605 :
:2008/09/27(土) 20:49:53
COINSのコンパイラの本、そんなに厚くないのに高すぎ。 国家から金もらってしたプロジェクトなんだろ、安くして提供しろ!
頭悪すぎ
>>603 むしろ良本引き当てておめでとうといいたいなあ
説明が簡潔すぎて1字1句読み落とせないのが辛い本ではあるが
イラネ
著者のほかの出版タイトルを眺めれば大体中身のレベルは想像つくだろ
>>589 を見てもなお買う勇気のある人間はこのスレにはいない。
・・・と思いたかったのだが
買ってきたぞw マジで金ドブにしてたかんじ このスレに著者連れてきてくれね? マジで罵倒しないとダメなレベルだよw
ちょっとこれやばいよ C++スレの人に評価してもらおうよ
貼ってきたぜ
>>614 スレで何度も注意されてるにも関わらず無警戒に素人さん向けの本を
買った自分は罵倒しなくていいのか?
>615-617 スレに貼るな。自分で評価ぐらいしろ。 ヤバい言うならどこがヤバいのか分析ぐらいしろよ。
620 :
デフォルトの名無しさん :2008/10/01(水) 23:29:23
一応このスレは作者たんも見ているから、あんまり言うのはよそうよw
>>620 見ているならあんな内容の本出さない
絶対出さない。この板の人間なら知っていることを
本にして今更出すとかありえないし
何がひどいのかわからねぇ俺は初級者
>>589 をどう見ても、ゲーム方面のワナビ向けに濫造してる著者だろ
花飾りの人は偶然同姓同名らしいがw
同姓同名の別人だったのかwwww
というかこの流れ、同一人物がかなりの割合で頑張りすぎだろ。
内容についてのレビューは聞きたいところ 悪書と言うのならなおのこと
初心者むけなんだろうからお前らが読んだって意味ないだろ
>>628 めっちゃ酷いよ
flex/bisonの説明+糞コード
オナコード説明
boostの説明+糞コード
これだけで3800円も取るとか
何考えているのかもしこのスレ見ているなら
釈明してみろっていいたいね。
どうせ小沢見たいに質問無視で終了がいいと
だろw
初心者向けにはそういうのがいいのかもよ 俺も最初の頃は色んな書籍の糞コード読んで、ああこんなんでいいんだ、って思ったもんだ もちろん駄目だったけど
>>632 ソース見た?あの内容で金取るってありえないんだけど
>>633 見たが別におかしいとは思わなかった。
ソースはコメントが少なめだがコード自体は特にスパゲッティとかいうこともない。
サンプルの言語は配列と関数呼び出しぐらいまでしかないかなり基本的なものみたいだが、
ゲーム向けのスクリプトを作ろうっていうアマチュアなんかまでターゲットにした本ならこんなもんだろ。
繰り返しになるが言いたいことがあるなら何がマズイのかわかるように書いてくれ、
ありえないとか糞コードとか繰り返されても見てる人間にとって情報価値がゼロなんだよ。
>>633 なんで実装の話になるん?
自分で書かない気なら最初から買わなければよかったんじゃね?
そもそも"当たり無しくじ"を買って外れたと怒るのはおかしいと思うがな
赤○氏の本買った人と同じパターンか?
情報弱者が調べもせずホイホイ引っかかって怒る、或いは怖いもの見たさで買ったくせに逆切れ
しつこく実装の話出すのは前者か
たかだか3800円ぽっちドブに捨てたからってガタガタ言うな。 中身も確認せずに目次も判らない本を買った奴がマヌケなだけだ。 扱き下ろすならクソの理由ぐらい言え。話のネタにもなんねぇだろ。 まともな本が欲けりゃ素直に>6とか買うべきだな。
637 :
デフォルトの名無しさん :2008/10/03(金) 03:55:01
今時、ゲーム用途でコンパイラ作るなんてオナニー以外の何者でもない 組み込みならLuaとかSquirrel、Pythonでもいいし。 プログラマの欲求につけこんで需要ないところにあたかも必要かのように本を出す つまり、金稼ぎにすぎない
638 :
デフォルトの名無しさん :2008/10/03(金) 08:50:25
オナニーが悪いと誰が決めた!!!!!!!!!!!!!!!!!!!!!!!!
嘘を嘘と見抜くのは自分ひとりでできる。 コンセンサスは必要ない。 あるに越したことはないが、コストが高すぎる。 コスト気にしなくていいなら、オナニーも悪くないよ。
オナニー気持ち良いじゃん! ってか汎用言語じゃなくてDSLを作るとか普通に用途があるだろうになぁ…
>>637 Luaって結局プログラマが扱う範囲でしかなくて、もちっと簡便なDSL使うところに適用できないんよ。
HSPがあれだけ人気ということは、 簡易言語のようなものにも需要はあるんじゃないかな。 俺様簡易言語本ということで。
HSPの人気ってのは描画までの初期化とか覚えたくない人向けってことなんだと思っている プログラムで何かしたかった部分の手間は変わらないみたいだし。
自分の文章を金に変えられないやつが嫉妬して騒いでるだけにしか見えない。 くやしかったらお前の書いた文字を金に変えてみろw
本人乙 >644 と、とりあえず言っとこう。 というか、金貰っても軽蔑されるのは勘弁だな。 まあ、オルタネータにスポットライト落とした写真を「スクリプトエンジン」の表紙にする度胸も無いが。
いくら2chでもここ数レスの不毛さはtech板として如何な物か?
そんな愚問です
>>645 >金貰っても軽蔑されるのは勘弁だな
それはあなたの文章にお金を払ってもいいよ、と認めてくれるひとが既に居る
場合に、あえて選択肢として持ち出すのは格好がつくが、だれも金を払ってく
れる人がいない状況で言っても、やっかみにしかならないことをお忘れなく。
マスゴミが増産する文章なんて 結局文書的に問題なければ 事実や内容なんてどうでもいいからな 毎日、あかひなんか典型例だし
650 :
デフォルトの名無しさん :2008/10/04(土) 17:15:33
原稿用紙1枚あたり幾らで商売しているんだから、中身が薄くなるのはしょうがないだろ。
こと技術書に関しては、買わない理由を探す奴より、 とにかく買ってみる奴の方が成長する。これは確実。
確実ってなんすか 競馬の予想すか
こと競馬に関しては、買わない理由を探す奴より、 とにかく買ってみる奴の方が成長する。これは確実。
655 :
デフォルトの名無しさん :2008/10/04(土) 18:57:40
>>654 それが本当なら今ごろ競馬長者がわんさかいるなw
浮浪者にスチール缶
>>655 しかし
>>654 には競馬で儲かるとは書いてない罠。
とにかく買ってみて懲りて二度とギャンブルなどやらないと反省できれば
ある意味「成長」したといえるのかもしんない。
成長することは成長するんだろうけど、どれだけ投資してもトータルプラスになるまでは成長しないだろ。
659 :
636 :2008/10/04(土) 19:02:54
>652 >とにかく買ってみる 「読む」だろ。買うだけじゃ意味ないわ。 まずは目次だけでも良いから立ち読みで確認すべきだよな。騙されたくなければ。 それ以前に、>6みたいな実績ある本が既に挙がっているのにあえて地雷原に踏み込むのはなぁ。 ……そういや、誰かCompilers: Principles, Techniques, and Tools (2nd Edition) 読んだ? >650 作り手の都合なんてどうでもいいんだよ。読者にとって重要なのは『良い本かどうか』だろ。
660 :
デフォルトの名無しさん :2008/10/04(土) 19:32:35
競馬で馬券買って「成長」するとかwwwワロタ
コラム欄が青や緑の背景の本は失敗する確率高いなぁ
>>659 ある本が「騙し」かどうかを「自分で」判断できるのは、
十分に読み漁った人間だけだよ。
ていうか「買ったけどひどかった」というレスがこれだけあるのに
実際の書籍内の記述がゼロって時点で、何か興奮しちゃってる人が暴れてるのは確定じゃねえの?w
>>630 なんか、いま書籍タイトル知っただけの俺でも書けるエアレビュー(もどき)じゃん。
>>630 の説明から糞コードを抜いてオナコードを言い換えると
> flex/bisonの説明
> 作中のコード説明
> boostの説明
…結構良い本なんじゃね?w
>>630 の説明から説明を抜くと
> 糞コード
> オナコード
> 糞コード
つうか結局誰も読んでないだろ
俺もってるよさっき買ってきたけど このスレの評判と一致しすぎるほどの糞本だったぞ
もう地雷確定なんだからスルーしろよ
興奮しすぎw
糞本とか言ってるやつは何が悪いか説明しろ。
気になる本が出てたからスレ覗きに来たけど、 具体性のない感想ばかりで、 何が良くて何が悪かった本なのかさっぱり掴めないよ。
>>671 こと技術書に関しては、買わない理由を探す奴より、
とにかく買ってみる奴の方が成長する。これは確実。
>>671 「具体性の無い感想がある」んじゃなくて、「まだ感想が無い」んだよ。
誰も読んでないから。
坂本千尋本のスレはここですか. 部屋に「Professionalゲームプログラミング」 があったのでざっと眺めてみたけど、PNGの読み書き関数とか、 スプライト描画高速化のためのMMXをインラインアセンブラで書く話やDirectDraw でスプライト処理を書いてみたり する話が載っていてよさげなんですけど.確かにソースコードはコンパクトでエレガントというわけではないけど、 仕様変更などに対処しやすい平易な書き方ともいえる.てか、自分が仕事で作ってるソースコードもこの本と 大差ないレベルなので、少なくともこの本に関しては悪口を言う気はあまり起きないなぁ.昔の本だから内容が 少し古い(VC6が使われている)とかは、まああるけどね. 他の本は読んでないので知らん. 念のために言っておくけど俺は坂本じゃないので「キタ━━━━(゚∀゚)━━━━!!!! 本ww人ww降ww臨」とか 思い込みで騒がないように.
ホンニンキタ-
676 :
デフォルトの名無しさん :2008/10/09(木) 10:25:50
>>674 OK、大丈夫だ。ここ数日結構擁護レスが付いてるが、
アンチ君の方が糞糞言うだけで具体的な指摘も論理的な検証もできない、
というあまりにレベルが低すぎるおかげで、
それほど本人乙やら信者認定やらされてない。
679 :
デフォルトの名無しさん :2008/10/09(木) 13:30:27
擁護以前にまだ、感想がでてない件w
>>677 > ここ数日結構擁護レスが付いてるが
いやそんなん付いてないよ。
中身を語らないレス見て「読んでないだろw」って思うのは当たり前だし、
>>674 を除いて、誰も読んでないし、読む気も無いでしょ。
これは「馬鹿を叩いたらそれがアンチだった」という状態であって、「擁護した」は言わないよ。
せっかくだから誰かまじめに読んで評価してみない?
1. スクリプトエンジン プログラミング 一番だめな理由 糞スクリプトエンジン(笑)の設計概念や設計内容を一切説明していない ただ永遠とソースコードと関数なんかの説明だけがずらーーっと 書いてだけである。 この本を読んでも汎用的な記述や独自の言語拡張を自力で設計 実相できるような情報、能力は一切つかない 何よりもまずいのは、著者自身が自分の設計概念、思想を他者に 伝道できるレベルに達してないしそうゆう説明や記述がまったく見られない いわゆるデスマプロジェクトの詳細仕様レベルの情報しか書いていない
"1." とは何だ?"2."以降のレビューがまだ続くのか・・・? ぜひ尼のレビューに投稿して二次被害を最小限に留めてくれ
684 :
デフォルトの名無しさん :2008/10/10(金) 00:24:29
「延々と」を「永遠と」と書いている時点でダメレビューだな…。
いや、ネバーエンディングファンクションのことだろ
コードだけぱっと見で気になったところ。 ・C++ 使いとしては普通やらない auto_ptr の使い方。 void compiler::DefineFunction(const yy::location& l, int type, const std::string *name, CArgList *args) { std::auto_ptr<const std::string> name_(name); まぁ、bison との組み合わせ上しょうがないのかもしれないが。 ・参照カウンタ付きstring、って言っていいのかよくわからないカウンタ付き string クラス。 共用体に入れるからポインタ風クラスにできないというのはわかったけどさぁ。 ・努力するところを間違ってると思われる(明示的デストラクタの呼び出しとか placement new とか使いまくりの)固定サイズのスタック これ、アラインメントのこと考えたら動作しない環境があるんじゃね?
いまのところ
>>634 が一番まともな書評。
ていうか、へんにあおってるやつは、もっといいスクリプトエンジンの書き方ができるなら
具体的にどうまずいんのかを指摘するとか、適当なブログで自作のものを公開してからものを言ってください。
それすらできない書き込みはぜんぶ妬みだからスルーしたほうがいい。
>>687 が具体的な指摘をしているけど、単にC++の書き方についての指摘なのが
残念なんだよね。本の主題にたいしてこういった指摘がほしいところだよ。
作者必死すぎw
誤解させたのならすまん、ここは書評スレではないんだ
というか、目次一つも公開されていないようなクソ本なんて話題にするの止めようぜ。レスのムダだぜ。 >688 も、もし持っているんだったら目次をアップしてくれないか?
サンクス >693 5 ソースコード 6 boost::spirit というので激しく不安になるな。 というか、スクリプトの入門というのなら、BASICタイプ言語の作成とかCタイプ言語の作成 とか分散しないで、どっちか一つに集中すべきじゃない? 入門だったら、むしろ構文はシンプルなforthライクにして、エンジンの中身に拘るべきだと思うけど……
695 :
デフォルトの名無しさん :2008/10/11(土) 02:32:20
>>694 いや、だから、ちゃんとコンパイラのことを学びたい人向けの本じゃないんだってばw
作者のほかの本ミロ
とりあえず、ゲームなんかで使える即席コンパイラが作りたい人むけなの。
それだったらなおさらforth系だろ、常識的に考えて。 どこの常識だかしらんけど。 まあ、素人は変に見た目に拘るから、わざわざCとBASICなんて持って来たのかね。
>>694 立ち読みしたところ、LALRとLLの両方を触ってみようという趣旨らしい
あと仮想マシン部分も、スタックベースとレジスタベースを一応どっちもやってみたい
それ自体は悪くないと思うが、
逆に内容が拡散することにもなってるのでまあ一長一短か
今時ターゲット言語がForth風はないわw
パーザを手で書く時代じゃないし。
Tamarin tracingの中間言語はForth風だけれども。
>>550 Google ChromeのJavascriptエンジンv8は、
ソースを読み込んだら構文木で抱えて、
最初の実行でネイティブにコンパイルして実行。
中間言語はなし。ってスタイルだったな。
言葉を替えれば、構文木が中間言語(ただしこのまま実行しない)のJIT。
ちなみにv8のパーザはC++で手書きだったw
>>698 入門書でいきなり「今時」に追いつこうとするのは難しいんじゃないの
そこで、いかに難しいかを説明する人もいれば
難しいなんて嘘だよほら簡単だよみたいな人もいるわけだ
700 :
694 :2008/10/11(土) 13:59:06
>697 ほう、そういう趣旨か。それなら理解できるな。 でも、入門書なら説明する対象はできるだけ簡素なものにすべきという意見は変わらんけど。 forthそのものを題材にするかどうかはともかく、スタックマシン自体は勉強しておいて損はないし。
>>698 V8ってやっぱ構文木を介するのか・・・
ソースからいきなりネイティブコードに落とすってどこかで読んで
すげーって思った覚えがあるんだけど違ったか
>>702 accept(visitor)のとこって
visitorパターン?ダブルディスパッチ?
メンバ変数にプレフィックスとかついてないからこんがらがる・・・ でも、組み方自体はデザパタとか今風で読みやすいな
メンバ変数にはサフィックス"_"が付いてるじゃないか
設定してるフォントがまずかった(固定幅にIPAモナー)orz 正直すまんかった>google
>>704 正直読みやすい。
けど細かいとこ省いても5万行ある。
>>703 dispatchはl.1193。
SVN入れるか・・・orz
hg入れるか・・・
神様神様 ささっと解析しちゃってくださいよw
何を解析しろと
別に急いでないなら三ヶ月かかってもいいじゃん
ちなみに神様は何分ぐらいで解析してしまうの?
神様 解析 飽きた ポポ たいへん
まずクラス図に起こすサ行を始めてみた
もう飽きてきたぉ 誰か助けてぉ
じゃあ俺はワ行から逆順でいくお
>>719 とりあえずmain見っけたから
サンプル食わして解析していくさ
callグラフ作るとするか
ぐーぐる謹製か。ちょっと面白そうだな
謹製いうても会社ごと買収しただけ
V8っておいちょっと金出すから 今日から俺のモノになったからヨロってやっただけでしょ?
AnimorphicのStrongtalk直系って事になるのかな。 SunのSelfの実装技術の影響が強い。 Lars BakはもともとJava HotspotやStrongtalkやってた人だし。 Google CTOのUrs Hlzleが、Selfやってた人だから、みんなお仲間。 Smalltalk, JVM/Self, v8ってかなり人が共通している。
ちなみにStrongtalk由来のコードが、 Sunのcopyrightのままで含まれてますよ。 コード生成のところ。
なんかきめぇなぁw どうりでなんかきもいわけだ
なんかきめぇからなんかきもい ???
最大不動点で意味を定義する方なのでしょう。
>>724 SelfってJavascriptと同じでプロトタイプ指向の言語だよね。
実行時にオブジェクトのプロパティが増えることがあるから、
どっちでもシャドウクラスの実装技法が有効なんだね。
Virtual Machine Design and Implementation in C.C++ この本ってどうなんすか?
著者でググれ
某高専の図書館にドラゴンブックがあってちょっとワロタ
> 6. 花飾り (創作市場増刊 (6)) 坂本 千尋 アトリエ染花 (大型本 - 2002/6) > 10. コサージュのおしゃれ―作りかたと楽しみかた 坂本 千尋 (単行本 - 1985/12) 違うだろw
これは既出?
jolt2 が生成する機械語について - 言語ゲーム
ttp://d.hatena.ne.jp/propella/20081018/p1 > pepsi は Smalltalk に似たコンパイル言語で、C 言語へのトランスレータとし
> て実装されています。実行には gcc が必要です。
> jolt とは Lisp に似た言語で、実行時に動的にソースから機械語をコンパイル
> して実行します。jolt の関数は C で書かれた関数と互換性があり、C ライブ
> ラリのコールバックにそのまま使えます。jolt は pepsi で実装されていて、
> pepsi のライブラリオブジェクトを利用出来ます。
736 :
デフォルトの名無しさん :2008/10/22(水) 11:52:27
>>735 ブログの副題が「とあるエンジニアが嘘ばかり書く日記」ってとこが気になるんだけど…
過去の日記をあれこれ読めばだいたいわかると思うけど、 「嘘ばかり」ってのは韜晦ですね
gcc呼んでる時点で糞認定してあげよう
そういうもんでもない。
jolt のコード生成は gcc 呼んでないよ
gccって糞なの?
お前が糞だと思う限り糞は存在し続ける
>>574 仕事で困ってここにきてますよ
yacc/lexをほとんどさわったこともないのに
いきなりパーサなんて書けるんですか?
誰だって最初は初めてだ
>>744 便利な言葉だな
DQN会社で新人の尻を叩くのに使われていそうだ
男は度胸!なんでもためしてみるのさ
>>743 パーサの知識があればyacc,lexはタダの道具でしかないよ
当たって砕けろだ。
玉砕主義
欲しがりません
kinput2までは
754 :
デフォルトの名無しさん :2008/11/03(月) 18:52:44
会社の先輩にいい本だって言われたんだが。 ダメなのか?
この人のは基本の基本しか書いてないよ
ゲームエンジン屋で一生を終えたいなら好きにしろ。 処理系屋として上を望むならほどほどに参考にする程度に。
そうなのか、、、 流し読み程度にしておくよ
758 :
デフォルトの名無しさん :2008/11/03(月) 19:46:19
自作スクリプトを作成したいんだが、何から手をつければいいんだ?
仕様を決めることだろう。 欲しい機能を列挙しろ。 勉強は必要になった分だけすればいい。
760 :
758 :2008/11/03(月) 20:15:11
言語仕様はCでやろうと思っている シンプルだし。
スクリプトは文字列解釈とかあるしC++以上がいいと思うけど。 問題は文字コードなんだ。
762 :
758 :2008/11/03(月) 20:24:18
言語使用はCで作成はC++でやろうとしている いきなりOOなんて絶対無理だ
>758 まずはForth実装でも勉強したら? >761 UTF-8が素直でいいんじゃない?UTF-8も欠点あるけど、UTF-16とかShiftJISほどひどくないし。
ForthはForthで独特の癖があるから、ポインタも配列も構造体もないCとか そのへんが手頃だと思うけど。 生のハードウェアにアセンブラで実装するならForthもいいかなとか思わないでもないw
765 :
758 :2008/11/03(月) 21:15:56
>まずはForth実装でも勉強したら? これ、情報がかなりすくないのな >764 のようなものにするよ この後は何から手をつければいいんだ?
マジレスするとVCの中間コード眺めとけ
767 :
766 :2008/11/03(月) 21:26:24
妙な事言ってしまったww 混合モードだっけ?あれ見とくといいよ
768 :
758 :2008/11/03(月) 22:30:46
取りあえず、これ読むわ スモールコンパイラの制作で学ぶプログラムのしくみ
うはwsrymr
ん? まずい?
>言語使用はCで作成はC++でやろうとしている これでいいんじゃね?
>>772 じゃあCで書けばよくね?スクリプト作る意味あるの?
Cパーサなんて腐るほどあるから そこから先の話をしろよな
うわ。渡邊担先生のとこ403だよ
Cはプリプロセッサがないといまいち締まらない。やるなら込みで。 #defineの展開則にクセがあって意外とややこしいが。
むしろプリプロセッサは既存のものを流用しないか?
独立してるんだから好きにすればいいと思う。
1から作った方が面白くね?
その時間に別のもの作った方が面白くね?
なにを面白いと思うかは人それぞれ
むしろその時間があるならドキュメントの整備に割り当てたほうがいいと思う。 ドキュメントがダメだと開発者にとってもユーザーにとっても本当死ねる。 ...Pike v7.6 release 86リファレンスマニュアルを和訳中の人より。 あれ原文がクソで説明がチープなうえにいちいちくどい。orz
そういうレベルの作り物じゃないだろ。
で、これは誰が音頭を取るんだ?
「これ」?
788 :
デフォルトの名無しさん :2008/11/05(水) 22:55:44
あげ
>>789 typedefを扱えない未完成品ですな
盛り上がっているところ申し訳ない。 ちょいと、コンパイラの性能を測るためのベンチマークプログラムが入り用になりまして、 Cのソースコードの形で配布してる、ベンチ用に使えそうなプログラムを探しています。 SPECみたいにちゃんとしたものでなくてもいいんですが、 とにかく数を沢山(100くらい?)揃えたいと思ってます。 誰か、それっぽいプログラムが沢山ある場所を御存知でないでしょうか?
>>790 typedefは、レキサの返すトークンにも影響をおよぼすから、
>>789 みたいなtemplate実装だとなかなか難しいものがあると思う。
レキサが単なる識別子じゃなくて、型名であること返さないと
うまくパーズできないCの構文はイヤらしい。
794 :
791 :2008/11/07(金) 01:06:16
>>793 おお、早速ありがとうございます。
そうか、日本語でググってたから駄目だったのか。
flexに関する質問です。 パースしている各行を保存したい(変換後のコードのコメントに変換元のコードを出力したい)のですが、なかなか良い方法が思い付きません。 '\n'を読む箇所で,strdupでコピーするという方法は,入力バッファを直接さわる事になり実装依存ですのでできれば他の方法を取りたいです。 自分でバッファを用意していちいちyytextを追加していく方法は、全てのルールにその記述をしなければならないのが嫌な感じです。 何か良いアイデアがありましたらよろしくお願いします。
行番号だけとっておいて、行の中身が必要なときに別途照らし合わせればどう。
YY_INPUTを行指向のものに置き換えて、保存された行を参照する。
ターゲット言語にも依りますが、 パーザが先読みすることやアクションのタイミングの関係で、 式が複数行に分かれていたりすると結構大変です。頑張って。 エラーメッセージ頑張りたいgccのパーザは手書きです。 Bisonの吐いたコードが元にはなっているけれど。
保守
>>799 v8も手書きだね。
「こんなメソッドないよー」とかちゃんと行番号と共に、
f.test()
(shell):12: TypeError: Object 0 has no method 'test'
f.test()
^
教えてくれる。
GLRパーザっていいものなの? elkhoundとか楽しそうなんだけど
803 :
デフォルトの名無しさん :2008/11/18(火) 11:14:33
bisonについて質問です。 YYERROR_VERBOSEを指定した際にエラーメッセージにたとえば "unexpected TYPE_NAME ..." とか表示されますが、これを "unexpected type name ..." などのようにしたいのです。 yytname[]を書き換えれば良い事は分かるのですが, シェルスクリプトなどを使わずbison内からこれを行う方法はありませんでしょうか?
804 :
14 :2008/11/24(月) 17:47:28
いわゆる手続き型言語の処理系作っています 戻り値を持つ関数の定義で、 ちゃんとreturn 値;しているかどうかを調べようとしてハマっています int hogehoge(int a) { if ( a < 5 ) { return 0; } } これをコンパイルエラーにしたいです int hogehoge(int a) { if ( true ) { return a + 5; } } これはエラーにしたくないです 制御構文としてif/switch/whileがあるのですが 途中でbreakとかcontinueとかやられると超頭痛いです こうやるのが常套手段みたいなのってありますか?
100%完璧にやるのは不可能。 ほどほどのところで満足しとけ。
>>806 はただの馬鹿だから無視しておk。
>>805 末尾コンテキストという概念がある。
末尾コンテキストで値を返す作用があればおkとする。
if (true)みたいなケースをコンパイラの方針として許すなら
定数式の畳み込みをきちんと行ってから判定させる。
例えばこのケース int わはー(int むすー) { while (むすー) { if (むすー) return えへー; } } 通常while内は末尾コンテキストではないのでエラーだが、 むすーが定数式に展開できる時、真ならおk、偽ならエラー となる。
lispスレでもそうだけど、わはーむすーは極度に気持ち悪いからやめて。。。
識別子なんて単なる記号だろ
何か知る前は平気だったがググった後じゃもうだめだわな
>>809
そうなんだよ…
最高だろ・・・
わはーまでなら許すが、 むすーやちょいあーが出てきたら受け付けない。
そういう人多いよね でもhogeとかよりは人間味があっていいじゃない
人間味というか、狂おしい精液の匂いがしそうなのがやだ
アイドルの名前が出てくるのと同じ むしろhogeでは何がなにやら判らない 興味を引かない
引くわ、興味の以前にw
>>807 いや
>>806 の言っているのが
そんな無茶な話じゃないのはしってるだろ?
> 定数式の畳み込みをきちんと行ってから判定させる。
この辺の塩梅。
>>807 1ステートメントごとにチェックしてくんですよね
とりあえず定数条件は無視で、ベタベタにやってみました。
簡単にテストしてみましたが、動いているようです
テストパターン作るのがこれしんどいですね
・whileの中のswitchの中のcontinueはwhileのcontinue
・switchではラベルごとの結果をマージする必要あり(ifも同様)
あたりでハマりました
なんか遠回りしている気がしないでもない・・・
もしかして「未初期化の変数の参照」を洗うのも似た処理になりますかね?
>>820 データフロー解析に近いパス解析をする必要がある。
>>805 二番目の例をエラーにしたくない理由がわからん。
何のために?
>>821 うう、ググってみます・・・
>>822 流儀かもしれませんが、
コードを一時的にコメントアウトしたりもどしたりするのにこうする場合があるのと
(そんなのやるなよ、というのはナシで・・・私以外の人も使うので)
プリプロセッサマクロ展開の都合でこうなることもあるかなあと
定数畳み込みは単純ケースはすでにやっています
whileなんかでは無限ループになるのでその検出もできますね
つかこれらって意外どころじゃない大変さなんですが、
皆さんのオレオレ言語処理系はここまでやってます?
>>822 むしろ、二番目をエラーにする根拠はないだろう?
>>823 ループや再帰のある場合に、
頑張って近似値を得ようとしなければ簡単。
頑張るのであれば、データフロー解析で、
最小不動点演算する必要がある。
他には、
int x;
if ((y % 2) == 0) {
x = -1;
} else if ((y % 2) == 1) {
x = 1;
}
こういう代数的な理解するかどうか。
>>825 にあるのを全く無視するとすると、
基本ブロックの結合グラフの全パストラバースして、
初期値false、定義されたらtrue、合流点ではorすれば、
終了点で初期しないパスがあるかどうか分かる。
>>824 たまに意図せずやるから警告ぐらいはほしいな
>>826 問題は、単にエラーであることを知るだけのために、コンパイラの最適化パスっぽいフロー解析までするのはどうだろう……ってあたりだな。
>>827 でもさ、const指定されたc++のコードでもマルチスレッドで非constなメンバ関数呼ばれたりすると
途中でifの条件変わったりすることあるからダメじゃない?(元の関数は引数評価だけどさ)
int hoge(int a) { while ( true ) { if ( a < 10 ) { return a + 10; } else { continue; } } } これが(チェックで)エラーにならなくなりました! 日記っぽくてすみません...
>>826 やはりその基本ブロックの取り出しが必要ですよね
構文木のままやるのは間違ってるのかなあ・・
>>828 ええ、そうなんですよ
ちょっと前に書いた「未初期化変数の参照」チェックも
ともすれば最適化の前準備と似ているわけです
でも、最適化しなくてもコード生成ってできるじゃないですか
無駄多いですけどね
つまり今
字句解析→構文解析→(returnなどの)チェック→コード生成
とやろうとしているのですが、
チェックは構文木上でこねくり回せばいいやと思っていたのに
どうも違うなあ、なんでだろうなあと悩んでいる次第であります
あ、遠回り自体はキライじゃないです。
>>829 その場合、このチェックでは変数として取り扱うんでしょう
>>825 でいうようなものは、
代入・参照が確実に把握できるローカル変数ならではの話だと思います
>>831 構文木のままだと、break, continue, gotoなどの、
構文木構造とコントロール構造が同じでないもので苦労する、
あるいは含まれる場合は諦める必要がある。
ラムダ式に変換しちゃえー
>>831 > どうも違うなあ、なんでだろうなあと悩んでいる次第であります
中間表現をただ一つしか考えずそれで全てやろうとしているから
無理がきている。
lispで仮組みするといいよ。 考えられるケースの断片を即実行コードに落として動作確認できるから C言語とかで直接組みながら妄想するよりは圧倒的に早い
つーか最初からlispでやってれば そもそもこんなスレにお世話になりに来ることもない まずlispやんなさい
もちろんschemeでもいい lispと言ったらschemeも含まれる どこかのスレでlisp=CommonLispだなんて言い張る馬鹿がいるが そんな事はここでは重要ではない こんな補足をいちいちしなければいけないのは、その馬鹿のせいだが
うぜぇよ
グラフ探索ならハッシュテーブルを使いやすい言語がいいな。
840 :
デフォルトの名無しさん :2008/11/29(土) 16:51:34
スレ違いなのですが質問させてください 今C言語を勉強してて ソースファイルなんかの書き方は覚えてみたのですが コンパイルの仕方がわかりません、 どのようにすればいいのか具体的に何方か教えてもらえませんでしょうか? お願いします
いやです
スレ違いとわかってるなら聞くなよ
845 :
デフォルトの名無しさん :2008/11/30(日) 09:18:51
847 :
840 :2008/12/07(日) 01:42:56
すみません、、ありがとうございます。
売れるのか、それ?w
Whitespaceって、外見が不気味なだけで 中身はごくマトモだったような記憶が
著者は星のウイッチの人と同じなのか?
esolangはもはやアイデア勝負だから、 人に教えてもらってどうこうなる問題じゃない気もするがw
rubyでの実装の方が主眼らしい。> 教えて貰ってどうのこうの
変態言語の紹介だけじゃ、ごくごく特殊な層にしか訴求しないだろうし。
しかしまぁ、よくこんな超絶ニッチな書籍出す気になったな〜
>>850 確かbrainf*ckと同じだよ、使う記号が違うだけで。
>>857 whitespaceは数値を直接扱えるよ
4ビットマイクロコントローラみたいな命令群になっていてる
bfはまんまチューリングマシンだけどwsは表記が変なだけのcaslという感じ
バルバルバルバル
物を作ろう、という気分が広がってるのかな。いい傾向かと。 この勢いでScheme手習いとか復刊しないかな。スレ違いだが。
俺おんにゃのこの 状態繊維を制御したいぉ
863 :
デフォルトの名無しさん :2008/12/19(金) 09:35:48
EBNFのBNFが載っているURLがあったら教えてください。 よろしくお願いします。
865 :
デフォルトの名無しさん :2008/12/19(金) 14:27:14
>>864 BNFをパースできるようになったので、それを基礎にしてEBNFをパースしたいと思います。
最終的にはABNFなどにも取り組みたいと思いますが、もっと単純なEBNFから始めようと思います。
集合操作にはデータベースライブラリを使いました。
もっと使いやすく出来るはずだと考えています。
866 :
デフォルトの名無しさん :2008/12/19(金) 14:35:58
いま使えるのはもっとも単純なBNFのみです。 イプシロンと連接は使えますが、選択は使えません。 選択の代わりに、選択のある数だけ同じルール名でルールを書きます。 <A> ::= <B> | <C> "literal" の代わりに <A> ::= <B> <A> ::= <C> "literal" と書くということです。 この状態からブートストラップして、もっと多くの(E)BNFを読めるように したいということです。 そこで、ごく単純な改変しやすいBNFがないかと考えた次第です。
えーと、書いたBNFのパーザは、パーザジェネレータじゃないから、
BNFで書いたEBNFの文法があっても、EBNFのパーザは書くしかないよね?
>>866 の「読める」というのか文法のparseなのか、
それとも与えられた文法の受理器が語を受理することなのかはっきりしない。
もしかして求めているのは、EBNFの文法じゃなくて、
EBNF→BNFのコンパイラかな? > bootstrap
(A) := X where (* A.length > 1 の時しか変換は必要ない *)
X := A
A | B := X where
X := A
X := B
A? := ε | A
A+ := X where
X := A X
X := A
A* := (A+)?
868 :
デフォルトの名無しさん :2008/12/19(金) 15:55:58
>>867 作ったのはパーサコンビネータです。
非終端記号へ還元するときにメソッドを呼び出します。
メソッドの中身は自分で書きます。
EBNFのBNFをパーサコンビネータに入力すると、クラスのひな型ができます。
BNFを読むパーサコンビネータはすでにあるので、これに手を加えることで
EBNFを読むパーサコンビネータが出来上がるという寸法です。
そこでEBNFのBNFが必要というわけです。
自分ででっちあげてもいいのですが、すでに使われているものがあればと
思った次第です。
この手順を繰り返すことで多くのEBNFを扱いたいのですが、自己記述的な
EBNFでは無理というわけです。
ブートストラップをしたいのです。
> そこでEBNFのBNFが必要というわけです。 ここが良くわからない。 BNFあっても結局手で書くことは変わらないから、 ブートストラップにならないんじゃ?
870 :
デフォルトの名無しさん :2008/12/19(金) 16:19:58
>>869 それについて明快な答えを出せば、EBNFのBNFを出していただけますか?
いいですよ。簡単だから。
872 :
デフォルトの名無しさん :2008/12/19(金) 17:25:46
>>871 パーサジェネレータの本体はデータベースです。
データベースに生成規則を詰め込むことができれば、あとはすべてを
使いまわせます。
ただそれだけのことです。
じゃはやくBNFください。
パーザジェネレータがあるわけね? rulr = alt # alt = comp ( '|' comp )* alt = comp alt1 alt1 = ε alt1 = '|' comp alt1 comp = term comp = term comp comp = term '*' comp = term '+' comp = term '?' term = '(' alt ')' term = var term = literal ひとまずこのくらいでどう? | () * + ?しかないけれど。
874 :
デフォルトの名無しさん :2008/12/19(金) 18:01:41
なぜ急に取引が始まって罵り合いになったのかわからん
>>875 俺もわからんかったw
でも
>>876 を見てレスをしなくて正解だったわ
掲示板を勘違いしているとしか思えん
BNFでlexで処理する部分とyaccで処理する部分をどう分けたらいいのでしょうか。 たとえば、普通はlex側で整数というトークンを作ってyaccで処理するけれど、 lex側で数字というトークンを作ってyacc側で 整数:数字|数字 整数; という定義をしてもいいような気がするのですが。 (前に1回つくったときはconflictがおきてうまくいきませんでした) どちら側で処理するかという基準があるのでしょうか。
>整数:数字|数字 整数; 整数より自然数のほうが適切でした。 例なんで許してください。
>>880 基準は特にないが、なるべく lex 側に寄せた方がいいというのが俺の意見
理由は、lexの方が文法クラスが小さいから、(一般的論としては) 処理が速い (はず) だから。
lex:正規言語
yacc:文脈自由文法
>>881 ありがとうございます
経験とある程度の勘は要りそうですね
最近は、大文字から始まったら〜、 ;がなくても改行があったら〜とか 字句か構文かややこしいのが多いね。 Cのtypedefとか。
セミコロンなしをちょっとでもやると、ありの環境に行った時に忘れること多い。 無い方が自然なんだと思う。
>>883 たとえば
> ;がなくても改行があったら〜とか
これは sh がそうで、結構古いものだと思うけど。
句読点orピリオドがないと文が読みにくくなるのと同じで ; が無い方が不自然
↑ それは慣れの問題。 それしか知らない世代、増えたな・・・
自分の知ってる範囲だけが、この夜中の全てだと思ってるよね。 java・C言語系の言語しか知らないヤツは、それ以外の言語を認めようとしない。 井の中のかわず。
>>884 けど;入れなくていいだけじゃなくて、
ここは改行を入れては駄目って言語もあるからなあ。
Javascriptで、
return
(式);
とか。ややこしくなっただけだ。
> ありの環境に行った時に忘れること多い。
はちゃんとエラーになることがほとんどだと思うけれど、
上の例でwarning出そうとすると、
構文解析部がかなりややこしくなるね。
890 :
889 :2008/12/23(火) 11:30:59
オフサイド+文区切り記号なしは自然だと思う。 Javascriptは中途半端。
Javascriptの処理系は手書きが多い。 v8, tamarin, spidermonkey, (KDE) embeded全部手書き。 Pythonは半自動生成。インデントはtokenizerが処理。 $(PYTHON)/Grammer/Grammerには、 NEWLINEやINDENTがtokenとしてルールに登場します。 けどかなり整理されていてルールとしては綺麗です。 オフサイドと併用なら処理しやすい感じ。
区切り記号なしは、その代りに 改行が区切りになっちゃうとか、 インデントでブロック切れちゃうとか、 予約語が増えるとか、 なんらかの別の制約がかかるだけだしなぁ。 セミコロン1個で文が区切れるなら安いもんだと思うんだけど。
gccも昔はbisonでparser生成していたんだけどなあ… いい警告出そうとするとどうしてもな。
gccのc-parser.cはbisonが出力したのを元に、 手書きしたという変態的なもの。 ちなみにbinsonはLALR(1) automatonをXML形式で出力できます。
895 :
,,・´∀`・,,)っ-●◎○ :2008/12/23(火) 15:37:45
xbyakをもっとコンパイル時にエラー・警告出るようにしたい アレ引数チェック甘いから
ダンゴさんパネェっす
ダンゴさんの貴重なコメントが読めるのはこのスレだけ
いや、他でも読めるぞw
勘弁してくれ クロック数計測スレあたりにでも閉じこもってて欲しい
パネェ
そこいくとか、最近流行りのパーサコンビネータとかどうなんだろう? 理論的にきれいだから関数型言語系の人は大喜びなんだけど、 複雑な文法+丁寧なエラーメッセージっていう時代の流れに逆行している 気がするんだが。 をまえらどう思うよ
パーザコンビネータは、どっちかというと、 パーザフレームワークの中にエラー処理を埋め込むのが 得意なフレームワークですよ。モナドでエラーを処理してしまうので。 実際、Haskellのparsecは、エラーの起った行の表示程度は、 ライブラリを普通に使えば、何もしなくても出来てしまいます。 「expecting 'then'」とか。 "Predictive parser combinators need for values to report errors" "Direct Style Monadic Parser Combinators For The Real World" この辺りの研究の成果です。 一度、ドキュメントに付いている例を入力して実行してみては?
まあ手書きの再帰下降パーサみたいなもんだからねえ。 柔軟性はある。
その代わり左再帰はちまちま除去する必要がある
今 Mach-O の勉強してるんですが、分からないことが1つあります。 relocation_info の r_extern が 0 だった場合に r_symbolnum が section 番号になるという話なのですが、 この時、確かに再配置の必要なアドレスの位置は分かるのですが、 どこへ再配置すべきかという情報がどこにあるのかが分かりません。 とりあえず __jump_table の位置と symtab の nlist に並んでる順番とは異なるようで、 でも n_un.n_strx の順番でソートするといい感じになっているようにも見えて、 ただ、定義されてるけど使われてないシンボルは除外されているようで。 どこへ再配置すべきかという情報はどうすれば得る事ができるのでしょうか?
自己解決。 dysymtab_command にありました。 てっきり名前から .dylib 用のものと勘違いしてました。
既に解決しているみたいだけど、 $(OpenDarwin)/src/cctools/misc/redo_prebinding.c 辺りが参考になる。nm.cも。 もしまだ読んでなければ「Mach-O Runtime Architecture」も一読を。
909 :
デフォルトの名無しさん :2008/12/30(火) 20:03:49
今 yacc の勉強してるんですが、分からないことが1つあります。 shift - shift conflict というエラーが出るのですが、どこを直せばいいのですか?
>>908 Mach-O Runtime Architecture の方が
Mac OS X ABI Mach-O File Format Reference よりも詳しいみたいですね。
ありがとうございます。
911 :
908 :2008/12/30(火) 20:30:24
どう使うかってところに焦点当ててるドキュメントだからね。 redo_prebinding.cのソースもいいよ。
913 :
デフォルトの名無しさん :2008/12/30(火) 20:58:08
>>912 すいません。
Shift同士で衝突する状況がわからないっていう質問です。
最終的な状態数が増えるだけで、その場で衝突することは
ないのではないかと思いまして。
わかりずらくてすみません。
shift-shift conflict って初耳なんだけど、一体どんな文法を書いたの?
915 :
デフォルトの名無しさん :2008/12/31(水) 06:59:49
初耳ってレベル低っっっ! ググったけどそんなの見つからないとか?
このスレは低能が知ったかぶって質問に質問を返すスレです。 > 一体どんな文法を書いたの? 文法関係ないだろw
>>909 参考にしたいので「shift - shift conflict というエラーが出る」例を教えてください。
918 :
908 :2008/12/31(水) 10:04:27
shift/shiftってconflictしてないじゃんw 先読みしろよw
919 :
デフォルトの名無しさん :2008/12/31(水) 11:09:45
うわっ!先読みしろよwだって! 恥ずかしっ!!!
ageまくってる馬鹿は何が目的なんだ?
スルーしろよ
冬だなあ
shift-reduce conflict と reduce-reduce conflictはあるけど shift-shiftコンフリクトは存在しない であってる?
なんで最後だけカタカナなんだ俺w まぁそこはスルーしてくれ
まあLR系のパーサの話をしてるなら、shiftってのは入力をスタックに入れるだけだしな。 2通り以上のshiftができるって意味わかんね。
926 :
デフォルトの名無しさん :2008/12/31(水) 16:58:24
> 2通り以上のshiftができるって意味わかんね。 2チャンネルのレベル低下は深刻。
shift-shift conflictは聞いたことないな
ASTからVMの命令の列に直すやり方がわからない ツリー構造から単純なリストに意味を保ちながら直すなんて本当にどうすりゃいいんだって話だ 簡約化の為の公理を与えろという事なんだけど、破綻しない公理なんてどうやって考えるんだろう
>SSA変換,CPS変換,
SECDむずいっす助けて
最も単純な仮想機械の一つだぜ!頑張れ! というかわからんとこを聞けば?
SECDってどれから読めばいいのですか? 自分も初めてみたいのですが
原論文は古いんだよね。あれオンラインになってたっけ? 原論文よりこっち読めというおすすめがあったら知りたい。
コード読みたい人はLispMeのsrc/vm.cはどうだろうか。 Cだし、読みやすいし、コメントにSECDの遷移ルールが書いてある。 LispMeって名前だけどSchemeだから継続もある。 Rubyみたいに継続ある言語をやろうとしている人はお勧め。 SECDは凄く分かりやすいから。
解る解る詐欺ですね解ります。
Xtal復活か?
blog見たらむっちゃ謝ってるw
>>936 switch-interpreterだね。
汚かちゃんが言ってる言語中間子って何?
941 :
ボーア :2009/01/08(木) 23:49:41
きみはそんなに新しい粒子が好きか?
祭り厨は自分のスレに帰れ
みなさん、はじめまして。 言語処理系のMLに入会したくメールをさし上げます。 豊島経営事務所の岡田と申し上げます。 土谷様よりこのMLのご紹介を頂きました。 外国語は基本的に苦手なのですが(笑)、コンピューター言語はどうやら私に優 しい(易しくはない)ようです。 プログラム、システム開発を行ううえで、ときに翻訳に近いプログラムを組んだ りもします。これまでには何千ものHPの英文上から特定の単語条件を絞っていく プログラムを作った経験があります。 これもなにかの縁ですので、どうぞよろしくおねがいします。
944 :
デフォルトの名無しさん :2009/01/11(日) 06:29:07
>>940 言葉を最小単位に切り分けていきます。
すると最後に複数の原子という状態になります。
これを仮に形態素と呼びます。
この原子と原子の間には確率的に存在する各要素を結合する何かがあります。
この何かを仮に言語中間子と呼びます。
この言語中間子を確定することは様々な問題を解くことと同じです。
言語中間子の定義は言語の処理において数学的な基礎を形成します。
ということじゃないか?
今適当に考えただけなんだけどさ。
豊島だと・・・!!!
言語中間子は接続詞のことさ
普通にメタ言語とかオントロジーとかでいいんではないかと
948 :
デフォルトの名無しさん :2009/01/13(火) 20:46:18
半固定パイプラインに対するスケジューラーってどういう方式で実装すればいいんだろう。 一部だけ動的なシステムなんだけど、うまくスケジュールしたい。 ちょっと考えたんだが、結局コンテキスト切り替えコストと応答速度の兼ね合いに落ち着くのかなぁ。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
950 :
デフォルトの名無しさん :2009/01/14(水) 15:19:28
LRで還元した記号は次の入力になりますよね? この次の入力になる記号って普通どこに置くものなんですか? 次の入力専用に非終端記号型の変数を用意するもの?
>>950 なりません。
次の入力(移動で得られる記号)はあくまでも終端記号列でできた入力記号から取られます。
還元して得られた非終端記号はどこにも保存されません。
スタックされたLRの状態遷移表の状態そのものがそれまでの履歴を表しているからです。
LRの説明で分かりやすくするために状態と一緒に還元された記号も入れることはありますが、
本質的なものではなく本来入れる必要はないものです。
「入れる」は状態スタックにプッシュするってことね。多くのLR構文解析系はスタックを使って状態記号を保存するので。 LR構文解析は状態記号が入ったスタックのトップの状態と入力記号列の最初の終端記号からだけで次に行うべき動作を決定する。 その動作が移動なら入力から一つ記号を取り出し構文解析表から次に移る状態を引いて状態スタックにプッシュする。 還元なら生成規則に従って状態スタックから特定の数だけ状態をポップして、 その時の状態スタックのトップの状態と還元された非終端文字で決まる状態をプッシュする。 この時にだけ還元された記号が使われるが後から使ったりしないので特に保存する必要はない。
953 :
デフォルトの名無しさん :2009/01/14(水) 18:07:01
>>952 だとするととてもありがたいのですが、それほんとに信じてもいいんですよね?
LR構文解析機を作ったことがあったうえで言ってるんですよね?
955 :
デフォルトの名無しさん :2009/01/14(水) 18:21:41
ちょっと読み返すと失礼にあたる書き方に見えてきました。
どうもすいません。
>>953 をちょっと補足します。
コンパイラIの286ページ図4.39を参考にします。
ここでI0からI1へ遷移するためには非終端記号Sの入力が必要なのではないか?
と考えたわけです。
逆に終端記号のみから次の遷移先を決定できる項集合について考えると、
循環する文法記号がある場合、永遠に展開し続けねばならず、終端記号のみからなる
gotoグラフの作成は不可能ではないかと考えたのです。
これを可能にするには、goto表の入力となる非終端記号を何に置き換えればいいのでしょう?
よろしくお願いします。
相談に来ておいて相手に文句たれる奴っているよね。 なんで相談する気になったのかいつ見ても不思議
957 :
デフォルトの名無しさん :2009/01/14(水) 18:23:05
>>954 さんも
>>952 さんの考えを裏付けるってことですか?
私はドラゴンブックを見て考えていたので、最近の事情は知らないのです。
よろしくお願いします。
>>957 裏づけがほしいんだったら、相応の対価を払って専門家に会って聞くべき
構文解析系が入力記号列と状態スタックから構成されている場合、 状態スタックには最初に初期状態0がプッシュされている。 構文解析動作は、入力記号列の先頭の記号と状態スタックのトップ状態を見て、 対応する状態遷移表の項目からその動作を決定する。 移動なら、入力記号列の先頭記号を消費し、指定の状態を状態スタックにプッシュ。 還元なら、指定の生成規則の右辺の記号数だけ状態スタックからポップし、 その時の状態スタックのトップ状態と生成規則の左辺とで決まる状態をプッシュ。 受理なら、正しく構文解析が完了。それ以外はエラー。 構文解析系はこれだけで動作する。還元された非終端記号はそれ以降の動作に出てくることはない。 例えば、数と+を終端記号、式を非終端記号として、 (1) 式 ::= 式 + 数 (2) 式 ::= 数 のような生成規則に対して、+は左結合的とすると、 状態0:入力記号が数なら移動し状態1、還元されたものが式なら状態2 状態1:有無を言わせず生成規則(2)によって還元する 状態2:入力記号が+なら移動し状態3、入力が終端に達していたら受理 状態3:入力記号が数なら移動し状態4 状態4:有無を言わせず生成規則(1)によって還元する のような状態遷移表が作られる。 状態スタック:0|入力記号列:数+数+数 (0と数で状態1移動) 0,1|+数+数 (1と+で生成規則(2)による還元、状態を1個ポップし0と式なので状態2をプッシュ) 0,2|+数+数 (2と+で状態3移動) 0,2,3|数+数 (3と数で状態4移動) 0,2,3,4|+数 (4と+で生成規則(1)による還元、状態を3個ポップし0と式なので状態2をプッシュ) 0,2|+数 (2と+で状態3移動) 0,2,3|数 (3と数で状態4移動) 0,2,3,4| (4と終端で生成規則(1)による還元) 0,2| (2と終端で受理) で、受理される。
960 :
デフォルトの名無しさん :2009/01/14(水) 19:11:39
>>959 どうもありがとうございます。
よくわかりました。
お礼に私に出来ることはありますか?
>>955 「コンパイラIの286ページ図4.39を参考に」できないからその内容はよく分からないけれど、
LR項の集合族間の状態遷移図とLR構文解析系の状態遷移表による動作とは別物。
LR構文解析系の状態遷移表を構成するための理論的裏づけがLR項の集合族間の状態遷移というだけであって、
実際に構文解析を行うに当たって非終端記号を入力記号として記録する必要はない。
もちろん、次の状態を決定するために、ある1動作の範囲内で非終端記号は必要になるが、それだけ。
そして、その必要な非終端記号は還元時に定まるもので入力として記憶するものではない。
>>960 別にないよw
構文解析関係は理論だけでは取り付き難いから、
小さな系でもいいから実際に動作を手で追いかけながら見ていくと理解が進む。
LISPやれば構文とかどうでもよくなる
推敲せずに書いたらちょっと不要なことまで書いてしまった。
>>959 の「+は左結合的とする」必要はなかった。
生成規則の定義だけで結合性を指定しなくても衝突は起きない。
>>963 構文解析とかガキのやることだよな。
その先を見ろよ。
おれのちんこなめろよ
構文解析は今もホットだぜ。
968 :
デフォルトの名無しさん :2009/01/24(土) 01:08:13
未だにオントロジーやってるのってEUの 外基地研究者ぐらいじゃねーの?
オントロジーなんて日本でもアメリカでも中国でもどこでもやってるぞい
阪大でやってたような
オントロジーいらないって言ってる輩は、 「いいもん、別にCだけで何でも作れるから今のままで苦労してないもん!」 みたいな事を平然と言ってのける人種だけ 「もっとOSとかネットとかグリッドとかやってみたいから何かいいのないかな」 っていってる奴は死んでいいけどオントロジーはおもしろいです
( ゚д゚)ポカーン
974 :
デフォルトの名無しさん :2009/01/25(日) 00:08:49
ちょっとした処理系を作ろうと思ってるんだけど、yacc勉強したほうがいい? それとも、自前で実装するほうがいい?
ソースを公開したい場合は、 lex はライブラリを必要とするので lex のインストールを相手に強要することになってしまう。 この点が問題にならないのであれば、yacc/lex というか、 今なら bison/flex あたりを勉強するのが楽だと思う。
> lex はライブラリを必要とするので ええ?どの環境?
そもそもライブラリ無かろうが lex のソースをコンパイルするのに lex が要るんじゃないか?
lex が flexのエイリアスだったりすることをいってるじゃないか?
ソースを公開したい場合は、 〜 はコンパイラを必要とするので 〜 のインストールを相手に強要することになってしまう。
ユーザならともかくコンパイルする人間にそこまで気を使ってどうするよ
コンパイラ1つあればコンパイルできる、って方が楽だ
>それとも、自前で実装するほうがいい?
自前で実装すればコンパイラ1つあればコンパイルできるという状況になる。 そっちの方がいいと思うなら自前で実装した方が良い。
ソースを公開したい場合は、 ソースはダウンロードを必要とするので ソースのダウンロードを相手に強要することになってしまう。
バイナリを公開したい場合は(以下略
>>978 libflのこと言ってるんだろうね。
BSDライセンスだから、一緒にソースを配布すればいいんだけど。
気づいたら980越えてるな。 テンプレ修正要求とかあったら出してちょ。
...電通大の(渡邊先生のところかな)compilers鯖が403のままだ。 検索したら最終講義という話題が2005年にあったようなので、 引退されたから鯖止めたのか、だとすると復帰はないかな。
あそこは研究室にグローバルIP振って各自管理だから、 引退されたなら、ゼミを引き継いだ教授ゼミのサーバにあるかも。
994 :
993 :2009/01/26(月) 17:58:33
うぉ、
>>297 までしか見えていない状態だったので、
超カメレスしてしまった。。
>>974 使っているうちに欲しい機能は増えていくから、
最初からパーサジェネレータを使った方がいいと思う。
再帰下降だと左再帰の扱いが面倒だし。
yaccやbisonは古臭くて扱いにくいので、他のも見てみては。
ソースコードのきれいさで言えば、個人的にはCaperが好み。
997 :
デフォルトの名無しさん :2009/01/27(火) 13:37:46
>>976 最近は違うのか?
flexをC++モードで使うとライブラリが必要ないのでオヌヌメだったりする....ってか
10年以上前の情報だけどね。
998 :
デフォルトの名無しさん :2009/01/27(火) 13:39:05
>>974 実装したい言語のタイプによるんじゃないかなぁ。Lispっぽければパーサジェネレータいらない。
999 :
デフォルトの名無しさん :2009/01/27(火) 13:40:40
>>972 オントロジーは面白いです、確かに。しかし、オントロジー研究者が約束した果実は
今までもたらされていないし、これからももたらされることはないでしょう。
1000 :
デフォルトの名無しさん :2009/01/27(火) 14:40:57
>>1000 にあたり意見を述べさせていただきます。
次スレは必要ないと思います。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。