- 1 名前:デフォルトの名無しさん [2007/09/02(日) 08:13:36 ]
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 関連リンクは多分 >>2-10 あたり
- 2 名前:デフォルトの名無しさん [2007/09/02(日) 08:14:32 ]
- Wikiのまとめページ
www6.atwiki.jp/compilerandscriptengine/ ★コンパイラ一般 ・色々なツールの紹介 catalog.compilertools.net/ ・コンパイラ関連のリンク集 www.ulis.ac.jp/~nakai/rel_web_compilers.shtml ・スクリプティング言語資料室(仮) (リンク集) www.kt.rim.or.jp/~kbk/ ・Compiler Construction www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/ ・情報システム工学実験 III コンパイラ・コンパイラ math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html ・OS/Programming 簡単な C コンパイラ www.csg.is.titech.ac.jp/~chiba/lecture/os/ ・正規表現 hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm ・コンパイラ研究・開発情報の一集積所 compilers.cs.uec.ac.jp/ ・Links and Selected Readings www.gnu.org/software/gcc/readings.html ・国産のコンパイラ共通インフラストラクチャCOINS www.coins-project.org/
- 3 名前:デフォルトの名無しさん [2007/09/02(日) 08:15:05 ]
- ★字句・構文解析
・Lex and YACC primer/HOWTO (邦訳) ttp://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html ・Turbo Pascal Lex/Yacc www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html ・Jim Roskind's LALR(1) C++ Grammar ttp://www.empathy.com/pccts/roskind.html ・Flexと Bisonを同時に使う guppy.eng.kagawa-u.ac.jp/2005/SysProg/both.html ・KITE_ASM (yacc,lex) www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/ ・bison用のC++ LALR skeleton ttp://www.bj-ig.de/software/bison/ ・ANTLR(非yaccのパーサジェネレータ) ttp://www.antlr.org/ ・JavaCC(Java Compiler Compiler) ttps://javacc.dev.java.net/ ttp://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html ttp://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html ・CUP, JLex, JFlex www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP) ttp://www.jflex.de/ ・SableCC ttp://www.sablecc.org/ ・¬<><∪∪ (notavacc)LALR(1) ne.cs.uec.ac.jp/~koto/notavacc/ ・boost::spirit(C++のテンプレートでEBNFの構文を模倣) spirit.sourceforge.net/ ttp://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト) ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
- 4 名前:デフォルトの名無しさん [2007/09/02(日) 08:15:35 ]
- ★ごみ集め
・GC FAQ -- draft www.iecc.com/gclist/GC-faq.html ・A garbage collector for C and C++ www.hpl.hp.com/personal/Hans_Boehm/gc/ ・一般教養としての Garbage Collection www.is.s.u-tokyo.ac.jp/vu/jugyo/processor/process/soft/compilerresume/gc/gc.html ・Garbage Collection : Algorithms for Automatic Dynamic Memory Management www.amazon.com/exec/obidos/ASIN/0471941484/ ★処理系,スクリプト ・kikyou.info (吉里吉里というゲームのスクリプト) kikyou.info/ ・tiny C コンパイラ (C) www.watalab.cs.uec.ac.jp/tinyCabs.html ・6809用 Micro C コンパイラ www.axe-inc.co.jp/pds/mc09.html ・Portable Object Compiler (Obj-C >> C のトランスレータ?) users.pandora.be/stes/compiler.html ・自作コンパイラの部屋(PL/1, Pascal等) www.tokumaru.org/ ・『Rubyソースコード完全解説』サポートページ i.loveruby.net/ja/rhg/ ・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』 www.okisoft.co.jp/esc/go.html ・MSによるPEフォーマット仕様書(日本語) www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
- 5 名前:デフォルトの名無しさん [2007/09/02(日) 08:16:57 ]
- ★学会
・PLDI research.microsoft.com/conferences/pldi06/ コンパイラの研究に関する最新成果を知りたければまずはここ。 ・POPL www.cs.princeton.edu/~dpw/popl/06/ PLDIよりは理論寄りだが大いに参考になる。 ・ICFP icfp06.cs.uchicago.edu/ 関数型言語に関する学会。とても難しい。 ・OOPSLA www.oopsla.org/ オブジェクト指向言語に関する学会。最近はやや低調? ・ICCC www.st.cs.uni-sb.de/cc/ ヨーロッパ系。派手さはないが堅実。
- 6 名前:デフォルトの名無しさん [2007/09/02(日) 08:17:40 ]
- ★参考書籍
・コンパイラ 原理・技法・ツール 1&2 www.amazon.co.jp/exec/obidos/ASIN/4781905854/ www.amazon.co.jp/exec/obidos/ASIN/4781905862/ 通称ドラゴンブック。バイブル。 ・コンパイラ構成法 原田 賢一 www.amazon.co.jp/exec/obidos/ASIN/4320029224/ www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード) ・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝 www.amazon.co.jp/exec/obidos/ASIN/4000103458/ 一冊で済ませたい人へ。 ・コンパイラの構成と最適化 中田 育男 www.amazon.co.jp/exec/obidos/ASIN/4254121393/ 最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。 ・コンパイラの仕組み 渡邊 坦 www.amazon.co.jp/exec/obidos/ASIN/4254127081/ 薄い奴(185p)を読みたい人に。 ・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam) www.amazon.co.jp/exec/obidos/ASIN/0321131436/ まだ出ていない。 ・スモールコンパイラの制作で学ぶプログラムのしくみ www.cbook24.com/bm_detail.asp?sku=4774121770 初心者向けの優しい解説本。 以上
- 7 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:08:54 ]
- おつ
- 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(); } です。
- 10 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 08:42:46 ]
- >>9
そりゃ1+1はその文法に合わない入力だからじゃね。i+iなら通る。 試験するときは文法に適う入力かどうかを考えないと。 つまり、1+1でsyntax errorになったのは正しい動作だったということだ。 文法を定義する時に自分でどういうものを受け入れるかは分かっているんじゃないのかね? それとも、どこかからサンプルを持ってきて適当に改造したから、 何をやっているか自分でも分からないとか?
- 11 名前:10 mailto:sage [2007/09/03(月) 08:56:53 ]
- あ、あと、
input : expr '\n' ; って定義だと例えば'i' '+' 'i' '\n'の入力で受容された後は、 何が入力されてもsyntax errorになるのは分かってるよね?
- 12 名前:デフォルトの名無しさん [2007/09/03(月) 09:02:33 ]
- 10さんありがとうございます。自分がやってることが分かってませんでした。
いまいじくって理解しました。
- 13 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:53:26 ]
- HaskellでScheme処理系を実装するチュートリアル「Write Yourself a Scheme in 48 Hours」
halogen.note.amherst.edu/%7Ejdtang/scheme_in_48/tutorial/overview.html
- 14 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:37:10 ]
- ゲーム開発用にC言語の文法がそのまま使えるスクリプト言語を作ってるのですが、
配列や構造体の初期化処理をどうスマートに実装しようか悩んでます。 特に、ローカル変数の初期化時に変数を用いて初期化する点など。 なにか良い方法や参考資料とかないでしょうか?
- 15 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 14:34:35 ]
- >C言語の文法がそのまま使えるスクリプト言語
普通にC言語使うのとどう違うのか。 まぁコンパイルが面倒いとか安全性とかあるんだろうけど。 ちなみにこんなものもある。 root.cern.ch/twiki/bin/view/ROOT/CINT 配列や構造体の初期化は、内容が固定ならmemcpy、変数が混ざってるなら1個ずつ代入するしかないんでない? 実際のCコンパイラが吐くコードを見てみたらいかが。
- 16 名前:14 mailto:sage [2007/09/08(土) 15:31:16 ]
- > 実際のCコンパイラが吐くコードを見てみたらいかが。
確かにw、ちょっと調べてみます。 > 普通にC言語使うのとどう違うのか。 一応、ゲーム用に文法を拡張して使用する予定。 並列処理(ノンプリエンプティブ)用の文法と、イベント処理用の文法は組み込みたいな、と。 あと、データ構造定義のヘッダーをCとスクリプトで共有するのも目的です。 CINTは本も持っているのですが・・・、挫折しました。
- 17 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 16:27:14 ]
- >>13
これ良さそうですね。 ちょうどHaskellでそれなりの規模のプログラムを作ってみたかった所なので これにそってやってみます。
- 18 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:39:13 ]
- >>14
LuaとかSquirrelじゃダメなん?
- 19 名前:14 mailto:sage [2007/09/09(日) 19:50:01 ]
- Squirrelは初めて知りました。参考にさせてもらいます。
VCで配列や構造体のローカル変数の初期化をアセンブリ言語に吐き出してみたんですが、 既値での初期化でも思いのほか代入の羅列処理でした。 あんまり悩まずに、この方法で実装してみます。
- 20 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 12:52:50 ]
- tcc: tiny c compiler
fabrice.bellard.free.fr/tcc/ 出遅れたがコンパクトで追いやすいと思う
- 21 名前:14 mailto:sage [2007/09/10(月) 19:03:29 ]
- > tcc: tiny c compiler
ありがとうございます。 これも参考にさせてもらいます。
- 22 名前:デフォルトの名無しさん [2007/09/23(日) 01:43:08 ]
- pc11.2ch.net/test/read.cgi/gamedev/1005038080/
- 23 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:57:37 ]
- bisonとflexを組み合わせて使う場合、
bison側のコードからyyinを参照するにはどうしたらいいのでしょうか? extern FILE *yyin; main(){ while(!feof(yyin)){ yyparse(); } } 上のような感じで使おうとしたところ「yyinは宣言されていない」 という旨のエラーが出てしまいました。
- 24 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 13:26:55 ]
- Ginってどうよ???
- 25 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 14:52:17 ]
- ご自分で判断なされては
- 26 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:23:37 ]
- (´;ω;`)ブワッ
- 27 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 16:16:32 ]
- Low Level Virtual Machine - Wikipedia
ja.wikipedia.org/wiki/Low_Level_Virtual_Machine The LLVM Compiler Infrastructure Project llvm.org/ これは外出?
- 28 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:39:02 ]
- 俺はGin見て、アイデアが思い浮かんだのでありがてぇ思っただよ
- 29 名前:デフォルトの名無しさん [2007/10/05(金) 12:57:30 ]
- Ginって?
- 30 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 21:19:06 ]
- >>29
javascriptのパーサジェネレータです。 nanto.asablo.jp/blog/2007/09/12/1793275
- 31 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:33:45 ]
- やれやれだぜ
もうパーサジェネレータの話は禁止しようぜ ここからパーサジェネレータから先の話だけな
- 32 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:38:24 ]
- 勝手に決めるなよ
- 33 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:00:16 ]
- ANTLR 3 をC言語で扱うサンプルないかな?
それかANTLR3に近いパーサないかな?
- 34 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:18:42 ]
- >>27
まじ凄いんじゃね? というぐらいしか俺にはわからんが 詳しい人解説たのむ
- 35 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 23:51:33 ]
- 解説も何も見たままだが。
用語が判らんとかなら>>6の本でも読め。
- 36 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 10:35:55 ]
- そういえば、parrotって完成する日が来るんだろうか
- 37 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 13:06:34 ]
- >>27
は、最適化されたVMを提供するようだが、 使っている人のサイトとかみると、 実際はまだまだ未完成でバグバグみたい
- 38 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:39:44 ]
- LL(1)は構文木作るの面倒だな。
- 39 名前:デフォルトの名無しさん [2007/11/11(日) 12:18:03 ]
- コンパイラ構成法 原田 賢一著
を読んでいっているのですが、理解できないところが多々あります。 演習問題の解答、解説等が載っている本などはありませんか?
- 40 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 06:37:16 ]
- >>6は切れてるな
あきらめろ
- 41 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:11:12 ]
- 東京大学の言語処理系(mini-Python)を作る講義資料 2006年版
www.logos.ic.i.u-tokyo.ac.jp/lectures/enshu2006/index.php?%B9%D6%B5%C1%BB%F1%CE%C1 2007年版 www.logos.ic.i.u-tokyo.ac.jp/lectures/enshu2007/index.php?%B9%D6%B5%C1%BB%F1%CE%C1 俺にもPython作れる気がしてきた
- 42 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:23:55 ]
- >41
中身まだ全部見てないけど面白そう。こういう講義受けたかったな。 新しい方(2007年版)って今講義中なのか。
- 43 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:10:46 ]
- LALRのパーサー使ってきたけど、文法が複雑になると、Shift-Reduce衝突を除去するのに
一苦労。で、LL(*)のパーサーを使い始めたが、左再帰除去しないといけないので可読性に多少難あり。 でも、慣れれば、複雑な文法定義するのにLL(*)のパーサーの方が開発しやすいのかも。そんな予感。
- 44 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 21:34:15 ]
- いいなあ東大。めっちゃ楽しそう
俺の頭では入れなかったよ
- 45 名前:43 mailto:sage [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 mailto:sage [2007/11/25(日) 22:11:57 ]
- いや、上の文法だと単項+-と括弧付きの優先順位まずいかも。うむむ。
- 47 名前:43 mailto:sage [2007/11/25(日) 22:14:56 ]
- ExprList = Expr { "," ExprList }
は ExprList = Expr { "," Expr } だった。
- 48 名前:43 mailto:sage [2007/12/01(土) 13:31:25 ]
- MulDivExpr = UnaryExpr { ("*"|"/") UnaryExpr }
UnaryExpr = [("+"|"-")] Primary Primary = NUMBER | "(" ExprList ")" だった。 LLパーサー何気にいいんだけど、セマンティックアクションの実行されるタイミングがようわからん。 例えば、 AddSubExpr = MulDivExpr { ("*"|"/") MulDivExpr (. アクション .) } で、"*"まではパース成功して、右のMulDivExprで失敗してもアクションが実行される。 うーん。構文チェックだけならいいけど、構文木作ると、エラー時に上手くか書かないと 迷子のノードができて、メモリリークなる。orz
- 49 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:44:32 ]
- 確保したメモリをすべてグローバル変数にリンクリスト形式で繋いでいって、パース終了後にまとめて解放、とか
- 50 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:02:14 ]
- Objective-Cで書かれたLisp風のプログラミング言語「Nu」
programming.nu/ Java VM上で動くLisp風のプログラミング言語「Clojure」 clojure.sourceforge.net/
- 51 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 00:10:14 ]
- Lisp風の言語ならそっくりLispの方がありがたいんだが要するにLisp1等価って事だよな?(RnRSに従わないCommonLispは満たさない)
- 52 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 12:47:00 ]
- ClojureはASMっていうバイトコードジェネレータを使ってるんですね。
ASMはBCELやSerpより軽量で高速でgroovyでも使われてて サイズがBCELが350KB、SERPが150KB、ASM 2.2が33KB だそう。GroovyやJRuby等で使われてるみたい。
- 53 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:41:53 ]
- MikoScript 言語
www.venus.dti.ne.jp/mw31/miko/index.html
- 54 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:17:51 ]
- 箱?
- 55 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:29:19 ]
- 何用の言語なんだろ?
オレオレ言語としては機能が充実してるけど、 何かに特化してるわけじゃなさそうだし。
- 56 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:11:04 ]
- 自作エディタに使ってるみたい
ttp://www.venus.dti.ne.jp/mw31/apsaly/index.html
- 57 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:19:08 ]
- >>53
『本格的なオブジェクト指向プログラミング』って書いてあるけど、 何が出来たら本格的なんだろうか。そこに書いてある限りでは、 クラスが定義出来てインスタンスが生成出来て継承関係を作れる みたいだけど、リフレクションとかインスペクトが出来るわけでは なさそう。
- 58 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:22:45 ]
- プロトタイプベースのオブジェクト指向に対して
クラスベースのオブジェクト指向を本格的といってるのかもしれませんね。
- 59 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:44:08 ]
- 本格的とか元祖とかを付けるとウケがいいからだろう
特に意味を考えてるとは思わない
- 60 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:49:40 ]
- 自分の言語ならそのへんはこだわりを持ってるのが普通じゃないか?
「本格的オブジェクト指向ってなんですか」とでも訊けば語ってくれるよ多分。
- 61 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 16:52:28 ]
- あくちぶべーちっくは本格的ですか?
- 62 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 07:42:19 ]
- そもそもオブジェクト指向みたいな現場から発生した醜いパラダイムに
本格的も糞もないだろうにw
- 63 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:22:44 ]
- ほー、PARC は現場なのか。へー。
- 64 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:37:58 ]
- そうだよ
- 65 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:55:53 ]
- >>62をゴールドバーグ女史が読んだらなんと言うだろう
- 66 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 14:01:54 ]
- 申し訳ない、私は日本語は読めないんです
という主旨のことを言うのでは
- 67 名前:デフォルトの名無しさん [2007/12/19(水) 22:55:40 ]
- HTTPのRFCを見るとヘッダの文法がBNFで書かれていました。なので、yaccとlexを使えばHTTPヘッダを解析できるかなと思った
のですがlexで入力をトークンに分割するのが難しそうで行き詰まりました。Java等のプログラム言語だと、コメント部分でもない 限りトークンの区切りは空白文字でよいし、+を見たらPLUSとか適当なトークンとして認識すればよいしで字句解析部分はわりと 簡単そうですが、HTTPだと、たとえばAという文字を見たときに、UPALPHAと認識すればよいのか、HEXと認識すればよいのか、 それとも状況(lexの状態?)に応じて、数文字まとめて別のトークンとして認識したほうがよいのか、よくわかりません。UPALPHA とかHEXというのは、rfc-ref.org/RFC-TEXTS/2616/chapter2.html に載ってる終端記号名です。 こういう場合、どう字句解析を行うのがよいでしょうか?どういう細かさのトークンをyaccに上げればよいでしょうか? 練習として、BNF通りのヘッダであればどんなに複雑なものであってもパースできるパーサを作ってみたいのです。 アドバイスをお願いします。
- 68 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 22:58:51 ]
- まずは日本語をしっかりな。
- 69 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 06:11:47 ]
- BNFで表現してあったって文脈自由とは限らないと思うんだぜ。
まあパーサからレクサへ状態を渡すとかするんだけど、それはそれで大変だし 何もlex使わなくてもパーサを手書きすればいいじゃん。 自分で手書きできない人だったらlex/yacc使ってもあまりいい目は見ない気がする。
- 70 名前:デフォルトの名無しさん [2007/12/20(木) 11:16:55 ]
- >>69
BNFで表現できるのは文脈自由文法であると習いましたが違うんですか??? パーサ手書きでもいいんですが、たとえばどのような構成にするのでしょうか?
- 71 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 18:06:38 ]
- とりあえず、英大文字・小文字は1文字づつyaccにあげればいいんじゃ?
で16進数の構文をyaccで定義すれば?
- 72 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 18:23:56 ]
- yacc デカルチャー
- 73 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 18:59:52 ]
- >>72
なんつー古さだ(20年前ぢゃねぇか:実はperlネタのところでも見かけた)
- 74 名前:デフォルトの名無しさん [2007/12/20(木) 21:00:53 ]
- >まあパーサからレクサへ状態を渡す
こんなことできたっけ?
- 75 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:10:24 ]
- レクサーを自前なら可能だけど、lexではできない。flexはしらね
- 76 名前:デフォルトの名無しさん mailto:sa [2007/12/20(木) 22:18:47 ]
- (f)lexはlexer内で状態遷移できるよ。Cのコメント分を字句解析するときに使う奴。
- 77 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:51:15 ]
- >>71
本当に1文字づつ以外読まないのなら、字句解析を一切していないのと変わらないと思うんだがw
- 78 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 03:07:51 ]
- >>73
最近よく見かけるようになったのは 再放送してるからだろうw
- 79 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 07:11:04 ]
- >>77
字句解析一切していないからってそれがどうしたんだよ。
- 80 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 13:48:08 ]
- 字句解析が不要ってこと?
- 81 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:55:50 ]
- え?字句解析してない?しまった〜〜下手こいた〜〜〜
ズン・ズン・ズン・ズン
- 82 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 19:00:40 ]
- ツマンネ
- 83 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:32:43 ]
- >>53
MikoScript面白いですね。 リレー型関数コール演算子は、Rubyみたいに、下手な既存classの拡張をせずとも、 メソッドを追加したように見せかけたり、 既存の関数を、作成したclassのメソッドのように見せかけたりできる。 puts("hoge"); を "hoge"'puts; と書いたり、 a = int(1234.56) を a = 1234.56'int と書いたり。 代入型の関数コール形式は、 言語仕様としては、シンタックスシュガーの域を出ないが、 全てがオブジェクトではない、言語にはよさそうな仕様。 コマンド型の関数コール形式は、ま、いらんなw ところで、箱がいまいちわからん???
- 84 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:33:12 ]
- > 代入型の関数コール形式は、
> > 言語仕様としては、シンタックスシュガーの域を出ないが、 > 全てがオブジェクトではない、言語にはよさそうな仕様。 代入型の関数コール形式も、 言語仕様としては、シンタックスシュガーの域を出ないが、 全てがオブジェクトではない、言語にはよさそうな仕様。 ミス・・・
- 85 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 03:49:24 ]
- どのへんが本格的なの?
- 86 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 13:42:40 ]
- xtal
code.google.com/p/xtal-language/
- 87 名前:デフォルトの名無しさん [2008/01/01(火) 16:03:44 ]
- >>41
こんな感じで他の大学も講義の資料公開(?)してくれると嬉しいな。 講義で使ってる本の紹介だけでもいい。 アメリカみたいに講義をpodcastで公開してくれなくてもいいから 雑誌も減ってきてるし、なかなか体系だって勉強できるネタが少ないのが最近の悩みだから
- 88 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:14:04 ]
- おっぱいそん入門
ぷりんとぼいん ”こんにちは おっぱい!”
- 89 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:16:58 ]
- >>87
ガベージコレクションが気になった mallocをGC_MALLOCに変えるだけでfleeいらずとはこれいかに
- 90 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:29:50 ]
- >>89
Keep your dog free from flea!
- 91 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:32:08 ]
- >>90
OK. I understand!!! Thanks. :D
- 92 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:07:36 ]
- これいかに、ってベームGCだろ条項
- 93 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:25:54 ]
- ぼえーむじーしーと読んでたのは俺とお前だけの秘密だぜ
- 94 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:53:27 ]
- La BohemeGC
- 95 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:08:29 ]
- ぼへむじーしーってよんだmした><
- 96 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 10:16:26 ]
- オペラだったらボエームって読んでええんでないの?
- 97 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 16:06:38 ]
- BGCか
- 98 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 23:46:38 ]
- ふと思ったんだが、バイトコードのコンパイラって可能?
例えば、Javaとか.NETのソースをコンパイルしてできた、バイトコードをネイティブ形式にコンパイルする
- 99 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 23:49:11 ]
- GCJはclassファイルをネイティブにコンパイルしてるよ
- 100 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 00:03:08 ]
- >>98
なんのための JIT なんだ?
|

|