「コンパイラ・スクリプトエンジン」相談室12 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
07/09/02 08:13:36
プログラミング言語処理系の開発に興味のある人達のスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

過去スレ
1 URLリンク(pc.2ch.net)
2 スレリンク(tech板)
3 スレリンク(tech板)
4 スレリンク(tech板)
5 スレリンク(tech板)
6 スレリンク(tech板)
7 スレリンク(tech板)
8 スレリンク(tech板)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
関連リンクは多分 >>2-10 あたり




2:デフォルトの名無しさん
07/09/02 08:14:32
Wikiのまとめページ
URLリンク(www6.atwiki.jp)

★コンパイラ一般

・色々なツールの紹介
 URLリンク(catalog.compilertools.net)
・コンパイラ関連のリンク集
 URLリンク(www.ulis.ac.jp)
・スクリプティング言語資料室(仮) (リンク集)
 URLリンク(www.kt.rim.or.jp)
・Compiler Construction
 URLリンク(www.ie.u-ryukyu.ac.jp)
・情報システム工学実験 III コンパイラ・コンパイラ
 URLリンク(math.cs.kitami-it.ac.jp)
・OS/Programming 簡単な C コンパイラ
 URLリンク(www.csg.is.titech.ac.jp)
・正規表現
 URLリンク(hp.vector.co.jp)
・コンパイラ研究・開発情報の一集積所
 URLリンク(compilers.cs.uec.ac.jp)
・Links and Selected Readings
 URLリンク(www.gnu.org)
・国産のコンパイラ共通インフラストラクチャCOINS
 URLリンク(www.coins-project.org)


3:デフォルトの名無しさん
07/09/02 08:15:05
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 URLリンク(www.linux.or.jp)
・Turbo Pascal Lex/Yacc
 URLリンク(www.musikwissenschaft.uni-mainz.de)
・Jim Roskind's LALR(1) C++ Grammar
 URLリンク(www.empathy.com)
・Flexと Bisonを同時に使う
 URLリンク(guppy.eng.kagawa-u.ac.jp)
・KITE_ASM (yacc,lex)
 URLリンク(www.arch.cs.kumamoto-u.ac.jp)
・bison用のC++ LALR skeleton
 URLリンク(www.bj-ig.de)
・ANTLR(非yaccのパーサジェネレータ)
 URLリンク(www.antlr.org)
・JavaCC(Java Compiler Compiler)
 URLリンク(javacc.dev.java.net)
 URLリンク(village.infoweb.ne.jp)
 URLリンク(www.asahi-net.or.jp)
・CUP, JLex, JFlex
 URLリンク(www.cs.princeton.edu) (JLex, CUP)
 URLリンク(www.jflex.de)
・SableCC
 URLリンク(www.sablecc.org)
・¬<><∪∪ (notavacc)LALR(1)
 URLリンク(ne.cs.uec.ac.jp)
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 URLリンク(spirit.sourceforge.net)
 URLリンク(boost.cppll.jp)(マニュアル日本語化プロジェクト)
 URLリンク(www.fides.dti.ne.jp)


4:デフォルトの名無しさん
07/09/02 08:15:35
★ごみ集め

・GC FAQ -- draft
 URLリンク(www.iecc.com)
・A garbage collector for C and C++
 URLリンク(www.hpl.hp.com)
・一般教養としての Garbage Collection
 URLリンク(www.is.s.u-tokyo.ac.jp)
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
 URLリンク(www.amazon.com)

★処理系,スクリプト

・kikyou.info (吉里吉里というゲームのスクリプト)
 URLリンク(kikyou.info)
・tiny C コンパイラ (C)
 URLリンク(www.watalab.cs.uec.ac.jp)
・6809用 Micro C コンパイラ
 URLリンク(www.axe-inc.co.jp)
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
 URLリンク(users.pandora.be)
・自作コンパイラの部屋(PL/1, Pascal等)
 URLリンク(www.tokumaru.org)
・『Rubyソースコード完全解説』サポートページ
 URLリンク(i.loveruby.net)
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
 URLリンク(www.okisoft.co.jp)
・MSによるPEフォーマット仕様書(日本語)
 URLリンク(www.interq.or.jp)




5:デフォルトの名無しさん
07/09/02 08:16:57
★学会

・PLDI
 URLリンク(research.microsoft.com)
 コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL
 URLリンク(www.cs.princeton.edu)
 PLDIよりは理論寄りだが大いに参考になる。
・ICFP
 URLリンク(icfp06.cs.uchicago.edu)
 関数型言語に関する学会。とても難しい。
・OOPSLA
 URLリンク(www.oopsla.org)
 オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC
 URLリンク(www.st.cs.uni-sb.de)
 ヨーロッパ系。派手さはないが堅実。


6:デフォルトの名無しさん
07/09/02 08:17:40
★参考書籍

・コンパイラ 原理・技法・ツール 1&2
 URLリンク(www.amazon.co.jp)
 URLリンク(www.amazon.co.jp)
 通称ドラゴンブック。バイブル。
・コンパイラ構成法 原田 賢一
 URLリンク(www.amazon.co.jp)
 URLリンク(www.hara.cs.keio.ac.jp) (ソース、正誤表のダウンロード)
・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
 URLリンク(www.amazon.co.jp)
 一冊で済ませたい人へ。
・コンパイラの構成と最適化 中田 育男
 URLリンク(www.amazon.co.jp)
 最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。
・コンパイラの仕組み 渡邊 坦
 URLリンク(www.amazon.co.jp)
 薄い奴(185p)を読みたい人に。
・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
 URLリンク(www.amazon.co.jp)
 まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
 URLリンク(www.cbook24.com)
 初心者向けの優しい解説本。


以上

7:デフォルトの名無しさん
07/09/02 12:08:54
おつ

8:デフォルトの名無しさん
07/09/02 12:28:37
spiritってコンパイラスクリプトエンジンに使うのにどうなんだろ?
っていうか、再帰下降パーサ自体どうなんだろ?

9:デフォルトの名無しさん
07/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();
}
です。

10:デフォルトの名無しさん
07/09/03 08:42:46
>>9
そりゃ1+1はその文法に合わない入力だからじゃね。i+iなら通る。
試験するときは文法に適う入力かどうかを考えないと。
つまり、1+1でsyntax errorになったのは正しい動作だったということだ。
文法を定義する時に自分でどういうものを受け入れるかは分かっているんじゃないのかね?
それとも、どこかからサンプルを持ってきて適当に改造したから、
何をやっているか自分でも分からないとか?

11:10
07/09/03 08:56:53
あ、あと、
input : expr '\n' ;
って定義だと例えば'i' '+' 'i' '\n'の入力で受容された後は、
何が入力されてもsyntax errorになるのは分かってるよね?

12:デフォルトの名無しさん
07/09/03 09:02:33
10さんありがとうございます。自分がやってることが分かってませんでした。
いまいじくって理解しました。

13:デフォルトの名無しさん
07/09/03 14:53:26
HaskellでScheme処理系を実装するチュートリアル「Write Yourself a Scheme in 48 Hours」
URLリンク(halogen.note.amherst.edu)

14:デフォルトの名無しさん
07/09/08 13:37:10
ゲーム開発用にC言語の文法がそのまま使えるスクリプト言語を作ってるのですが、
配列や構造体の初期化処理をどうスマートに実装しようか悩んでます。
特に、ローカル変数の初期化時に変数を用いて初期化する点など。
なにか良い方法や参考資料とかないでしょうか?


15:デフォルトの名無しさん
07/09/08 14:34:35
>C言語の文法がそのまま使えるスクリプト言語

普通にC言語使うのとどう違うのか。
まぁコンパイルが面倒いとか安全性とかあるんだろうけど。

ちなみにこんなものもある。
URLリンク(root.cern.ch)

配列や構造体の初期化は、内容が固定ならmemcpy、変数が混ざってるなら1個ずつ代入するしかないんでない?
実際のCコンパイラが吐くコードを見てみたらいかが。

16:14
07/09/08 15:31:16
> 実際のCコンパイラが吐くコードを見てみたらいかが。
確かにw、ちょっと調べてみます。

> 普通にC言語使うのとどう違うのか。
一応、ゲーム用に文法を拡張して使用する予定。
並列処理(ノンプリエンプティブ)用の文法と、イベント処理用の文法は組み込みたいな、と。
あと、データ構造定義のヘッダーをCとスクリプトで共有するのも目的です。

CINTは本も持っているのですが・・・、挫折しました。


17:デフォルトの名無しさん
07/09/08 16:27:14
>>13
これ良さそうですね。
ちょうどHaskellでそれなりの規模のプログラムを作ってみたかった所なので
これにそってやってみます。

18:デフォルトの名無しさん
07/09/09 15:39:13
>>14
LuaとかSquirrelじゃダメなん?


19:14
07/09/09 19:50:01
Squirrelは初めて知りました。参考にさせてもらいます。

VCで配列や構造体のローカル変数の初期化をアセンブリ言語に吐き出してみたんですが、
既値での初期化でも思いのほか代入の羅列処理でした。
あんまり悩まずに、この方法で実装してみます。


20:デフォルトの名無しさん
07/09/10 12:52:50
tcc: tiny c compiler
URLリンク(fabrice.bellard.free.fr)

出遅れたがコンパクトで追いやすいと思う

21:14
07/09/10 19:03:29
> tcc: tiny c compiler
ありがとうございます。
これも参考にさせてもらいます。


22:デフォルトの名無しさん
07/09/23 01:43:08
スレリンク(gamedev板)

23:デフォルトの名無しさん
07/09/23 17:57:37
bisonとflexを組み合わせて使う場合、
bison側のコードからyyinを参照するにはどうしたらいいのでしょうか?

extern FILE *yyin;

main(){
while(!feof(yyin)){
yyparse();
}
}

上のような感じで使おうとしたところ「yyinは宣言されていない」
という旨のエラーが出てしまいました。

24:デフォルトの名無しさん
07/09/26 13:26:55
Ginってどうよ???

25:デフォルトの名無しさん
07/09/26 14:52:17
ご自分で判断なされては

26:デフォルトの名無しさん
07/09/26 22:23:37
(´;ω;`)ブワッ

27:デフォルトの名無しさん
07/10/04 16:16:32
Low Level Virtual Machine - Wikipedia
Wikipedia項目リンク

The LLVM Compiler Infrastructure Project
URLリンク(llvm.org)

これは外出?

28:デフォルトの名無しさん
07/10/05 01:39:02
俺はGin見て、アイデアが思い浮かんだのでありがてぇ思っただよ


29:デフォルトの名無しさん
07/10/05 12:57:30
Ginって?

30:デフォルトの名無しさん
07/10/07 21:19:06
>>29
javascriptのパーサジェネレータです。
URLリンク(nanto.asablo.jp)


31:デフォルトの名無しさん
07/10/07 23:33:45
やれやれだぜ
もうパーサジェネレータの話は禁止しようぜ
ここからパーサジェネレータから先の話だけな

32:デフォルトの名無しさん
07/10/08 21:38:24
勝手に決めるなよ

33:デフォルトの名無しさん
07/10/09 01:00:16
ANTLR 3 をC言語で扱うサンプルないかな?

それかANTLR3に近いパーサないかな?

34:デフォルトの名無しさん
07/10/10 21:18:42
>>27
まじ凄いんじゃね?
というぐらいしか俺にはわからんが
詳しい人解説たのむ

35:デフォルトの名無しさん
07/10/11 23:51:33
解説も何も見たままだが。
用語が判らんとかなら>>6の本でも読め。

36:デフォルトの名無しさん
07/10/12 10:35:55
そういえば、parrotって完成する日が来るんだろうか

37:デフォルトの名無しさん
07/10/12 13:06:34
>>27
は、最適化されたVMを提供するようだが、
使っている人のサイトとかみると、
実際はまだまだ未完成でバグバグみたい

38:デフォルトの名無しさん
07/11/06 13:39:44
LL(1)は構文木作るの面倒だな。

39:デフォルトの名無しさん
07/11/11 12:18:03
コンパイラ構成法 原田 賢一著

を読んでいっているのですが、理解できないところが多々あります。
演習問題の解答、解説等が載っている本などはありませんか?

40:デフォルトの名無しさん
07/11/12 06:37:16
>>6は切れてるな
あきらめろ

41:デフォルトの名無しさん
07/11/23 00:11:12
東京大学の言語処理系(mini-Python)を作る講義資料 2006年版
URLリンク(www.logos.ic.i.u-tokyo.ac.jp)

2007年版
URLリンク(www.logos.ic.i.u-tokyo.ac.jp)


俺にもPython作れる気がしてきた

42:デフォルトの名無しさん
07/11/23 11:23:55
>41
中身まだ全部見てないけど面白そう。こういう講義受けたかったな。
新しい方(2007年版)って今講義中なのか。



43:デフォルトの名無しさん
07/11/23 22:10:46
LALRのパーサー使ってきたけど、文法が複雑になると、Shift-Reduce衝突を除去するのに
一苦労。で、LL(*)のパーサーを使い始めたが、左再帰除去しないといけないので可読性に多少難あり。
でも、慣れれば、複雑な文法定義するのにLL(*)のパーサーの方が開発しやすいのかも。そんな予感。



44:デフォルトの名無しさん
07/11/25 21:34:15
いいなあ東大。めっちゃ楽しそう
俺の頭では入れなかったよ



45:43
07/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
07/11/25 22:11:57
いや、上の文法だと単項+-と括弧付きの優先順位まずいかも。うむむ。


47:43
07/11/25 22:14:56
ExprList = Expr { "," ExprList }

ExprList = Expr { "," Expr } だった。

48:43
07/12/01 13:31:25
MulDivExpr = UnaryExpr { ("*"|"/") UnaryExpr }
UnaryExpr = [("+"|"-")] Primary
Primary = NUMBER | "(" ExprList ")"
だった。
LLパーサー何気にいいんだけど、セマンティックアクションの実行されるタイミングがようわからん。
例えば、
AddSubExpr =
 MulDivExpr
  {
   ("*"|"/") MulDivExpr (. アクション .)
  }
で、"*"まではパース成功して、右のMulDivExprで失敗してもアクションが実行される。
うーん。構文チェックだけならいいけど、構文木作ると、エラー時に上手くか書かないと
迷子のノードができて、メモリリークなる。orz



49:デフォルトの名無しさん
07/12/01 13:44:32
確保したメモリをすべてグローバル変数にリンクリスト形式で繋いでいって、パース終了後にまとめて解放、とか

50:デフォルトの名無しさん
07/12/02 00:02:14
Objective-Cで書かれたLisp風のプログラミング言語「Nu」
URLリンク(programming.nu)

Java VM上で動くLisp風のプログラミング言語「Clojure」
URLリンク(clojure.sourceforge.net)

51:デフォルトの名無しさん
07/12/02 00:10:14
Lisp風の言語ならそっくりLispの方がありがたいんだが要するにLisp1等価って事だよな?(RnRSに従わないCommonLispは満たさない)


52:デフォルトの名無しさん
07/12/07 12:47:00
ClojureはASMっていうバイトコードジェネレータを使ってるんですね。
ASMはBCELやSerpより軽量で高速でgroovyでも使われてて
サイズがBCELが350KB、SERPが150KB、ASM 2.2が33KB
だそう。GroovyやJRuby等で使われてるみたい。




53:デフォルトの名無しさん
07/12/12 00:41:53
MikoScript 言語
URLリンク(www.venus.dti.ne.jp)



54:デフォルトの名無しさん
07/12/13 00:17:51
箱?

55:デフォルトの名無しさん
07/12/13 00:29:19
何用の言語なんだろ?
オレオレ言語としては機能が充実してるけど、
何かに特化してるわけじゃなさそうだし。


56:デフォルトの名無しさん
07/12/13 01:11:04
自作エディタに使ってるみたい
URLリンク(www.venus.dti.ne.jp)


57:デフォルトの名無しさん
07/12/13 01:19:08
>>53
『本格的なオブジェクト指向プログラミング』って書いてあるけど、
何が出来たら本格的なんだろうか。そこに書いてある限りでは、
クラスが定義出来てインスタンスが生成出来て継承関係を作れる
みたいだけど、リフレクションとかインスペクトが出来るわけでは
なさそう。

58:デフォルトの名無しさん
07/12/16 16:22:45
プロトタイプベースのオブジェクト指向に対して
クラスベースのオブジェクト指向を本格的といってるのかもしれませんね。


59:デフォルトの名無しさん
07/12/16 16:44:08
本格的とか元祖とかを付けるとウケがいいからだろう
特に意味を考えてるとは思わない

60:デフォルトの名無しさん
07/12/16 16:49:40
自分の言語ならそのへんはこだわりを持ってるのが普通じゃないか?
「本格的オブジェクト指向ってなんですか」とでも訊けば語ってくれるよ多分。

61:デフォルトの名無しさん
07/12/16 16:52:28
あくちぶべーちっくは本格的ですか?

62:デフォルトの名無しさん
07/12/19 07:42:19
そもそもオブジェクト指向みたいな現場から発生した醜いパラダイムに
本格的も糞もないだろうにw

63:デフォルトの名無しさん
07/12/19 09:22:44
ほー、PARC は現場なのか。へー。

64:デフォルトの名無しさん
07/12/19 09:37:58
そうだよ

65:デフォルトの名無しさん
07/12/19 12:55:53
>>62をゴールドバーグ女史が読んだらなんと言うだろう

66:デフォルトの名無しさん
07/12/19 14:01:54
申し訳ない、私は日本語は読めないんです
という主旨のことを言うのでは

67:デフォルトの名無しさん
07/12/19 22:55:40
HTTPのRFCを見るとヘッダの文法がBNFで書かれていました。なので、yaccとlexを使えばHTTPヘッダを解析できるかなと思った
のですがlexで入力をトークンに分割するのが難しそうで行き詰まりました。Java等のプログラム言語だと、コメント部分でもない
限りトークンの区切りは空白文字でよいし、+を見たらPLUSとか適当なトークンとして認識すればよいしで字句解析部分はわりと
簡単そうですが、HTTPだと、たとえばAという文字を見たときに、UPALPHAと認識すればよいのか、HEXと認識すればよいのか、
それとも状況(lexの状態?)に応じて、数文字まとめて別のトークンとして認識したほうがよいのか、よくわかりません。UPALPHA
とかHEXというのは、URLリンク(rfc-ref.org) に載ってる終端記号名です。

こういう場合、どう字句解析を行うのがよいでしょうか?どういう細かさのトークンをyaccに上げればよいでしょうか?
練習として、BNF通りのヘッダであればどんなに複雑なものであってもパースできるパーサを作ってみたいのです。

アドバイスをお願いします。


68:デフォルトの名無しさん
07/12/19 22:58:51
まずは日本語をしっかりな。

69:デフォルトの名無しさん
07/12/20 06:11:47
BNFで表現してあったって文脈自由とは限らないと思うんだぜ。
まあパーサからレクサへ状態を渡すとかするんだけど、それはそれで大変だし
何もlex使わなくてもパーサを手書きすればいいじゃん。
自分で手書きできない人だったらlex/yacc使ってもあまりいい目は見ない気がする。

70:デフォルトの名無しさん
07/12/20 11:16:55
>>69
BNFで表現できるのは文脈自由文法であると習いましたが違うんですか???

パーサ手書きでもいいんですが、たとえばどのような構成にするのでしょうか?


71:デフォルトの名無しさん
07/12/20 18:06:38
とりあえず、英大文字・小文字は1文字づつyaccにあげればいいんじゃ?
で16進数の構文をyaccで定義すれば?


72:デフォルトの名無しさん
07/12/20 18:23:56
yacc デカルチャー

73:デフォルトの名無しさん
07/12/20 18:59:52
>>72
なんつー古さだ(20年前ぢゃねぇか:実はperlネタのところでも見かけた)

74:デフォルトの名無しさん
07/12/20 21:00:53
>まあパーサからレクサへ状態を渡す
こんなことできたっけ?


75:デフォルトの名無しさん
07/12/20 22:10:24
レクサーを自前なら可能だけど、lexではできない。flexはしらね


76:デフォルトの名無しさん
07/12/20 22:18:47
(f)lexはlexer内で状態遷移できるよ。Cのコメント分を字句解析するときに使う奴。

77:デフォルトの名無しさん
07/12/20 22:51:15
>>71
本当に1文字づつ以外読まないのなら、字句解析を一切していないのと変わらないと思うんだがw

78:デフォルトの名無しさん
07/12/21 03:07:51
>>73
最近よく見かけるようになったのは
再放送してるからだろうw

79:デフォルトの名無しさん
07/12/21 07:11:04
>>77
字句解析一切していないからってそれがどうしたんだよ。


80:デフォルトの名無しさん
07/12/23 13:48:08
字句解析が不要ってこと?

81:デフォルトの名無しさん
07/12/23 18:55:50
え?字句解析してない?しまった〜〜下手こいた〜〜〜

ズン・ズン・ズン・ズン

82:デフォルトの名無しさん
07/12/23 19:00:40
ツマンネ

83:デフォルトの名無しさん
07/12/26 02:32:43
>>53
MikoScript面白いですね。

リレー型関数コール演算子は、Rubyみたいに、下手な既存classの拡張をせずとも、
メソッドを追加したように見せかけたり、
既存の関数を、作成したclassのメソッドのように見せかけたりできる。

puts("hoge");

"hoge"'puts;
と書いたり、

a = int(1234.56)

a = 1234.56'int
と書いたり。

代入型の関数コール形式は、

言語仕様としては、シンタックスシュガーの域を出ないが、
全てがオブジェクトではない、言語にはよさそうな仕様。

コマンド型の関数コール形式は、ま、いらんなw

ところで、箱がいまいちわからん???

84:デフォルトの名無しさん
07/12/26 02:33:12
> 代入型の関数コール形式は、
>
> 言語仕様としては、シンタックスシュガーの域を出ないが、
> 全てがオブジェクトではない、言語にはよさそうな仕様。

代入型の関数コール形式も、
言語仕様としては、シンタックスシュガーの域を出ないが、
全てがオブジェクトではない、言語にはよさそうな仕様。

ミス・・・

85:デフォルトの名無しさん
07/12/26 03:49:24
どのへんが本格的なの?

86:デフォルトの名無しさん
07/12/28 13:42:40
xtal
URLリンク(code.google.com)

87:デフォルトの名無しさん
08/01/01 16:03:44
>>41

こんな感じで他の大学も講義の資料公開(?)してくれると嬉しいな。
講義で使ってる本の紹介だけでもいい。
アメリカみたいに講義をpodcastで公開してくれなくてもいいから

雑誌も減ってきてるし、なかなか体系だって勉強できるネタが少ないのが最近の悩みだから

88:デフォルトの名無しさん
08/01/01 16:14:04
おっぱいそん入門

ぷりんとぼいん ”こんにちは おっぱい!”

89:デフォルトの名無しさん
08/01/01 16:16:58
>>87
ガベージコレクションが気になった
mallocをGC_MALLOCに変えるだけでfleeいらずとはこれいかに

90:デフォルトの名無しさん
08/01/01 16:29:50
>>89
Keep your dog free from flea!

91:デフォルトの名無しさん
08/01/01 16:32:08
>>90
OK. I understand!!! Thanks. :D

92:デフォルトの名無しさん
08/01/01 19:07:36
これいかに、ってベームGCだろ条項

93:デフォルトの名無しさん
08/01/02 01:25:54
ぼえーむじーしーと読んでたのは俺とお前だけの秘密だぜ

94:デフォルトの名無しさん
08/01/02 01:53:27
La BohemeGC

95:デフォルトの名無しさん
08/01/02 02:08:29
ぼへむじーしーってよんだmした><

96:デフォルトの名無しさん
08/01/02 10:16:26
オペラだったらボエームって読んでええんでないの?


97:デフォルトの名無しさん
08/01/02 16:06:38
BGCか

98:デフォルトの名無しさん
08/01/12 23:46:38
ふと思ったんだが、バイトコードのコンパイラって可能?
例えば、Javaとか.NETのソースをコンパイルしてできた、バイトコードをネイティブ形式にコンパイルする

99:デフォルトの名無しさん
08/01/12 23:49:11
GCJはclassファイルをネイティブにコンパイルしてるよ

100:デフォルトの名無しさん
08/01/13 00:03:08
>>98
なんのための JIT なんだ?


101:デフォルトの名無しさん
08/01/13 02:19:59
>>99
にわかですまんが
ネイティブってことは逆にVMじゃ動かんの?GCとかどうしてんだ?

102:デフォルトの名無しさん
08/01/13 11:57:23
gcjでネイティブコンパイルしたら本物のネイティブコードになるのでVM上では動かない
GCとかは実行ファイルにリンクするランタイムライブラリ(libgcj)に含まれてる

103:デフォルトの名無しさん
08/01/13 14:22:38
>>101
更にgcjのランタイムにはJVM相当機能も含まれてて.classの実行もできる.
なのでjarの動的ロードとかも可能になってる.
# クラスライブラリ足りなくて実用するのは大変だが…

104:101
08/01/13 15:38:31
>>102-103
なるほど、ありがとう。
しかし、
URLリンク(www.shudo.net)
↑を見る限りパフォーマンスでのメリットがないw



105:デフォルトの名無しさん
08/01/13 18:17:52
caperのなかのひとサルでも分かるチュートリアルつくってorz
特に構文木のところがサパーリ

106:デフォルトの名無しさん
08/01/13 18:26:04
105じゃないけど、caperべんりです、ありがとさんです。


107:デフォルトの名無しさん
08/01/13 20:39:18
caperって?

108:デフォルトの名無しさん
08/01/13 21:32:28
ググレスカ

109:デフォルトの名無しさん
08/01/13 22:33:42
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、

flexを動かそうとすると、bash: flex command not foundとでます
どーやれば、うごかすことができるんすか?

110:デフォルトの名無しさん
08/01/14 01:40:22
>>104
今のJVMは起動時間はクソ遅いけど処理自体はそれなりに速いからねぇ…
gcjでネイティヴバイナリ化するとアプリの起動時間はJVMより速くなる.
が,処理時間は正直速くならんね…

111:デフォルトの名無しさん
08/01/14 12:39:53
URLリンク(www.shudo.net)

でもいい話を聞いた。
VMでどのOS上でも動かせるJAVAがネイティブコンパイルで多分単体で実行できるなら配布しやすいし
多分DirectX使った高速化も・・・・

けどここのサンプルシューティングは動かん。
IE用JavaMV入れただけだけどコマンドラインでJAVA呼び出せるんだけどなんでだろ。
URLリンク(www.hcn.zaq.ne.jp)


112:デフォルトの名無しさん
08/01/14 13:31:46
Cygwinいんすこして、bison-2.1.exeとflex-2.5.4a-1.exeをいんすこしたんだけど、

flexを動かそうとすると、bash: flex command not foundとでます
どーやれば、うごかすことができるんすか?

113:デフォルトの名無しさん
08/01/14 19:14:45
>>105-107
caperおもしろいな
あとは、軽い汎用VMでもあれば、お手軽自作言語が簡単にという夢を見た

114:デフォルトの名無しさん
08/01/14 19:35:25
VMは作るのだけならそんなに難しくないよ。

むしろ既存のVMに乗せる方が困難なんじゃないだろうか。

115:デフォルトの名無しさん
08/01/14 19:59:03
>>114
同意。
組み込みでメモリ制限がきつい時にマクロの一種としてVM作ること多いんだけど、マジでそう思う(VMも似通ってるけど特殊なプリミティブが組み込み対象別なのでメモリ制限の関係でいまいち統一的に扱えない)


116:デフォルトの名無しさん
08/01/15 06:22:07
Pコードか!

117:デフォルトの名無しさん
08/01/15 12:43:14
似たようなもの。
セルフコンパイル、自己デバッグくらいは処理できる(実機ではそんなメモリないけど、エミュをデスクトップ機上に簡単に作れるのでそちらでデバッグ)
32KワードくらいのRAMのうち16K自由にできれば自己完結環境になれるからね>>pcodeがUCSDのだとすると


118:デフォルトの名無しさん
08/01/16 19:58:47
p2cコンパイラをcygwin環境で動かすにはどうしたらいいですか?

119:デフォルトの名無しさん
08/01/19 03:01:23
GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)
URLリンク(wiki.livedoor.jp)

日本語のGC解説は珍しいね

120:デフォルトの名無しさん
08/01/19 11:59:22
おー

簡単な物は大学の授業や演習の資料とかではあるけど
ネット上でブラウザで閲覧可能でまとまってるものはごくわずかだからなぁ

121:デフォルトの名無しさん
08/01/24 19:55:09
MS-DOSのバッチファイルのBNFってどこかに落ちてませんかね。
googleしてみた限りでは見つからないのですけれども・・・。

122:デフォルトの名無しさん
08/01/24 19:57:32
バージョン違いがあるし、難しいんじゃないかなあ?
そもそもコマンドベース言語だし。

過去、バッチを読み込むプログラムは存在してるから、
その作者に連絡とってみるとか。

123:デフォルトの名無しさん
08/01/24 20:00:41
テンプレにある、コンパイラ構成法の正誤表がアクセスできん。

124:デフォルトの名無しさん
08/01/24 20:19:09
GCって昔読んだ説明から、何ひとつ進歩してないような気がする。
気のせいか?

125:121
08/01/24 21:12:43
>>122
レスありがとうございます。
引き続きもうちょっと色々と調べてみようと思います。

126:デフォルトの名無しさん
08/01/25 00:58:25
>>124
> GCって昔読んだ説明から、何ひとつ進歩してないような気がする。
> 気のせいか?

最近の動向を含んだ解説がまだあまり出回ってないから。

個人的に記憶に残っているものをいくつか。
・理論系
 ・URLリンク(home.pipeline.com)
 ・タイトルが思い出せないのだが、リファレンスカウントと
  ガベージコレクションは双対である、とかなんとかそんなの。

・実装系
 ・URLリンク(www.nminoru.jp)
 ・URLリンク(sdc.sun.co.jp)

127:デフォルトの名無しさん
08/01/25 22:47:41
>>124の言う昔が僕の言う昔と違うことだけはわかる。
ここ5年だったらあんまりかわらんが、10年だとだいぶ違う。


128:デフォルトの名無しさん
08/01/26 20:14:12
statements や expression や leftvalue(左辺値) などの意味は分かるのですが、
primary とはどういった時に使われるのでしょうか?
あるいは、どういったものをいうのでしょうか?

129:デフォルトの名無しさん
08/01/26 20:51:11
primary expression (一次式) なら定数や変数など
それ以上分解できない式のことだが

130:デフォルトの名無しさん
08/01/26 22:49:24
GCが進歩したのはJavaのおかげ。
Lispだけではとてもとても。

131:デフォルトの名無しさん
08/01/26 23:39:24
>>129
そういう意味でしたか、どうもありがとうございました。

132:デフォルトの名無しさん
08/01/26 23:49:21
>  ・タイトルが思い出せないのだが、リファレンスカウントと
>   ガベージコレクションは双対である、とかなんとかそんなの。

A Unified Theory of Garbage Collection

133:デフォルトの名無しさん
08/01/27 17:53:05
>>130
Lisper(笑)

134:デフォルトの名無しさん
08/01/30 05:35:37
LisperはN64で使われてるとかいろいろ誇らしげに言うからな
GCは進歩したのもLispのおかげなんだよ

135:デフォルトの名無しさん
08/01/30 08:00:39
>>134
GCに一番寄与したのってSUNのプロダクトだとjavaよりselfじゃないのかな?


136:デフォルトの名無しさん
08/01/30 13:57:09
「A Scala Tutorial for Java programmers」日本語訳 (PDF注意)
URLリンク(homepage.mac.com)

オブジェクト指向+関数型なScalaのチュートリアル
こういう言語の話題はどこもってけばいいんだ

137:デフォルトの名無しさん
08/01/30 14:02:00
ここ(笑)

とは趣旨が違うよなぁ。

なにか新しい言語を、作りたい人じゃなくて使いたい人のためのスレか。

138:デフォルトの名無しさん
08/01/30 14:21:02
OOP言語統合とか、関数型統合とかないからねえ
OOはネガティブなスレしかないw

139:デフォルトの名無しさん
08/01/30 23:24:11
>>119 のid:authorNari がGC本の翻訳希望者つのってる。本気かいな・・・てか需要あるんかいな・・・

140:デフォルトの名無しさん
08/01/30 23:36:23
LISP使いの人が一番だなって感じたことがあるんだけど、
それは、



















プライドの高さ。(マジ

141:デフォルトの名無しさん
08/01/31 00:04:15
>>140
なんで? どの辺が??? そんなプライド高くねぇとおもうぞ………
少なくとも俺のしってる奴は, みんな, C とかアセンブラとか書けるし…
そう言う問題とはちゃう?


142:デフォルトの名無しさん
08/01/31 00:06:54
>>140
ワシはLisp使いだがプライドって旨いのか?

まだ食った事ないぞ


143:デフォルトの名無しさん
08/01/31 00:21:07
Lisp を貶せば自分が高みに上がれると思ってる奴ってまだ居たんだな
この多言語時代に、とっくに絶滅したと思ってたよ

144:デフォルトの名無しさん
08/01/31 00:50:57
にじみ出るプライドが俺を呪い殺そうとしている^p^

145:デフォルトの名無しさん
08/01/31 05:49:48
せっかく煽ったのに、内容がここまで勘違い全開だと恥ずかしいな。

146:デフォルトの名無しさん
08/01/31 09:00:35
>>145
馬鹿が見る豚のケツって言葉を思い浮かべた


147:デフォルトの名無しさん
08/01/31 15:59:54
lisp = 鮫島事件

おや?誰か来た様だ

148:デフォルトの名無しさん
08/01/31 22:44:45
俺はJavaとか使ってる奴とは違う。


149:デフォルトの名無しさん
08/01/31 22:50:39
かわいそうに、java屋以下とは……

150:デフォルトの名無しさん
08/02/01 07:25:09
馬鹿さ比べでjava屋以下になっても
あんまり悔しくないよなぁ

151:デフォルトの名無しさん
08/02/01 08:28:16
所詮Windowsなんて使ってる以上、どちらも一緒

152:デフォルトの名無しさん
08/02/03 15:47:22
ruby v.s. php か

153:デフォルトの名無しさん
08/02/03 15:52:37
お前ら >>1-6 を読め
ただのLL談義はスレ違いだ

154:デフォルトの名無しさん
08/02/03 20:28:11
LL談義は、こちらで盛り上がってるのでどうぞ

【Perl,PHP】LLバトルロワイヤル【Ruby,Python】
スレリンク(tech板)

155:デフォルトの名無しさん
08/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
;
%%

156:デフォルトの名無しさん
08/02/03 22:26:05
>>31

157:デフォルトの名無しさん
08/02/03 22:42:43
ところでみんな、コンパイラ/インタプリタを作るにあたり、
C言語とアセンブリ以外の言語で、という条件だったら、
どの言語使う?

158:デフォルトの名無しさん
08/02/03 22:46:21
C++

159:デフォルトの名無しさん
08/02/03 22:48:48
なんか %prec の使いどころがようわからんのだけど、
単項マイナスのためのおまじないとしか俺理解してないので
なんか変じゃないの? としかアドバイスできない。

160:デフォルトの名無しさん
08/02/03 22:49:14
Cみたくネイティブコードコンパイラがあって
Cよりずっと型安全な言語がいいなぁ
どんな言語があるかよく知らないが

161:デフォルトの名無しさん
08/02/03 22:52:15
GCJ?

162:デフォルトの名無しさん
08/02/03 22:52:22
>>160
その条件だと SML, OCaml, Haskell が該当する。
これらの言語は処理系の実装によく使われるけど、
ランタイムの制約が大きいので要注意。

163:デフォルトの名無しさん
08/02/03 22:52:22
何も考えずにHaskell

164:デフォルトの名無しさん
08/02/03 22:54:36
ランタイムの制約って何?

165:デフォルトの名無しさん
08/02/03 22:59:35
>>164
自前で GC を用意したいとか、Int は 32bit ないと嫌だとか、
細かい処理系の実装を弄りたい向きには合わない

楽したいならむしろ良いのかもしれんけど

166:デフォルトの名無しさん
08/02/03 23:03:38
>>165
なるほど、インタプリタの話か
コンパイラ書くことしか考えてなかった
真面目にインタプリタを書くなら、Haskellで書かれたバイトコードコンパイラ+Cで書かれたバイトコードインタプリタ
みたいな構成にすれば良いかな

167:デフォルトの名無しさん
08/02/03 23:16:27
%prec EXPC が変だな。

168:155
08/02/03 23:29:15
>>167
%precがないとexpの'+'とexpcの'+'でconflictが起きるんです。

169:デフォルトの名無しさん
08/02/03 23:44:41
expとexpcを混ぜて定義しようとするからconflictするわけで

exp: tkVAR | tkNUM | exp '+' exp | '-' exp
expc: tkNUM | expc '+' expc | '-' expc

170:155
08/02/03 23:54:08
>>169
それだと定数式もexpになってしまいます。
要するに、
a + 2 + 3
を、
tkVAR + expc
としてパースしたいんです。

パーサの段階で定数式を最適化したいんです。
難しいですかね?

171:デフォルトの名無しさん
08/02/04 00:45:31
パーサの時点で定数式の最適化って
2 + a + 3
とか最適化できなくね?

172:155
08/02/04 01:27:57
>>171
それはできなくて良いです。

つか>>155のやり方でもうちょっと書いてみたけど、
演算の優先順位でも問題が発生したのでやっぱり
諦めることにしました。

面白いアイディアだと思ったんだけどなぁ…

173:デフォルトの名無しさん
08/02/04 01:27:58
「パーサの段階で定数式を最適化したい」んならアクション中で最適化すればいいだろ
文法レベルで最適化する意味が分からん

174:デフォルトの名無しさん
08/02/04 09:49:13
構文のレベルで弁別しといたほうが楽、という理由はあるかも。

優先順位付けで誤魔化すんじゃなくて、きちんと優先順位を組み込んだ
構文規則にして、あと、何かテクニックがあったような気がするんだけど...

175:155
08/02/04 12:01:23
>>173
tkVAR '=' exp
tkCONST '=' expc
みたいに書けると良いかなと思ったんですよ。

>>174
> 何かテクニック
参考になる資料があれば是非教えて頂きたいです。

176:デフォルトの名無しさん
08/02/04 13:30:58
Haskellでインタプリタか・・・
Haskellってメモリ気にし無さすぎだからヤバそうなイメージがあるけど、
実験用と以外で使われているんだろうか

177:デフォルトの名無しさん
08/02/04 13:31:41
ああああ、アホか俺は。
そんなのは処理系依存だよな。
スマソ。

178:デフォルトの名無しさん
08/02/04 22:14:06
%right '-' も変でないか
その構文では2項演算子じゃないよね

179:デフォルトの名無しさん
08/02/04 23:33:08
確かに

180:デフォルトの名無しさん
08/02/04 23:49:25
衝突の消し方は、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_
;
%%

181:デフォルトの名無しさん
08/02/05 00:58:18
%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"); }
;
%%

182:デフォルトの名無しさん
08/02/05 00:58:50
続き
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:デフォルトの名無しさん
08/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
08/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()();

185:デフォルトの名無しさん
08/02/05 23:14:41
うぜえ・・
それぐらい自分で判断しろ
半年ぐらい既成の文法眺めてろ

186:デフォルトの名無しさん
08/02/06 00:33:07
ヨミ肉w

187:183
08/02/06 08:45:44
>>185
既存の文法クレクレ

188:デフォルトの名無しさん
08/02/06 10:56:48
>>31

189:183
08/02/06 12:11:15
再帰下降のパーサを手書きしてるからパーサ【ジェネレータ】の話じゃない。

190:デフォルトの名無しさん
08/02/06 14:10:11
URLリンク(java.sun.com)

191:デフォルトの名無しさん
08/02/06 15:58:18
>>183
Javaは関数ポインタないから(hoge)() とか hoge()() はできないよ。
Javaの構文規則みても、あんまし参考にはならないと思う。

192:デフォルトの名無しさん
08/02/06 16:17:49
C言語の本に書いてあるよ

193:デフォルトの名無しさん
08/02/06 16:34:15
1.6で関数型ができるという話はどうなってるの? Java

194:デフォルトの名無しさん
08/02/06 17:24:46
そんな話ないよ


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5327日前に更新/92 KB
担当:undef