■ このスレッドは過去ログ倉庫に格納されています
「コンパイラ・スクリプトエンジン」相談室15
- 1 :デフォルトの名無しさん:2011/01/28(金) 20:33:18 .net
- プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。
■過去スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/
3 http://pc5.2ch.net/test/read.cgi/tech/1070089173/
4 http://pc5.2ch.net/test/read.cgi/tech/1100097050/
5 http://pc8.2ch.net/test/read.cgi/tech/1106129164/
6 http://pc8.2ch.net/test/read.cgi/tech/1115335709/
7 http://pc8.2ch.net/test/read.cgi/tech/1129287390/
8 http://pc8.2ch.net/test/read.cgi/tech/1131273918/
9 http://pc8.2ch.net/test/read.cgi/tech/1135082582/
10 http://pc8.2ch.net/test/read.cgi/tech/1146844753/
11 http://pc11.2ch.net/test/read.cgi/tech/1160879890/
12 http://pc11.2ch.net/test/read.cgi/tech/1188688416/
13 http://pc12.2ch.net/test/read.cgi/tech/1233143342/
14 http://hibari.2ch.net/test/read.cgi/tech/1258431145/
- 2 :デフォルトの名無しさん:2011/01/28(金) 20:33:40 .net
- Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
★コンパイラ一般
・色々なツールの紹介
http://catalog.compilertools.net/
・コンパイラ関連のリンク集
http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml
・スクリプティング言語資料室(仮) (リンク集)
http://www.kt.rim.or.jp/~kbk/
・Compiler Construction
http://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/
・情報システム工学実験 III コンパイラ・コンパイラ
http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html
・OS/Programming 簡単な C コンパイラ
http://www.csg.is.titech.ac.jp/~chiba/lecture/os/
・正規表現
http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm
・コンパイラ研究・開発情報の一集積所
http://compilers.cs.uec.ac.jp/
・Links and Selected Readings
http://www.gnu.org/software/gcc/readings.html
・国産のコンパイラ共通インフラストラクチャCOINS
http://www.coins-project.org/
- 3 :デフォルトの名無しさん:2011/01/28(金) 20:33:55 .net
- ★字句・構文解析
・Lex and YACC primer/HOWTO (邦訳)
ttp://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html
・Turbo Pascal Lex/Yacc
http://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を同時に使う
http://guppy.eng.kagawa-u.ac.jp/2005/SysProg/both.html
・KITE_ASM (yacc,lex)
http://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
http://www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP)
ttp://www.jflex.de/
・SableCC
ttp://www.sablecc.org/
・¬<><∪∪ (notavacc)LALR(1)
http://ne.cs.uec.ac.jp/~koto/notavacc/
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
http://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 :デフォルトの名無しさん:2011/01/28(金) 20:34:10 .net
- ★ごみ集め
・GC FAQ -- draft
http://www.iecc.com/gclist/GC-faq.html
・A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/
・一般教養としての Garbage Collection
http://www.is.s.u-tokyo.ac.jp/vu/jugyo/processor/process/soft/compilerresume/gc/gc.html
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
http://www.amazon.com/exec/obidos/ASIN/0471941484/
★処理系,スクリプト
・kikyou.info (吉里吉里というゲームのスクリプト)
http://kikyou.info/
・tiny C コンパイラ (C)
http://www.watalab.cs.uec.ac.jp/tinyCabs.html
・6809用 Micro C コンパイラ
http://www.axe-inc.co.jp/pds/mc09.html
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
http://users.pandora.be/stes/compiler.html
・自作コンパイラの部屋(PL/1, Pascal等)
http://www.tokumaru.org/
・『Rubyソースコード完全解説』サポートページ
http://i.loveruby.net/ja/rhg/
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
http://www.okisoft.co.jp/esc/go.html
・MSによるPEフォーマット仕様書(日本語)
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
- 5 :デフォルトの名無しさん:2011/01/28(金) 20:34:35 .net
- ★学会
・PLDI http://research.microsoft.com/conferences/pldi06/
コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL http://www.cs.princeton.edu/~dpw/popl/06/
PLDIよりは理論寄りだが大いに参考になる。
・ICFP http://icfp06.cs.uchicago.edu/
関数型言語に関する学会。とても難しい。
・OOPSLA http://www.oopsla.org/
オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC http://www.st.cs.uni-sb.de/cc/
ヨーロッパ系。派手さはないが堅実。
- 6 :デフォルトの名無しさん:2011/01/28(金) 20:35:22 .net
- ★参考書籍
・コンパイラ 原理・技法・ツール 1&2
http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
http://www.amazon.co.jp/exec/obidos/ASIN/4781905862/
通称ドラゴンブック。バイブル。
・コンパイラ構成法 原田 賢一
http://www.amazon.co.jp/exec/obidos/ASIN/4320029224/
http://www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード)
・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
http://www.amazon.co.jp/exec/obidos/ASIN/4000103458/
一冊で済ませたい人へ。
・コンパイラの構成と最適化 中田 育男
http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/
最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。
・コンパイラの仕組み 渡邊 坦
http://www.amazon.co.jp/exec/obidos/ASIN/4254127081/
薄い奴(185p)を読みたい人に。
・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
http://www.amazon.co.jp/exec/obidos/ASIN/0321131436/
まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
http://www.cbook24.com/bm_detail.asp?sku=4774121770
初心者向けの優しい解説本。
- 7 :デフォルトの名無しさん:2011/01/28(金) 20:35:38 .net
- ・最新コンパイラ構成技法(Modern Compile Implementation in ML(タイガーブック)の訳)
http://www.amazon.co.jp/dp/4798114685
・ふつうのコンパイラをつくろう
http://www.amazon.co.jp/dp/4797337958
・プログラミング言語を作る
http://www.amazon.co.jp/dp/4774138959
・やさしいインタープリタの作り方入門
・やさしいコンパイラの作り方入門
http://www.amazon.co.jp/dp/487783219X
http://www.amazon.co.jp/dp/4877832203
- 8 :デフォルトの名無しさん:2011/01/28(金) 21:45:32 .net
- >>1
スレ立て乙
前スレ終盤で「漢字嫁ねカタカナ表記の方が分かり易くね?」というカキコに対して賛否あった。
で、手元に「翻訳系構成法序論」という1982年刊行の古い本があるけど、
題名で分かるように(w)徹底的に漢字を使う。この本から「さ行」の一部を引用してみる。
元の英単語は、このスレに興味を持つようなヤシなら誰でも知っているものばかり。
お前ら、対応する英単語を即答できるか?(カナでも可とする)
・算体
・算帖
・算程
・算譜
・算法
- 9 :デフォルトの名無しさん:2011/01/28(金) 22:09:06 .net
- >>4
>・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
> http://www.okisoft.co.jp/esc/go.html
URL が変更になっていました。
http://www.oki-osk.jp/esc/go.html
- 10 :デフォルトの名無しさん:2011/01/29(土) 04:39:23 .net
- タイガーブックは硬い訳で、言い回しが多少くどい
すらすら読めるところもあるんだけどたまに引っかかって、文意を解くのに疲れる
いい本だとは思うけどね
- 11 :デフォルトの名無しさん:2011/01/29(土) 08:28:51 .net
- ・算体 データ?
・算譜 プログラム
・算法 アルゴリズム
残りはわからん。
- 12 :デフォルトの名無しさん:2011/01/29(土) 11:11:21 .net
- 算体 object
算帖 file
算程 process
算譜 program
算法 algorithm
- 13 :デフォルトの名無しさん:2011/01/29(土) 13:04:45 .net
- Holub氏のCompiler Design in Cと言う本を持ってる人いませんか?
譲り受けた物が手元にあるのですが、最後にピンク色の破線で切り離せるっぽい頁があったみたいなのですが、切り離されていました。
これが何だったのか気になりましてw
- 14 :8:2011/01/29(土) 13:24:01 .net
- >>12
素晴らしい。全問正解だ。
>>11
それが(自分を含めて)普通の感覚だと思うよ。
ちなみにこの本では、前スレで誰かが言ってた初出の箇所は「漢字(英単語)」という表記で、
しかも巻末にまとめとして対訳表があるから、漢字だらけでも苦痛に感じられなかった。
- 15 :デフォルトの名無しさん:2011/02/02(水) 00:51:19 .net
- BNFとか全然わかんね
力押しでゴリゴリ動かしてるぜー
- 16 :デフォルトの名無しさん:2011/02/02(水) 07:38:31 .net
- BNF は読み書きできるようになった方がいい
構文解析分野共通の言語あるいは図解フォーマットみたいなものだから
- 17 :デフォルトの名無しさん:2011/02/02(水) 07:59:04 .net
- >>16
BNFとか見てるとなんでlexとyaccに分解されちゃうのか時々わかんなくなる(自己記述可能な言語でパーサ書いたあととか特に)
- 18 :デフォルトの名無しさん:2011/02/02(水) 08:10:30 .net
- 中間言語経由した方が便利だからじゃね?
- 19 :デフォルトの名無しさん:2011/02/02(水) 13:38:59 .net
- 当時のハード・ソフトでは字句解析と構文解析を分けないと、時間のかかるεNFAからDFAの変換が
どうしようもなく時間がかかるようになるからでない
- 20 :デフォルトの名無しさん:2011/02/02(水) 16:15:26 .net
- 片方だけ利用って局面が稀にあるから独立してないと困るな
ツール的にはむしろyacc(bison)は更に2つに分かれてた方が助かる
状態と遷移表の抽出結果を入力として、表圧縮とソース成形の機能だけ利用したい時があるんだよね
入力内の遷移表にshift/goto/reduce以外の独自操作を定義追記出来る形ならなお良い
- 21 :デフォルトの名無しさん:2011/02/02(水) 18:09:47 .net
- >>15
BNFが使えるようになれば、言語処理系以外の
一般的なデータ構造の記述(定義)にも応用がきくから、慣れた方がいいと思う。
BNFが難しければ、最初は構文図(Syntax Diagram)でスケッチして、
それをBNFに書き換えるという練習をするのがいいと思われ。
構文図については、たとえば http://www.json.org を参照。
他にもググるといくつも例が見つかるから、自分で調べてね。
- 22 :デフォルトの名無しさん:2011/02/02(水) 20:50:57 .net
- >>17
言語定義の規模が大きくなるから機能分割しているのではないかと。
より一般的な言い方をすれば、字句解析(下位層)と構文解析(上位層)への階層化。
階層化によって、>>19が指摘した効率化(処理の高速化)という利点も生まれる。
実用的な言語レベルの規模になると、lex/yaccのようなパーサジェネレータを使わずに
実装された例としては、自分の知る限りSmalltalkしかない。(Lisp/Prolog系は別格なので除く)
しかもSmalltalkの構文は二項演算子に優先度が無い等、かなり簡素な定義になっている。
また、自己記述可能な言語としては、自分はPrologのDCG(Definite Clause Grammer)を
使うことが多いけど、定義言語の規模が小さくても意識的にscannerとparserに分割して書いているよ。
- 23 :デフォルトの名無しさん:2011/02/02(水) 20:57:14 .net
- スキャナがパーサの状態に依存する言語は多いけどな
- 24 :デフォルトの名無しさん:2011/02/02(水) 21:08:01 .net
- >>22
gccは手書きだよ
- 25 :デフォルトの名無しさん:2011/02/02(水) 21:12:28 .net
- >>23
Rubyとかは、その典型例だね。
Rubyは人に優しい言語だから自分は大好きだけど、中の人にはなりたくないw
- 26 :22:2011/02/02(水) 21:33:40 .net
- >>24
えええっ!、そうなんだ。知らんかったよ。
- 27 :デフォルトの名無しさん:2011/02/02(水) 22:09:56 .net
- ていうか今時の言語だとたいがいパーサは手書きでしょ
- 28 :デフォルトの名無しさん:2011/02/02(水) 22:28:26 .net
- ここはポコポコオレ様言語を作るスレだろ。
- 29 :デフォルトの名無しさん:2011/02/03(木) 00:49:17 .net
- >>24
よく知らんのだけど、
パーサジェネレータの吐いたコードを下敷きにしてるとかじゃなかったっけ?
エラーメッセージの丁寧さがうんたらかんたら
- 30 :デフォルトの名無しさん:2011/02/03(木) 02:06:06 .net
- エラーメッセージじゃなくて、エラーハンドリングが丁寧ね。
構文エラーでも、コンパイル続けたいし。
字句解析/構文解析分割については、
字句解析ないと、BNFレベルで字句解析もやることになるから、
予約語や数値リテラルの解析なんかも全部BNFに入ってくる。
嬉しいことなんてないと思うが。
- 31 :デフォルトの名無しさん:2011/02/03(木) 07:49:27 .net
- そこで PEG ですよ
- 32 :デフォルトの名無しさん:2011/02/03(木) 10:55:17 .net
- >>22
FORTRANとCOBOLに火炎瓶投げられても知らんぞw
- 33 :デフォルトの名無しさん:2011/02/03(木) 16:43:02 .net
- 俺、A=aAa|aに相当するPEG(若干違った鴨)が2^(n-1)個のaを表すってのを知ってPEGがわからなくなった
ぐぐったらちょうどこの文法がPackrat Parserで受理出来ないって英語版Wikiにかいてあるね
- 34 :デフォルトの名無しさん:2011/02/15(火) 00:13:48 .net
- 書籍「コンパイラの構成と最適化」 で分からないところがあったので質問させてください。
13.4 SSA形式での最適化のアルゴリズム の 13.4.6 定数伝播 内の、
b. 条件文を考慮したアルゴリズム の部分です(第2版ではp.367)。
図13.41 の定数伝播の例(その1)(c) にて、
k3 = φ(k2,k1);
の行を処理した結果が 未→0 となっていますが、この理由が分かりません。
この時点で
k1→1
k2→0
なので、表13.1 により、不定(c≠c') になるのではないでしょうか。
- 35 :デフォルトの名無しさん:2011/02/15(火) 06:57:14 .net
- >>22
lispのリーダーマクロみたいな仕組みで別言語に化けられる奴とかってないかな?
- 36 :デフォルトの名無しさん:2011/02/15(火) 10:46:32 .net
- Scheme実装であるPLT Schemeが発展したracketに
言語開発フレームワークがある。
Algol 60の例
http://docs.racket-lang.org/algol60/index.html
- 37 :デフォルトの名無しさん:2011/02/16(水) 02:23:51 .net
- LR(1)において、規則左辺と右辺と先読み記号の組 A->αβγ..., aにおいて、先読み記号はどのように決定されるのですか?
- 38 :デフォルトの名無しさん:2011/02/16(水) 10:43:23 .net
- AのFollow-setでいいんじゃない
- 39 :デフォルトの名無しさん:2011/02/16(水) 13:27:01 .net
- ありがとうございます。
- 40 :デフォルトの名無しさん:2011/02/16(水) 13:29:47 .net
- すみません。なんだか37も日本語おかしいですね。死にます。
- 41 :デフォルトの名無しさん:2011/02/16(水) 20:25:50 .net
- L -> E
E -> a
E -> a b
のとき、first(E) in follow(L)なのでしょうか?
Eはepsilonを生成しないのでfollow(L) = phiだと思うのですが...
ドラゴンブックによる解説だと
(1) A -> alpha B betaの時
follow(B) := first(beta)∪follow(B)\epsilon
(2) A -> alpha B betaでepsilon in first(beta)もしくは A -> alpha Bの時
follow(A) := follow(B)∪follow(A)\epsilon
なのであっている気がするのですが...
- 42 :デフォルトの名無しさん:2011/02/16(水) 20:28:29 .net
- すみません。言葉足らずでした。
6行目は「のとき、follow(E) in follow(L)なのでしょうか?」が正しいです。
それと、自分で組んだ実装では、follow(L)はfollow(E)を含みませんでした。
タイガーブックにある例とドラゴンブックにある例をパスしましたが、これが気になって先にすすめません。
- 43 :デフォルトの名無しさん:2011/02/17(木) 04:45:27 .net
- 立て続けにすみません。
生成規則の右辺に出てくる終端記号以外に関してはfollow集合は作らなくても大丈夫なんですか?
- 44 :34:2011/02/17(木) 23:42:20 .net
- COINSのソースを読んで解決しましたので、質問を取り下げます。
ところで、LLVM の '条件文を考慮した定数伝播' って実装途中なんですかね。
肝心な部分の処理が足りてない気がします。
- 45 :デフォルトの名無しさん:2011/02/18(金) 20:01:09 .net
- SECDとbf間のトランスレータってありますか?
- 46 :デフォルトの名無しさん:2011/03/08(火) 15:30:02.50 .net
- 月刊・コンパイラ。
毎号付属するモジュールを組み立てていくと、あなたオリジナルのコンパイラが完成します。
創刊号は字句解析器が付いて1200円。
ディアゴスティーニ♪
- 47 :デフォルトの名無しさん:2011/03/08(火) 15:41:47.02 .net
- ぷよぷよ
- 48 :デフォルトの名無しさん:2011/03/08(火) 15:45:30.82 .net
- 付属のモジュールを組み立てるだけなのにオリジナルとは一体
- 49 :デフォルトの名無しさん:2011/03/08(火) 15:48:35.94 .net
- ウリジナルニダ
- 50 :デフォルトの名無しさん:2011/03/21(月) 21:10:43.51 .net
- 旧版ドラゴンブックp296 アルゴリズム4.12の『先読みの決定』について疑問があります。
----
for K の中の各項 B -> γ.δ do begin
J' := closure {[B -> γ.δ, #]}; // (1)
if a を # 以外の記号として、[A -> α.Xβ, a] が J' に含まれている then
goto(I, X) の中の項 A -> αX.β に対して、先読み a が内部生成される;
if [A -> α.Xβ, #] が J' に含まれている then
I の中の B -> γ.δ から goto(I, X) の中の A -> αX.β に先読みを伝播する;
end
----
ここで例えば拡大文法の開始部分 {[S' = .S, #]} で4.12が開始されると
その goto(I, X) の中で {[S' = S., #]} とドットの位置がひとつ右に動かされ、その状態で closure({[S' = S., #]}) と実行されるので
後半部分の closure はドットの位置が最後にあり実行される意味がなく、
それ以上伝達が起こらないと思うんですが実際のアルゴリズムはどうなんでしょうか?
自分で書いたコードでも、上記の通り伝達が S' = S. までしか起こりませんでした。
- 51 :デフォルトの名無しさん:2011/04/03(日) 14:41:58.25 .net
- 基本的にCを元に、ちょっと改造したC作ってみたいんだけど、
参考しても(パクっても)GPLに汚染されない、無料なwindows向けのCのソースってない?
- 52 :デフォルトの名無しさん:2011/04/03(日) 15:26:35.67 .net
- >>51
http://pcc.ludd.ltu.se/building/
- 53 :デフォルトの名無しさん:2011/04/03(日) 15:40:34.51 .net
- >>52
ありがとう。
でもmingw32(gcc)のライブラリが必要っぽいんだけど、
ライブラリだけなら、汚染されないんだっけ?
- 54 :デフォルトの名無しさん:2011/04/03(日) 15:45:39.15 .net
- >>53
http://www.mingw.org/license
- 55 :デフォルトの名無しさん:2011/04/03(日) 15:47:16.95 .net
- http://www.mingw.org/license
- 56 :デフォルトの名無しさん:2011/04/03(日) 15:59:21.58 .net
- >>54
なるほど、大丈夫なんですね。
w32apiの
> If distributed as a modified package, then a copy of this notice must be included.
の部分は
> This library is distributed in the hope that it will be useful, but WITHOUT WARRANTY OF ANY KIND;
> without even the implied warranties of MERCHANTABILITY or of FITNESS FOR A PARTICULAR PURPOSE.
を通知しなさいってことでOK?
- 57 :デフォルトの名無しさん:2011/04/03(日) 16:12:55.55 .net
- >>56
自分なら w32api: のパラグラフ全文を入れると思う
- 58 :デフォルトの名無しさん:2011/04/03(日) 16:27:15.86 .net
- >>57
全文入れれば間違いないのは分かるけど、文章の掛かってる部分はどこなのかと…
まぁ、取り合えず、GPLにはならないことは間違いなさそうなので、
もう少し良く考えて、分からなければ、全文にします。
- 59 :デフォルトの名無しさん:2011/04/03(日) 16:41:19.25 .net
- >>58
>文章の掛かってる部分
だから w32api: の項目全文でしょ
1. This library... の部分は免責の事しか書いていない(利用制限をしてはいけないという条項が入っていない)
2. This library... の部分だけなら、"the notice below must be included." みたいに書く筈
他人の助言を信じるにせよ信じないにせよ、Use at your own risk.
- 60 :デフォルトの名無しさん:2011/04/05(火) 10:46:46.58 .net
- クラウドコンパイラーってないの?
手元でやるより超高速で出来そうじゃないか?
- 61 :デフォルトの名無しさん:2011/04/05(火) 10:55:07.51 .net
- 昔SourceForge.jpがやってた。
- 62 :デフォルトの名無しさん:2011/04/05(火) 20:34:39.93 .net
- 西日本も福島原発の放射能に曝される。
4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
- 63 :デフォルトの名無しさん:2011/04/06(水) 02:55:03.68 .net
- >>61
どうして止めたんだろう
- 64 :デフォルトの名無しさん:2011/04/13(水) 20:18:35.44 .net
- ANTLRの*.gって日本語書けないの?
コメントすら日本語入れるとinternal errorとかいってくれちゃうんだけど、
何か設定なりオプションなり加えれば通るのかしら。
- 65 :デフォルトの名無しさん:2011/05/05(木) 18:19:53.36 .net
- hosyu
- 66 :デフォルトの名無しさん:2011/05/06(金) 23:53:19.79 .net
- BNFで検索すると2ちゃんねるとかいうわけのわからない検索結果ばかり出てくるんだけど。
2ちゃんねるってなんなの。シネよ。
- 67 :デフォルトの名無しさん:2011/05/07(土) 14:01:54.75 .net
- バッカス-ナウアー記法で親父ギャグが飛び交ってないだけマシ
エイホは知らんが。
- 68 :デフォルトの名無しさん:2011/06/10(金) 05:34:32.17 .net
- 下降型の構文解析のエラー処理をどうしたらよいのか考えているのですが、
どうも、うまく出来ません。
できれば、エラー復帰もできるとうれしいのですが、そういう話の前に、
エラーをうまく管理できてないので、ちゃんと管理したいんです。
エラーコード表つくって、エラー発生時はエラーコードから、メッセージを取り出せば、
管理は出来そうな気はしてます。
みなさんはどのようにしてますか?
- 69 :デフォルトの名無しさん:2011/06/10(金) 11:11:28.61 .net
- http://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part2/Chap5.html#sc16
が参考になると思う。オリジナルは、
http://wiki.clean.cs.ru.nl/Documentation
- 70 :デフォルトの名無しさん:2011/06/10(金) 14:15:01.54 .net
- ドラゴン2版の字句解析器の章で一番最後に乗ってる
表をずらして保存して圧縮するアルゴリズムの一般的な名前ってなんですか?
- 71 :デフォルトの名無しさん:2011/06/12(日) 03:55:38.58 .net
- https://github.com/tolmasky/language
- 72 :デフォルトの名無しさん:2011/06/14(火) 07:45:32.22 .net
- http://chris.wailes.name/?page_id=97
- 73 :デフォルトの名無しさん:2011/06/14(火) 19:09:26.75 .net
- 常識無いな
何のコメントも無しにリンク張るなよ紛らわしい。
- 74 :デフォルトの名無しさん:2011/06/14(火) 19:20:31.08 .net
- ご立腹ですねw
- 75 :デフォルトの名無しさん:2011/06/18(土) 15:52:19.34 .net
- >69
ありがとうございます。参考になります。
>>71 が JavaScriptで書いたPEGのパーサ
>>72 がRubyで書いた、パーサやら、LLVMのなにか
みたいですね。
- 76 :デフォルトの名無しさん:2011/06/21(火) 01:35:14.66 .net
- 言語処理系入門したいんですが、ドラゴンブックから入ればいいんですかね?
プログラミング歴はそれなりで、構造化されたものを読むのに
なんとなく再帰下降型のパーサを書くくらいのことはできます
情報科学については学部レベルの知識……かなぁ
仮想マシンの設計や JIT コンパイルとかやってみたいのです
- 77 :デフォルトの名無しさん:2011/06/21(火) 03:14:19.87 .net
- >>76
仮想マシンはドラゴンブックでいいかもしれんがJITだとあんまり良い書籍無いような気がする
JITで良い書籍あったら自分も読みたい
#第一版しかもってないからかもしれんけど
- 78 :デフォルトの名無しさん:2011/06/21(火) 06:56:57.61 .net
- JITコンパイルについて詳しいことが書かれた成書って無いんじゃないかなぁ
- 79 :デフォルトの名無しさん:2011/06/21(火) 12:02:57.47 .net
- >>76
具体的なことまで読みたくなると、ドラゴンブックだけでは足りない。
もちろんドラゴンブックだけで書いてしまう人もいる。
JITはインタプリタ、コンパイラ、リンカ、機械語の知識が必要になるので、
いきなりJITを目指さないほうがいいと思う。仮想機械方式にしておけば、
コンパイラからJITへの発展は、ほぼ仮想機械の書き換えで済む。
tccにJITを付けるプロジェクトが幾つかあったはずだが、今はもうないようだ。
- 80 :デフォルトの名無しさん:2011/06/21(火) 12:06:28.43 .net
- 最近だとLLVMを触ってみるのもいいかもしれんねぇ
それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた
- 81 :デフォルトの名無しさん:2011/06/21(火) 12:08:02.99 .net
- 英語読めるならこの辺りをとっかかりに。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.3985&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.71.3303&rep=rep1&type=pdf
- 82 :デフォルトの名無しさん:2011/06/21(火) 12:08:57.15 .net
- >>80
タイガーブックのほうが実際的だね。
ドラゴンブックは網羅的概論。
- 83 :デフォルトの名無しさん:2011/06/21(火) 12:48:38.80 .net
- これはドラゴン、タイガーの中間くらい?
http://www.amazon.co.jp/dp/012088478X/
- 84 :デフォルトの名無しさん:2011/06/21(火) 12:58:12.07 .net
- 竜虎って言うけどまさに言葉どうりの2冊だな。
- 85 :デフォルトの名無しさん:2011/06/21(火) 21:02:38.80 .net
- うちの先生は「二つ組み合わせるのがよい」とか言ってたな
フロントエンドはドラゴンのほうが詳しいが、
最適化の部分はタイガーのほうが良いとか
- 86 :76:2011/06/22(水) 02:51:12.37 .net
- おおう沢山のアドバイスありがとうございます
JIT がレベル高そうな直感はありました
参考にさせて頂きつつ段階的に勉強したいと思いますです
- 87 :天使 ◆uL5esZLBSE :2011/07/03(日) 00:41:34.13 .net
- ----
((((((((( 最近だとLLVMを触ってみるのもいいかもしれんねぇ )))))))))(キリッッッッ!!キリッッッッ!!!!キリッッッ!!キリッッ!ッッッ!
----
(((((( それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた ))))))(←キリッッッ!!キリッッ!キリッ!!!!ッッ
--------------(キリッッ
ゴミは何いってもゴミ
- 88 :デフォルトの名無しさん:2011/07/03(日) 15:35:05.84 .net
- https://github.com/GenTiradentes/tinyvm
- 89 :デフォルトの名無しさん:2011/07/04(月) 10:40:16.73 .net
- Flex2.5.4を使用しています。
355/113のような文字列を分数として認識させたいと思い、後続コンテキストを使用して
ureal {uinteger}|{numerator}\/{uinteger}
numerator {uinteger}/\/
uinteger [:digit:]+
のように定義を書いてみたのですが、
urealのルール部分でunrecognized ruleというエラーになってしまいます。
(意図しているのは、「スラッシュが続く無符号整数を分母と認識する」というものです)
ルールnumeratorが悪いのか、一時的に
ureal {uinteger}|{uinteger}\/{uinteger}
と置くとエラーは無くなるのですが、正しい書き方とはどのようなものでしょうか。
- 90 :89:2011/07/04(月) 11:57:48.68 .net
- 自己解決しました。
| と / では | の方が優先度が高かったため、
{uinteger2}|{numerator2}\/{uinteger2}
だと、
({uinteger2}|{numerator2})\/{uinteger2}
として解釈されていたようです。
{uinteger2}|({numerator2}\/{uinteger2})
のように括弧をつけたところエラーがなくなりました。
- 91 :89:2011/07/04(月) 12:02:36.54 .net
- すいません、誤報でした
何度か弄っている間にnumeratorの後ろの /\/ を誤って消してしまっていて
numerator {uinteger}
になっていました。
- 92 :デフォルトの名無しさん:2011/07/04(月) 12:06:31.36 .net
- Flex「落ち着いて!」
- 93 :89:2011/07/04(月) 12:15:13.40 .net
- やりたいことが単純すぎて、どこに盲点があるのか…
暑くて半分頭茹ってるし。へるぷ
- 94 :89:2011/07/04(月) 12:31:56.41 .net
- 次こそは間違いないはずだ!
Lex とFlex では定義の展開の方法が違います。Flex(およびPOSIXのドラフト仕様)は、
定義を展開する時に丸括弧( ) で囲みますが、Lex は囲みません。
このことは、Flex 定義では演算子`^'、`$'、`/'、`<<EOF>>'、および`<start state>'は使うことができない
ということを意味しています。
だって(マニュアル8章)。
-l コマンドオプション使ったら排他的スタート状態を使えなくなるし…。うーあー。
- 95 :デフォルトの名無しさん:2011/07/06(水) 10:22:42.74 .net
- ジャングルブックってのもあるらしいぞ
- 96 :デフォルトの名無しさん:2011/07/06(水) 18:11:18.05 .net
- ジュマンジ。
- 97 :デフォルトの名無しさん:2011/07/12(火) 15:25:19.44 .net
- 色々な本読むと先読みするのを1文字にするのが滅茶苦茶大事みたいな雰囲気がひしひしと伝わって来るんですけど
そんなに大事とは思えないのは俺だけ?
- 98 :デフォルトの名無しさん:2011/07/12(火) 15:47:12.36 .net
- 読み直し
- 99 :デフォルトの名無しさん:2011/07/12(火) 17:32:18.65 .net
- 昔はこだわったけど、
つまり1文字先読みだけで解析できればメモリも消費しないし、
入力ファイルを先頭からサーッとなめるだけで終わる。
現代ではぜんぜん大事ではないね。
- 100 :デフォルトの名無しさん:2011/07/12(火) 17:38:15.85 .net
- >>99
> 入力ファイルを先頭からサーッとなめるだけで終わる。
何文字先読みしようがここは変わらんだろ。
- 101 :デフォルトの名無しさん:2011/07/12(火) 17:48:45.83 .net
- ワンパスで処理しきれん時代も今は昔、だな
- 102 :デフォルトの名無しさん:2011/07/15(金) 12:43:55.55 .net
- re2c 0.13.5で使用しています。
いくつかのルールからなる正規表現の、各部分を検出するごとにアクションを実行したいのですが、
一番長い(最長一致)ルールのアクションしか実行してくれません。
このような動作をさせるのはre2cでは不可能なのでしょうか。
re2c 0.13.5で現在、以下のコマンドラインで実行しています。
re2c -i -w -o "lexer2.cpp" "lexer2.re"
- 103 :デフォルトの名無しさん:2011/07/15(金) 14:30:29.02 .net
- re2cには最短一致指定がないしねえ。
- 104 :デフォルトの名無しさん:2011/08/04(木) 11:29:59.04 .net
- ウイルスが作成が犯罪になるからオートマトン全体を表すクラスの中にウイルスが存在するから
これからはウイルスを含むクラスとの差を取らないといけなくなるな。
- 105 :デフォルトの名無しさん:2011/08/04(木) 12:34:27.81 .net
- ウイルスを含まないオートマトン全体の集合……パラドックス発生の臭い……!
- 106 :デフォルトの名無しさん:2011/08/04(木) 13:39:08.78 .net
- セル・オートマトンじゃないんだから増殖しないでしょ。
受理するだけなんだから。
- 107 :デフォルトの名無しさん:2011/08/04(木) 13:52:16.06 .net
- オートマトンの定義をみなおしてこい。
- 108 :デフォルトの名無しさん:2011/08/23(火) 14:28:26.14 .net
- 新しい言語を作りたいのだけど
関数型とか手続き型とかじゃなくて、既存にない新しい型の言語を作りたいけど
そんな型はもう発見できないのでしょうか?
- 109 :デフォルトの名無しさん:2011/08/23(火) 15:39:00.90 .net
- 設計したところで、実装しなければ絵に描いたモチなので、
まずは実装する腕力を付ける必要がある。
なのでまずは手続き型でも関数型でも、なんでもいいから簡単なものを実装してみること。
- 110 :デフォルトの名無しさん:2011/08/23(火) 15:45:01.70 .net
- 「関数型とか手続き型」ってくらい大きく枠組みを変える話なら、
新しい計算モデルを考えないといけないよねえ。
- 111 :デフォルトの名無しさん:2011/08/23(火) 15:49:23.58 .net
- 絵に描いた餅といえば、
Steele先生のConnection Machine Lispは面白かった。
立派な餅だった。
(*Lispの方じゃないよ)
- 112 :デフォルトの名無しさん:2011/08/23(火) 16:11:23.23 .net
- >>108
頑張って発明しろ
- 113 :デフォルトの名無しさん:2011/08/23(火) 20:55:42.94 .net
- >>108
これからのパラダイムと言えば、「確率的コンピューティング」かな。
http://slashdot.jp/science/article.pl?sid=09/02/11/0219213
http://slashdot.jp/hardware/article.pl?sid=11/03/23/0228212
http://slashdot.jp/developers/article.pl?sid=11/06/07/0151249
- 114 :デフォルトの名無しさん:2011/08/27(土) 11:06:00.49 .net
- >>108
キューマシンに特化したような言語はまだないと思うから、それ作ってみたらどうよ。
VMの実装も簡単な部類みたいだし。
キューマシンの研究そのものがマイナーだから、自分でいろいろ考えなきゃだけど、
それを楽しんだり発表したりしたいんだよな?
- 115 :デフォルトの名無しさん:2011/08/27(土) 13:02:13.55 .net
- FIFOLか
- 116 :デフォルトの名無しさん:2011/08/27(土) 13:32:50.45 .net
- 結局キューじゃ順序に制約が多すぎて、
データフロー計算やることになる。
データフロー計算は昔流行ったので、特化言語も結構ある。
昔、九州大学でやってて、九大は関数型がメインだった。
- 117 :デフォルトの名無しさん:2011/08/28(日) 09:13:50.59 .net
- ドラゴンブック2みたら
重要状態とはε遷移を含む状態である。
って訳してあるけど原著を見ると
重要状態とはε以外の遷移を持つ状態である。
の誤訳だな。
ドラゴンブックの翻訳、訳者は内容わかってなくて翻訳したんだろうな。
- 118 :デフォルトの名無しさん:2011/08/28(日) 09:21:51.31 .net
- 157ページに set alreadyOn[s] to TRUE
って書いてあるけど、これってnewStateの状態だから
TRUEにするっていうのは間違いですよね?
ドラゴンブック2の原著です。
- 119 :デフォルトの名無しさん:2011/08/28(日) 10:03:31.25 .net
- 誰も興味ないと思うけど訂正するよ
含む状態→含まない状態
- 120 :デフォルトの名無しさん:2011/09/17(土) 00:56:25.04 .net
- ttp://www.geocities.co.jp/SiliconValley-Oakland/3432/man/bison/bison-ja_8.html#SEC69
で
「最後のn個のトークンとグループが文法規則に当てはまる場合には、
それらは規則に従って組み合わされます。これを、還元(reduction)と呼びます。」
とあるのですが、最後のn個というのは複数通りの文法規則があてはまる場合
長い方と短いほうどちらになるのでしょうか?
- 121 :デフォルトの名無しさん:2011/09/17(土) 09:05:52.81 .net
- 還元/還元コンフリクト
- 122 :デフォルトの名無しさん:2011/09/17(土) 17:05:32.36 .net
- >>121
どうもです。
あとbisonの
a: /*空*/ |
...
っていうような
/*空*/ってどういうときマッチするんでしょうか?
一回以上の繰り返しとかを終わらせるとかくらいしかないです?
- 123 :デフォルトの名無しさん:2011/09/18(日) 19:00:24.88 .net
- >>122
例えばこういうのはどうです
f()
f(1)
f(1, 2)
関数呼び出し: 関数名 '(' 0個以上の引数 ')'
0個以上の引数: /*空*/ | 1個以上の引数
1個以上の引数: 引数 | 1個以上の引数 ',' 引数
- 124 :デフォルトの名無しさん:2011/09/18(日) 20:02:42.21 .net
- >>123
いまいち>>120のリンクにある説明での動作との対応がとれないんですが、
a: /*空*/ |
hoge
;
ってあったとき
hogeって入力があったら,
hogeが先読みスタックへつまれて、
現在スタックには何も無いので/*空*/とマッチ,
シフト還元衝突でhogeが読み込まれるってことでいいんでしょうか?
それだと5.6の還元/還元衝突がよく分からないのですが。
5.6ではsequenceとmaybewordの還元/還元衝突が起こって
先にあるsequenceが選ばれると書かれているように見えるのですが
実際にマッチするのはmaybewordみたいです。
- 125 :デフォルトの名無しさん:2011/09/18(日) 20:41:59.28 .net
- sequence: /*空*/ | maybeword | sequence word;
maybeword: /*空*/ | word;
にwordを入力すると、3通りの解釈の方法が生じる
スタック:(空) 先読み:word
↓空をsequenceに還元
スタック:sequence 先読み:word
↓シフト
スタック:sequence word 先読み:$
↓sequence wordをsequenceに還元
スタック:sequence 先読み:$
スタック:(空) 先読み:word
↓空をmaybewordに還元
スタック:maybeword 先読み:word
↓maybewordをsequenceに還元
スタック:sequence 先読み:word
↓シフト
スタック:sequence word 先読み:$
↓sequence wordをsequenceに還元
スタック:sequence 先読み:$
スタック:(空) 先読み:word
↓シフト
スタック:word 先読み:$
↓wordをmaybewordに還元
スタック:maybeword 先読み:$
↓maybewordをsequenceに還元
スタック:sequence 先読み:$
2種類の還元と1つのシフトが衝突している
シフトと還元ではシフトが優先されるので最後のシフトの方法が選ばれる
- 126 :デフォルトの名無しさん:2011/09/18(日) 21:26:23.53 .net
- ドラゴンブック2は原著も翻訳も間違いが多いの?
- 127 :デフォルトの名無しさん:2011/09/18(日) 22:03:31.41 .net
- >>125
どうもです。
- 128 :デフォルトの名無しさん:2011/09/19(月) 13:35:51.05 .net
- 「どうもです。」とは日本語おかしくありませんか。
正しい日本語をつかいましょうね。
- 129 :デフォルトの名無しさん:2011/09/19(月) 13:59:37.83 .net
- >>125
恐悦至極にございます。
- 130 :デフォルトの名無しさん:2011/09/19(月) 22:38:31.94 .net
- いや、誰も誉めてないから
- 131 :デフォルトの名無しさん:2011/09/23(金) 13:55:04.37 .net
- 恐悦至極
意 味: 相手の厚意に大変喜び感謝すること。
- 132 :デフォルトの名無しさん:2011/10/01(土) 14:26:37.70 .net
- C++をflex,bison等で構文解析するコードってありませんか?
#includeとかは全部無視してて良いのですが。
あってもおかしくなさそうな物なんですが見つかりません。
- 133 :デフォルトの名無しさん:2011/10/01(土) 14:50:18.01 .net
- 構文解析関係の本をamazonで探して買えば?
- 134 :デフォルトの名無しさん:2011/10/01(土) 14:57:06.50 .net
- C++の仕様を、bisonで構文解析できると思わない方がいい。と言うかまず無理。
- 135 :デフォルトの名無しさん:2011/10/01(土) 17:03:42.51 .net
- a * b; // 掛け算ですか? いいえ、変数宣言です
- 136 :デフォルトの名無しさん:2011/10/02(日) 00:03:44.98 .net
- C++は複雑すぎてないらしい
- 137 :デフォルトの名無しさん:2011/10/02(日) 00:09:49.41 .net
- 昔のgccがそうじゃなかった?
Cのみかもしれないけど
- 138 :デフォルトの名無しさん:2011/10/02(日) 02:10:09.54 .net
- 今のg++はbisonの吐いたコードを基に手で書いてる。
今でもメインテナンスされてるbisonコードはないんじゃないだろうか。
この辺り読んでみて。
http://scottmcpeak.com/elkhound/
http://www.nobugs.org/developer/parsingcpp/
http://www.computing.surrey.ac.uk/research/dsrg/fog/FogThesis.pdf
- 139 :デフォルトの名無しさん:2011/10/11(火) 12:50:32.08 .net
- 「コンパイラの構成と最適化 第2版」中田育男 朝倉書店
の13.静的単一代入形式(SSA形式)のp.344の図13.15
「変数の名前変えアルゴリズム」についてですが、一カ所、
プログラムの最後から二つ目のfor eachブロックが、
for each ブロックY∈child(X) do
call SEARCH(Y) /*支配木の上から下の順で名前替え*/
end for
となっているのですが、Y∈child(X)は、Y∈succ(X) の間違いではない
でしょうか?
自分の理解だと、succ(X)だと上手く動く様に思えますが、child(X)だと、
「抜け」が出てくるんじゃないかと思います。
- 140 :デフォルトの名無しさん:2011/10/11(火) 15:19:34.23 .net
- そんな最後の方のページまで読んでるなんてすごいね。
- 141 :デフォルトの名無しさん:2011/10/11(火) 21:10:47.98 .net
- え、みんな最後まで行かないで投げちゃうの?w
- 142 :デフォルトの名無しさん:2011/10/12(水) 00:20:16.65 .net
- >>139
succ() と child() の定義を確認してみ。
p.339 の最後の段落。IDOM() がポイント。
succ()にしたら同じブロックを二度以上処理しちゃうよ。
- 143 :139:2011/10/12(水) 11:28:51.85 .net
- >>142
有り難うございます。succ, child, IDM については表面的には理解して
いたつもりだったんですが、今回より深い理解に到達できた様に思います。
succ()にした場合、あるブロックBから2つのブロックC1,C2に分岐し、
再度、一つのブロックDに合流する様な場合に、SEARCH(C1)とSEARCH(C2)
の両方からSEARCH(D)が呼び出されてしまうことになり、Dに対して二重に
処理が行われることになってしまいますね。
最初に、今回、理解が深まったと言った事は、直接支配のIDOM(B)が
必ず唯一、しかもBが入り口ブロック以外では、絶対1つは必ず存在する
事の重要性です。このことは、IDOM(B)によってリンクされた木である
「支配木」が、循環がないこと(合流が存在しない、親が必ず1つ)は
もちろん、必ず全てのブロックが含まれている、非常に有用な構造で
有る事を意味するんですね。
このことから、全てのブロックを「巡る(walkする)」には、支配木の子で
あるchild()に対して再帰呼び出しをすることが一つの方法である、と言う
事に気付きました。つまり、>>139の部分で、Y∈child(X) に対して、
SEARCH(Y)を呼び出していけば、必ず全てのブロックを一回づつ巡る事に
成るんですね。
しかも、実際のプログラム実行時の実行順序と同じ順序関係を満たしている
んですね。
- 144 :139:2011/10/12(水) 11:43:15.97 .net
- 今回、勘違いしてしまった理由は、Y∈child(X) に対して SEARCH(Y)を
再帰的に呼び出して行くだけでは、全てのブロックを巡ることが出来ない
場合があるのではないか、と思ってしまったことです。
しかし、実際には、>>143 に書いたとおり、child(X)に対応した構造で
ある「支配木」は、プログラム中の全てのブロックを必ず一回づつ含む
面白い構造をしているんですね。
- 145 :142:2011/10/12(水) 23:24:56.51 .net
- そういうことです。根から順に一度ずつ辿れるんですね。
最適化って、うまく動くとすっごい楽しいです。
- 146 :デフォルトの名無しさん:2011/10/13(木) 02:39:26.68 .net
- ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
<SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA! >
∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
、 、 、 、 、
/っノ /っノ /っノ /っノ /っノ
/ / ∧_∧ / / ∧_∧ / / ∧_∧ / / ∧_∧ / / ∧_∧
\\( )\\( )\\( )\\( )\\( )
ところで、C言語風の構文解析でBisonファイルを3つ書いて三層構造にしたんだが、こういうのって普通?
字句解析 → マクロ展開層 → プリプロセス命令解析層 → 普通の構文解析層 の順で、マクロ展開層はバッファに展開した文字列を字句解析器が読むように設定する。
- 147 :デフォルトの名無しさん:2011/10/13(木) 04:27:44.86 .net
- 普通。
- 148 :デフォルトの名無しさん:2011/10/13(木) 05:30:28.89 .net
- flexは?
- 149 :デフォルトの名無しさん:2011/10/13(木) 12:33:03.10 .net
- >>146
ありがちな話
- 150 :146:2011/10/13(木) 15:42:43.83 .net
- やっぱそうなのか。ありがとう。
>>148
字句解析は一層で大丈夫だった。
- 151 :デフォルトの名無しさん:2011/10/15(土) 08:46:49.81 .net
- 「コンパイラの構成と最適化 第2版」中田育男 朝倉書店
の15.レジスタ割付けのp.409の厚被覆アルゴリズムの部分で、
大体の方針は分かったのですが、細かい部分が分からないので
質問させてください。
アルゴリズムとしてi)〜iv)が書かれていますが、 特に iv)の部分が分か
りません。
ii) 循環区間グラフの左から右に向かって、厚被覆の要素の候補となりうる
生存区間を全てリストしていく.その際,どの生存区間との組み合わせで
候補となるかを記しておく.
iii) 最初に選んだ循環区間のループの最後の部分(のステップ)に到達
したとき,ii)で最後の厚点に対して選んだ生存区間に,その循環区間と
重ならないものがないときは,厚被覆は存在しない.そのようなものが
あったときは,その1つを選ぶ.
iv) iii)で選んだものから始めて、ii)とは逆向きに、ii)で作った候補
の中から厚被覆となる組み合わせを作っていく(それまで選んだものと
重なりの無いものを選んでいく).
【分からない理由】
iii)で既に最良のものが選ばれていると思えるのに、iv)ではいったい
何をしようとしているのか分かりません。既にいっぱいいっぱになっている
ように思えるのに、逆向きに選んだところで、隙間が無いのでどうしようも
ないように思えてしまいます。
ご親切な方のアドバイスをお願いします。
- 152 :デフォルトの名無しさん:2011/10/20(木) 08:59:10.43 .net
- ドラゴンブックのアルゴリズム4.12「先読みの決定」を本にある文法(4.20)に適応させた場合において、
アルゴリズム中に現れるgoto(I, X)(ただしI∋ [B→γ・δ])の結果に一致する主要項の集合がどうしても見つかりません。
自分で走らせたプログラムを実行すると、以下の様になります。
J = {
[S'→・S, #/$]
[S→・L=R, #]
[S→・R, #]
[R→・L, #]
[L→・*R, #/=]
[L→・id, #/=]
}
(1回目の試行) 「[A→α・Xβ, #]がJ'に含まれている(伝搬)」
[A→α・Xβ, #] = [S'→S・, #/$] (「#」に対して)
goto(I, X) = {[S'→S・, $]}
(2回目の試行) 「aを#以外の記号として[A→α・Xβ, a]がJ'に含まれている(内部生成)」
[A→α・Xβ, #] = [S'→S・, #/$] (「$」に対して)
goto(I, X) = {[S'→S・, $]}
(3回目の試行) 「[A→α・Xβ, #]がJ'に含まれている(伝搬)」
[A→α・Xβ, #] = [S'→L・=R, #] (「#」に対して)
goto(I, X) = {[S→・S, $], [S→・L=R, $], [S→・R, $], [R→・L, $], [L→・*R, $/=], [L→・id, $/=]}
三回目の試行で[S'→L・=R, #]がgoto(I, X)に含まれていないためエラーになります。
本を読み進めていくと「I_4の主要項L→*・Rには先読み=が内部生成され、項[L→・id, =]によってI_5のL→id・には先読み=が内部生成される」
とあるので主要項から主要項集合へのマップを考えたのですが、I_2とI_8でR→L・が重複してうまくいきません。
どなたかご教示ください。
- 153 :デフォルトの名無しさん:2011/10/20(木) 09:11:18.99 .net
- すみません、
[A→α・Xβ, #] = [S'→S・, #/$]
[A→α・Xβ, #] = [S'→S・, #/$]
[A→α・Xβ, #] = [S'→L・=R, #]
はそれぞれ、
[A→α・Xβ, #] = [S'→・S, #/$]
[A→α・Xβ, #] = [S'→・S, #/$]
[A→α・Xβ, #] = [S'→・L=R, #]
です。
- 154 :デフォルトの名無しさん:2011/10/20(木) 12:34:59.11 .net
- 対象も手順も、根本的にアルゴリズムをちゃんと理解してないように見えるけど。
まず説明を読んで手でやってみたら?
その後に表つきで例として載ってるんだから答合わせも楽でしょう。
- 155 :デフォルトの名無しさん:2011/10/21(金) 14:37:42.69 .net
- すみません。どうしても理解ができません。
アルゴリズム4.12の「goto(I, X)の中の項A→αX・βに対して先読みaが内部生成される」と
「goto(I, X)の中のA→αX・βに先読みを伝搬する」はそのままの意味でJ' := closure({[B→γ・δ]});された
J'中の項としか受け取れないのですが…。
表に関しても、図4.44の伝搬元と伝搬先の対応を見るにgoto(I, X)で求めた主要項から
主要項集合への対応を見てlookaheadを伝搬させているという風にしか読めません。
その場合だと図4.42のI_2の二番目の主要項とI_8が重複してうまく動作するようには思えません。
何度も何度も申し訳ありません。理解のある方、ご教示ください。
- 156 :デフォルトの名無しさん:2011/10/21(金) 19:03:44.24 .net
- 本の読み方と言うか学習の仕方は
各自身につけてないとねぇ…
- 157 :デフォルトの名無しさん:2011/10/21(金) 21:28:12.37 .net
- >>155のような大先生に教示するなんておそれ多くてとてもとても……
- 158 :デフォルトの名無しさん:2011/10/22(土) 13:39:47.28 .net
- 大学生かな?もしかして院生?
コンパイラの勉強をされてる方に
今更自習の仕方をお教えするなんて大それたことを………
- 159 :デフォルトの名無しさん:2011/10/22(土) 15:18:35.23 .net
- 構文論の複雑な部分を見ると、「構文と動作が直結したForth最強」とか思うよな。
- 160 :デフォルトの名無しさん:2011/10/22(土) 15:50:07.93 .net
- Forth はスタックマシン用の複数のアセンブラコードを
一行にまとめて書いた感じ
構文なんて有って無いようなモンだ
- 161 :デフォルトの名無しさん:2011/10/22(土) 16:19:08.05 .net
- 自己解決しました。
LR(1)のgotoを用いていたのが間違いだった様です。
文脈上、LR(0)の主要項集合を扱うのでLR(0)のgotoを使わなければいけませんでした。
- 162 :151:2011/10/23(日) 08:12:05.66 .net
- >>151 の質問にも回答をお待ちしておりますので、よろしくお願いします。
- 163 :デフォルトの名無しさん:2011/10/23(日) 16:02:33.07 .net
- ここまで突っ込んだこと聞くなら先生に直撃の方がいいんじゃなかろか?
www.k.hosei.ac.jp/~nakata/
一番下にメアドあるし
- 164 :デフォルトの名無しさん:2011/10/23(日) 22:44:20.86 .net
- それはダメだろ。
明確な間違いを指摘するなら結構だが、理解できないなんて理由でメールしてたら中田神に迷惑だ。
答えられる人がいなくたって仕方ないよ。
正誤表は確認しとくべきだが。
- 165 :デフォルトの名無しさん:2011/10/23(日) 23:01:05.33 .net
- そうかなあ
- 166 :デフォルトの名無しさん:2011/10/23(日) 23:01:42.20 .net
- 俺は以前、瀬山士郎の数学の本について
本人に理解できないとメールで質問したら、
数回にわたって理解できるまでメールのやりとりをしてくれたよ
もちろん、どこまで理解できて、何が理解できないのか、
こういう理由でこういう事ではないかという
自分の考えを説明した上でのことだが
他にも、海外の著者にも拙い英語で質問したら、
皆さんちゃんとやりとりしてくれた
普通はこちらが真摯に質問すれば、相手も真摯に答えてくれるよ
ただ、相手も仕事や研究があって忙しいから返事に時間かかるかもしれんし、
クヌース先生みたいに秘書に任せているかもしれんが
- 167 :デフォルトの名無しさん:2011/10/24(月) 08:59:59.16 .net
- 迷惑な奴だ
- 168 :デフォルトの名無しさん:2011/10/24(月) 09:34:03.80 .net
- 企業と同じように、社会貢献は大学の義務だから、
まともな内容であれば問題ない。
- 169 :デフォルトの名無しさん:2011/10/24(月) 09:48:04.21 .net
- 金払って大学行けよ
- 170 :デフォルトの名無しさん:2011/10/24(月) 12:44:01.09 .net
- >>167
その考え方は勿体ないなぁ
せっかくメールアドレスが公開されてるんだから、
遠慮しないで、思い切って質問してみた方がいいよ
専門書は著者も金稼ぎや頼まれて書いてる分はほんの僅かで、
ほとんどは情報を発信したくてうずうずするから書いてる
俺の恩師もそうだったが、真面目な質問は大歓迎なんだよ
- 171 :デフォルトの名無しさん:2011/10/24(月) 13:52:34.48 .net
- 質問歓迎って書いてるならどんどん質問すればいいんじゃね?
ただ、メールアドレスが書いてるからとかどっかの恩師が大歓迎してたからとか
そんなアホな理屈で一般的に質問OKという風潮ができるのは恐ろしい
うっかりアドレスも書けなくなるな
- 172 :デフォルトの名無しさん:2011/10/24(月) 14:01:44.31 .net
- 所詮は他人事。
- 173 :デフォルトの名無しさん:2011/10/24(月) 15:46:14.36 .net
- そういうフィードバックは改訂の時の参考になるだろうし、著者にとっても良いんじゃないかな?
- 174 :デフォルトの名無しさん:2011/10/24(月) 19:12:06.44 .net
- むしろ、なぜ質問大歓迎の風潮になっていないのか不思議でならん
- 175 :デフォルトの名無しさん:2011/10/24(月) 20:06:13.45 .net
- 学術書じゃない書籍の執筆経験ならあるけど、
その編集プロダクションでは読者からの質問には
回答義務……まではいかないけどできるだけ回答すべき、
みたいな空気だったよ。
最終的には相手が判断することでいいんじゃない?
回答がおっくうなら無視するか断ればいいんだし。
>>164 が勝手に思い込んでるだけだと思うけど
- 176 :デフォルトの名無しさん:2011/10/24(月) 21:00:14.26 .net
- >>164 >>171
個人的な意見ですが、学者は、税金で色々と支援されているので、
少なくとも同じ国の人から教えを請うた時は、それに答える義務が
存在すると私は常日頃から思っています。
そうでなくては、自国で学者を支援する意味がありません。
- 177 :デフォルトの名無しさん:2011/10/24(月) 21:31:29.09 .net
- 回答を受ける人自身が「私には義務がある」というのは気にならないけど、
他人から「おまえには義務がある」と言われる人を見るのは少し抵抗があるなあ。
心情的にはわかるけど語感としてキツい印象を持った。
- 178 :デフォルトの名無しさん:2011/10/24(月) 21:33:34.02 .net
- >>177
ごめん、「回答を受ける人自身」は「質問を受ける人自身」の間違いです。
- 179 :デフォルトの名無しさん:2011/10/24(月) 21:36:46.67 .net
- そんな事になったらセンセイは一切本を出せなくなっちまうな
こわいこわい
- 180 :デフォルトの名無しさん:2011/10/24(月) 21:42:04.24 .net
- >>176
そんな義務ないよ。給料分のことはしてるから。
たぶん良質の質問、および質問者ばかり想定して
そういう事言ってるんだろうけど…
金払っていて明確な義務がある学生の中でも基地外対処に苦労してる。
質問および質問者も選別されるのは当然のこと。
それが人と人とのつながりというものですよ。
- 181 :デフォルトの名無しさん:2011/10/24(月) 21:47:35.41 .net
- >>180
自国民の役に立つ義務は必ずあるんですって。
税金で研究していますが、それだけだと、外国人でも研究成果は活用でき
てしまいますから、自国民にはせめて優先して成果が伝える義務があるん
です。
そこを勘違いしている教授が多くて感覚のズレに憤りを感じます。
- 182 :デフォルトの名無しさん:2011/10/24(月) 21:48:47.95 .net
- >>179
本も自分の利益のためではなく、国民への奉仕として出す義務があるんです。
それが嫌なら、国から研究費を貰わないで下さい。
- 183 :デフォルトの名無しさん:2011/10/24(月) 21:51:26.70 .net
- 日本を代表する企業である、Panasonicの創業者である松下幸之助も、
「大学はろくな事を教えないから、教育し直さなくては成らない」
と言っています。
実際的でないセンスの悪い研究や教育が多いと言うことなんですよね。
- 184 :デフォルトの名無しさん:2011/10/24(月) 21:58:53.53 .net
- NASAとかは国民の税金で宇宙開発やってるんだから、その成果は
無償で写真とかの著作権を放棄するとか立派だと思うけどな
- 185 :デフォルトの名無しさん:2011/10/24(月) 22:35:45.81 .net
- >>181
ないよ。そんな狭い考え方で本当に有意味な成果は生まれてこない。あなたの勘違いの方が甚だしいw
- 186 :デフォルトの名無しさん:2011/10/24(月) 23:16:22.52 .net
- まあ本出した先生も
真面目な質問来たら嬉しいだろう
好意で答えてくれるのはありがたい
回答を義務とか言うのはお門違い
- 187 :デフォルトの名無しさん:2011/10/24(月) 23:50:30.86 .net
- >>184
米国民以外の人間も見放題だけどな
- 188 :デフォルトの名無しさん:2011/10/25(火) 03:38:02.33 .net
- なんか俺がメアドあるから聞いてみたらって書いたせいで荒れているけど
自分は真摯に著書で理解できない場合割と質問するんだ、中田先生はどうかわからないけど、
学術書の場合自分の不理解を説明した上での質問は割と答えてもらえるし、
改訂版で不理解が多かった部分に手直し入れたよって教えてもらえてうれしかったりした経験があったから軽い気持ちで書いたんだ。
元の質問者の学習態度がよかったから勧めてみたけど、スレあれちゃってごめんな。
- 189 :デフォルトの名無しさん:2011/10/25(火) 05:33:00.41 .net
- 荒れたうちに入らないだろ。たまにはこんな話題もいいさ。
著者にもメリットあるし、いいかもね。
- 190 :デフォルトの名無しさん:2011/10/25(火) 08:08:53.10 .net
- まぁ、変なことを主張した奴が一人いただけだ。
多分そいつは他人に迷惑を一切かけない、酸素を全く消費しないで生きてる奴なんだろう。
- 191 :デフォルトの名無しさん:2011/10/25(火) 21:27:26.14 .net
- >>188
いや、あなたは正しいでしょう。書いた方も、解答できる時間があるかは別にして、率直に嬉しく思うでしょ。
- 192 :デフォルトの名無しさん:2011/10/26(水) 00:39:31.44 .net
- >>181
自国民の役に立つ義務はあっても
お前の質問に答える義務はない
いちいち一人一人相手にしてたら仕事にならん
そのために本出したり、一般向けの講演会やったりしてんだよ
- 193 :デフォルトの名無しさん:2011/10/26(水) 00:40:59.66 .net
- >>183
そもそもpanaみたいなオワコン企業の役に立つ人間を育てようとしてないから
勘違い甚だしい
- 194 :デフォルトの名無しさん:2011/10/26(水) 01:58:06.30 .net
- パナソニックは、ハイブリッド車のリチウム電池を供給してる
- 195 :デフォルトの名無しさん:2011/10/26(水) 03:57:55.59 .net
- そろそろ他の板でやってくれ
- 196 :デフォルトの名無しさん:2011/10/26(水) 07:51:02.20 .net
- >>192 てめえの存在がこのスレの妨害だから消えろヴォケ
- 197 :デフォルトの名無しさん:2011/10/26(水) 12:18:13.77 .net
- >>193
Panasonicをオワコンというなら、日本企業でオワコンで無い物はどこなの?
- 198 :デフォルトの名無しさん:2011/10/26(水) 12:25:38.60 .net
- 続けるなアホが
- 199 :デフォルトの名無しさん:2011/10/26(水) 19:04:23.45 .net
- え?
- 200 :デフォルトの名無しさん:2011/10/26(水) 23:19:56.71 .net
- >>197
いくらでもあるよ
もっとレベルの高い仕事をしてる会社、利益率の高い会社・・・いくらでもある
ざっと四季報にでも目を通してみたら?
実際、panaは儲かってもいないし、優秀な人も行ってないしね
一部優秀な人もいるけど、大半は作業員レベル。学歴も低い。
- 201 :デフォルトの名無しさん:2011/10/27(木) 10:06:06.43 .net
- >>200
具体的にどこ?
- 202 :デフォルトの名無しさん:2011/10/27(木) 10:14:30.00 .net
- 時代時代によってコロコロと事情は変わるけど、今の時代、大メーカーの
正社員で研究・開発、と言えば、そこそこ優秀な人はいってると思うけどね。
- 203 :デフォルトの名無しさん:2011/10/27(木) 10:15:18.23 .net
- そろそろスレタイ見ようか (--##
- 204 :デフォルトの名無しさん:2011/10/27(木) 10:23:49.31 .net
- 大学教員自身が自分がセンスの悪い的はずれなことを研究していると自ら
気付くことはないんだろう。
馬鹿は自分が馬鹿なことに気付かないらしいから。
- 205 :デフォルトの名無しさん:2011/10/27(木) 11:27:44.49 .net
- まさしく >>204 自身のことだな
- 206 :デフォルトの名無しさん:2011/10/28(金) 00:37:21.78 .net
- >>202
panaの研究・開発がレベル低いなんて言ってないよ。
「一部優秀な人」と書いたのは研究開発の人たちのつもり。
でもね、panaは連結で30万以上の社員がいるけど、そのうちの大半は
低レベルな仕事しかしてないんだよ。低レベルな仕事というのは
工場の現場のこと。こういう低レベルな仕事を抱えこんでいるかぎり
どうしようもないよ
>>201
ファナックとか、製薬全般とか、たくさんあるよ
東証一部だけでも1000以上の会社があるんだから、自分でいろんな会社調べてみたら?
低レベルな仕事をたくさん抱え込んでいる会社は図体がでかいから目立つけど、
そんなもんは日本を代表する会社じゃないよ。中身が伴ってない。でかいだけ。
テレビ作る仕事なんてもはや昔の繊維産業と同じ。オワコン。
韓国がライバルになった時点で負けたも同然。なぜなら韓国の
ほうが給料が安いから。韓国人と同レベルの仕事しかできないから
panaはオワコンなんだよ。
給料の安い韓国人と同じ仕事しかできないのに日本人の高い給料を
取るから、サムスンは黒字なのにpanaは赤字になるんだよ。
ファナックや製薬はどう?
ライバルはどこ?中国でも韓国でもないよ。
それがレベルの高い仕事をしてる証拠だよ。
こういう会社は給料は高いし、高い給料を出しても儲かってる。
- 207 :デフォルトの名無しさん:2011/10/28(金) 08:23:52.35 .net
- >>206
>ファナックとか、製薬全般とか、たくさんあるよ
現状、発展途上国が台頭してきてないとは言えるけど、ロボット作り
がPanasonicがやってることに比べてそんなに高度だとは思えないし、
製薬に関しては口に入れる物だから国内産に人気があることが大きく
影響している。
- 208 :デフォルトの名無しさん:2011/10/28(金) 09:33:20.02 .net
- パナソニックは産業ロボットの先駆けだけどな。
俺が生涯で初めて見たロボットがパナソニックの5軸だった。
それは、博覧会で書道やってたやつだったな。
- 209 :デフォルトの名無しさん:2011/10/28(金) 10:56:33.14 .net
- そろそろスレタイ見ようか (--###
- 210 :デフォルトの名無しさん:2011/10/28(金) 11:36:08.88 .net
- 自習で行き詰まった奴の次はスレチな話題かよ
- 211 :デフォルトの名無しさん:2011/10/28(金) 22:43:23.12 .net
- >>206
でおまえはどういう仕事してるの?、自宅警備?
- 212 :デフォルトの名無しさん:2011/10/28(金) 23:43:02.74 .net
- >>207
>ロボット作りがPanasonicがやってることに比べてそんなに高度だとは思えないし、
何の根拠もなく思うとだけ言われても困るけど・・・
現実の評価はではロボットのほうが高度なんだよ。
それだけのお金をみんな現実に払ってる。
それだけファナックは儲かってる。ほかにはできない、高度な仕事だから
みんな高いお金を払ってるんだよ。
あれだけ儲かってるのに、テレビ作りみたいに簡単に真似できることなら
すぐに韓国や中国に真似されるよ。できないんだよ。
>製薬に関しては口に入れる物だから国内産に人気があること
そんなことじゃないよ
日本国内の製薬売り上げランキングでもファイザーとか
ノバルティスはベスト10に入ってるんよ。
つまり日本人も外国産の薬をたくさん飲んでる。
でも中国や韓国の薬は飲んでない。なんでかわかる?
人気の問題じゃなくて、そもそも中国や韓国にまともな製薬企業がないんだよ。
世界の製薬企業の売り上げランキングを見てみたら?
中国や韓国じゃ薬は作れないから、彼らは外国産の薬ばかり飲んでるんだよ。
>>208
そう
だからパナもテレビ作りなどというくだらない仕事を早く捨てて
高度なことだけをやったほうがいい。
ようやく捨て始めてるようだけどね。
- 213 :デフォルトの名無しさん:2011/10/28(金) 23:48:27.37 .net
- とスレタイすら読めない馬鹿が喚いてます
- 214 :デフォルトの名無しさん:2011/10/30(日) 11:12:35.28 .net
- panaはこのスレタイにそったテーマだと、
携帯向けのJVMは黎明期に結構頑張っていたよ。
- 215 :デフォルトの名無しさん:2011/10/30(日) 15:26:36.74 .net
- IBMの東京基礎研が頑張ってるとか聞いたような >JVM
- 216 :デフォルトの名無しさん:2011/10/30(日) 16:28:53.23 .net
- あそこは昔、所長がsmalltalkのVM屋だったことがある。
- 217 :デフォルトの名無しさん:2011/10/30(日) 18:11:11.18 .net
- VisualSmalltalkとかあったねぇ
- 218 :デフォルトの名無しさん:2011/10/30(日) 22:16:43.43 .net
- >>217
あれの発展系がVisualAgeJavaなんだよね、今再開しても十分魅力的だとおもうんだがだいぶ前にVA*系はとだえちゃったな
IBMって言語開発系のプロダクト凄くいいのに長続きしないの悲しいな
- 219 :デフォルトの名無しさん:2011/10/30(日) 23:29:33.54 .net
- >>218
Eclipseに引き継がれてる。
元々どの言語向けもsmalltalkで書かれていたのを、
組み込みJava用VisualAgeでJavaで書き換えたのが始まり。
>>216
http://www.bayspo.com/kurasu/kurasu8xx/kurasu807/807.html
- 220 :デフォルトの名無しさん:2011/11/04(金) 21:23:54.20 .net
- 質問させてください。
簡単な言語処理系のようなもの(基本的な制御構造・関数・ローカル変数がある程度)を作っています。
速度を追求する必要がないので、構文木を直接、再帰的に評価しています。
この評価器を
0. suspend/resume できるようにしたい。
1. ファイル入出力などを非同期に行いたい。
ため、自前でスタック相当のものを用意して非再帰的な形に書き換えられれば、と思っています。
単純な木のトラバースなら非再帰の形に書き換えられるのは理解しているのですが、
構文木の評価を非再帰的に行おうとすると、中間コードを吐く以外の方法が思いつきません。
用途的に中間コードを吐くのはちと大げさなので、もし構文木を非再帰的に評価する
良い方法がありましたら教えてください。
- 221 :デフォルトの名無しさん:2011/11/04(金) 21:29:51.72 .net
- 中田先生の本に、確かLLパーサを非再帰的に構成する手法の解説があったと思うけど
- 222 :デフォルトの名無しさん:2011/11/04(金) 21:46:52.93 .net
- >>221
構文木の「評価」がわかんないのです。具体的には例えば、
type stmt = Seq of stmt * stmt | If of expr * stmt * stmt | While of ...
みたいな木があったとして、再帰的な評価は
evalStmt(s) {
match(s) {
| Seq(s0, s1) -> evalStmt(s0); evalStmt(s1);
| If(cond, then, elze) -> if(cond) evalStmt(then) else evalStmt(elze);
| While(...) ...
....
}
}
こんな感じでできるんですが、この木を非再帰的に評価する方法が分からんです。
- 223 :デフォルトの名無しさん:2011/11/04(金) 21:57:38.55 .net
- 再帰なんて自分でスタックフレーム作って地道に積むだけだろ?
中間コード吐けない事情があるなら同情するけど
- 224 :デフォルトの名無しさん:2011/11/04(金) 22:11:47.58 .net
- 諸々のLR法なら上向き解析の効率的な手法はかなり研究されているし、解析のための前準備の方法も効率的に行えるんだけど
LLはよく分からないっていうか>>223が言っている通りなんじゃないかな。
- 225 :デフォルトの名無しさん:2011/11/04(金) 22:16:59.73 .net
- >>223
if 文とかがあって動的に評価されるかされないか決まる場合を考えてください。
条件の値を評価してからどっちを積むか決めなければいけないので、再帰しない条件だと、
stack.push( stmt.cond );
stack.push( new IfStmtEvaluator( stmt.then, stmt.elze ) ); // なんか if 文を実行する特殊な値を積む。
こんな感じにしないといけない。この「特殊な値」が増えてくると事実上中間コードを吐いているような状態
になってしまうのです。
- 226 :デフォルトの名無しさん:2011/11/04(金) 22:19:37.66 .net
- あ、上のコード、スタックに積む順序が逆でした。すいません。
- 227 :デフォルトの名無しさん:2011/11/04(金) 22:56:14.75 .net
- 質問文が異常に分かりにくいですね…。ゆとりですいません。
単純に
type expr = Add of expr * expr | Value of int
こんな木を評価したいとして、
func evalStmtNonRecursive( tree ) {
Stack<expr> treeStack;
Stack<int> retvStack;
treeStack.push( tree );
while( !treeStack.empty() ) {
match( treeStack.pop() ) {
Add(lhs, rhs) -> treeStack.push( new EvaluateAdd() ); treeStack.push(rhs); treeStack.push(lhs);
Value(val) -> retvStack.push(val);
EvaluateAdd() -> retvStack.push( retvStack.pop() + retvStack.pop() );
}
}
}
こんな感じのコードしか思いつかないんです。
- 228 :デフォルトの名無しさん:2011/11/05(土) 00:22:23.31 .net
- >この「特殊な値」が増えてくると事実上中間コードを吐いているような状態になってしまうのです。
はい。それしか方法はありません。
- 229 :デフォルトの名無しさん:2011/11/05(土) 01:02:38.12 .net
- なぜ中間コードを使いたくないのか分からん
かえって大げさになるだけだと思うが
携帯か組み込み用途か?
- 230 :デフォルトの名無しさん:2011/11/05(土) 02:08:31.61 .net
- 再帰パーサをCPS変換してみたら幸せになれるかも
- 231 :デフォルトの名無しさん:2011/11/05(土) 14:56:22.23 .net
- > はい。それしか方法はありません。
うーん。そうですか。もしかしたら何か賢いテクニックがあるかと思ったんですが。
> かえって大げさになるだけだと思うが
みたいですねえ。速度が全く問題にならないので、もし中間コード生成が必要なければ
そっちの方がシンプルでいいと思ったんです。現にステートの保存が必要なければ再帰的な評価器で
済んでいるわけで。
> 再帰パーサをCPS変換してみたら幸せになれるかも
CPS に変換して末尾関数呼び出しをループに置き換えると >>227 と同じような感じになりませんか?
あとでもう少し考えてみます。
- 232 :デフォルトの名無しさん:2011/11/06(日) 00:19:06.20 .net
- スタック毎保存したら?
- 233 :デフォルトの名無しさん:2011/11/06(日) 02:19:42.20 .net
- スレッドにしちゃって、フラグを見たり一定時間経過でスリープに移行とかどうよ?
- 234 :デフォルトの名無しさん:2011/11/08(火) 03:14:01.16 .net
-
TXL の話題はここでいいのかな?
ttp://www.txl.ca/nabouttxl.html
- 235 :デフォルトの名無しさん:2011/11/09(水) 08:41:25.58 .net
- 面白いな
- 236 :デフォルトの名無しさん:2011/11/09(水) 12:20:50.43 .net
- 2007年ww
kikx 2007/12/04 23:23
>expression:
> expression relational-op additive-expression
> additive-expression
から下を LL(1) にするのは面倒ですよ。
LL(1)かどうかを考えるなら、こっちを問題にすべきなのではないでしょうか。
みずしま 2007/12/05 01:40
>>expression:
>> expression relational-op additive-expression
>> additive-expression
> から下を LL(1) にするのは面倒ですよ。
その辺は割と簡単に変形できませんか?こんな感じで。
(略)
kikx 2007/12/05 02:33
この式の文法を変換する方法は、たいていの文法の本に練習問題で載ってるので、
kmaebashiさんにちょうどいいんじゃないかなって思って書いたんだけど、
みずしまさんに答を書かれちゃった♪
http://d.hatena.ne.jp/kmaebashi/20071203
- 237 :デフォルトの名無しさん:2011/11/11(金) 23:45:31.66 .net
- だれかxtextで簡単な言語を実装してみてよ
- 238 :デフォルトの名無しさん:2011/11/15(火) 13:46:44.45 .net
- 正規表現で*を連続で2回以上つけることは文法的に無意味だけれど
禁止してはいけませんよね?
- 239 :デフォルトの名無しさん:2011/11/15(火) 14:02:02.44 .net
- アホなユーザーにも判るようにエラーにするべき
無意味なことを許してはいけない
- 240 :デフォルトの名無しさん:2011/11/15(火) 14:51:00.68 .net
- >>238
意味は全く無いが処理コストは食うね
>>239
0回以上の繰り返しだから文法的にも間違ってはいないと思うが、エラー処理には賛成する
- 241 :デフォルトの名無しさん:2011/11/15(火) 14:55:11.49 .net
- でも人間ならまだしも機械的に作られた正規文法にその形が無いことが保証されているんですか?
- 242 :デフォルトの名無しさん:2011/11/15(火) 15:39:52.21 .net
- 複数のパターンから合成する際に
(a*)* みたいになることはあるね
- 243 :デフォルトの名無しさん:2011/11/15(火) 17:14:54.02 .net
- 文法内で設計思想の整合性がないとおかしいよな
>>239のノリでエラーにすると(((a)))も文法的に無意味だから禁止になっちゃう
効率と柔軟さのバランス次第だね
- 244 :デフォルトの名無しさん:2011/11/15(火) 23:37:11.33 .net
- あのなあ、機械的に生成したなら正規化するだろ普通の頭なら
>>243のようなアホがいるから仕事が増える
- 245 :デフォルトの名無しさん:2011/11/16(水) 08:29:34.78 .net
- A = a*, AA = A* のような定義から機械的に生成してるとして、
どうやって機械的に正規化できるのかな?
ヒューリスティックでルールをいくつか適用することはできると思うが。
- 246 :デフォルトの名無しさん:2011/11/16(水) 23:17:07.79 .net
- 決定的にするんだろ
問題ない
出来ないなら適用する文法見直し
- 247 :デフォルトの名無しさん:2011/11/17(木) 13:13:33.15 .net
- 構文解析されるデータを作るのが人ならa**とか((a))は許した方がいい
構文解析されるデータを作るのがプログラムならa**とか((a))は許さなくてもいい
- 248 :デフォルトの名無しさん:2011/11/17(木) 18:40:22.35 .net
- そうだな。
- 249 :デフォルトの名無しさん:2011/11/18(金) 00:10:30.47 .net
- せやな
- 250 :デフォルトの名無しさん:2011/11/18(金) 13:01:36.04 .net
- 構文解析されるデータを作るのがプログラムなら
a**とか((a))はどう出力されるのか仕様を確認だな
- 251 :デフォルトの名無しさん:2011/11/18(金) 15:11:51.22 .net
- LL(1)では((a))を許さない方が難しいな。
a**の場合はa**の形が出てこなければそう処理は変わらないな。
よってa**は許可した方がいいな。
- 252 :デフォルトの名無しさん:2011/11/18(金) 16:31:10.30 .net
- 構文論と意味論はごっちゃにしないほうがいいと思うんだけど
- 253 :デフォルトの名無しさん:2011/11/18(金) 17:13:07.07 .net
- せやな
- 254 :デフォルトの名無しさん:2011/11/18(金) 17:13:27.33 .net
- よいよいそれにしとけ
- 255 :デフォルトの名無しさん:2011/11/18(金) 17:19:58.75 .net
- せやろうか?
- 256 :デフォルトの名無しさん:2011/11/19(土) 01:14:12.51 .net
- そこは
もち論
と返すところだべ
- 257 :デフォルトの名無しさん:2011/11/24(木) 12:43:06.51 .net
- そういうこと書くとスレが止まるからヤメロ
- 258 :デフォルトの名無しさん:2011/12/21(水) 22:29:20.34 .net
- なんかスレ立ってるけど、立てるならせめて「パーサジェネレータ」って名前で立てろよ。
というわけで一旦放置して落とせ。
- 259 :デフォルトの名無しさん:2011/12/22(木) 23:18:26.57 .net
- http://www.oreilly.co.jp/books/9784873115320/
新宿の大型書店に大量に置かれていたので見てきた。
理論よりも具体例で話を進めている感じで入門者には良さそうな感じ。動物本にありがちな冗長さも少なめ。
でも買わなかった
- 260 :デフォルトの名無しさん:2011/12/23(金) 11:15:26.68 .net
- 中田 育男って
日本のコンパイラの本書いた有名なやつだな。
- 261 :デフォルトの名無しさん:2011/12/23(金) 16:32:46.04 .net
- ヒエログリフか。動物ですら無いな
ってかオライリーの本って特定のプログラム言語を扱うときだけ動物表紙なんだな
- 262 :デフォルトの名無しさん:2011/12/23(金) 17:22:52.54 .net
- もともと言語実装パターンの原書はオライリーではなくPragmatic Bookshelfから出てる
原書のヒエログリフはカラーなのに紫と黒の二色刷りにしてくるあたりやらしい
あとプログラミング言語でなくても動物表紙なのはいっぱいあるよ
- 263 :デフォルトの名無しさん:2011/12/28(水) 01:09:25.83 .net
- >>260
RubyのMatzは大学生のころ中田先生の研究室だったんでしょ。そのことが「推薦のことば」に
書いてある。
年末年始休みにこれ読んで1つくらいおれおれ言語つくってみっかな。
- 264 :デフォルトの名無しさん:2011/12/28(水) 01:45:23.25 .net
- matzくすなんかどうでもいいよ
- 265 :デフォルトの名無しさん:2011/12/28(水) 09:14:34.62 .net
- だれか言語実装バターンを試してみるブログ書かない?
- 266 :デフォルトの名無しさん:2011/12/28(水) 11:38:03.70 .net
- 言い出しっぺの法則
- 267 :デフォルトの名無しさん:2011/12/29(木) 02:03:51.77 .net
- 「じゃあ、俺やるよ」ノシ
- 268 :デフォルトの名無しさん:2011/12/29(木) 08:20:42.91 .net
- 「いやいや、俺が俺が」ノシ
- 269 :デフォルトの名無しさん:2011/12/29(木) 12:54:44.87 .net
- 「いやいやいや、俺が俺が俺が」ノシ
- 270 :デフォルトの名無しさん:2011/12/29(木) 13:06:51.65 .net
- 「「どうぞどうぞ」」
- 271 :デフォルトの名無しさん:2011/12/29(木) 13:58:21.74 .net
- >>269
どうぞどうぞw
- 272 :デフォルトの名無しさん:2011/12/30(金) 16:54:37.48 .net
- C++のコンパイラの場合、作る側すら、仕様の全貌を理解しきれていない
ようだ。
- 273 :デフォルトの名無しさん:2011/12/31(土) 20:56:32.48 .net
- Cなどは実装が先で仕様というか規格が後から追っていた歴史もなくはない
- 274 :デフォルトの名無しさん:2011/12/31(土) 21:12:00.01 .net
- >>135
> a * b; // 掛け算ですか? いいえ、変数宣言です
名前空間の違いで判断できるから、
名前空間に対応したbison作ればいいんでは。
名前空間での切り分けってほとんどの言語で使ってるでしょ。
C言語でもtypedefで同じ式になるし。
- 275 :デフォルトの名無しさん:2011/12/31(土) 21:12:17.91 .net
- 実装が先で仕様が後という意味では、JavaScriptやRubyなんかも同じだね
- 276 :デフォルトの名無しさん:2011/12/31(土) 21:29:09.43 .net
- いやいやいや、
実装して使う人が増えたから規格で仕様を統一したんでしょw
規格が先なんてありえないっての
- 277 :デフォルトの名無しさん:2011/12/31(土) 21:34:45.28 .net
- その昔、Adaという言語があって .....
- 278 :デフォルトの名無しさん:2011/12/31(土) 21:49:14.64 .net
- EiffeleとかModula-3とか
- 279 :デフォルトの名無しさん:2011/12/31(土) 22:35:12.71 .net
- lispとかaplとかコンピュータプログラミング用じゃなかったし
- 280 :デフォルトの名無しさん:2012/01/01(日) 05:46:44.64 .net
- それは嘘
- 281 :デフォルトの名無しさん:2012/01/03(火) 12:44:39.85 .net
- >>274
flexがやってます。
identifier, keyword, typenameをtable lookupで区別してる。
- 282 :デフォルトの名無しさん:2012/01/03(火) 12:48:55.73 .net
- Adaと一緒で、PL/1も規格先行じゃなかったか。
Iswim, FPは実装は計画されてなかった。
>>278
Eiffel
- 283 :デフォルトの名無しさん:2012/01/03(火) 13:06:08.78 .net
- G-machineとかlamda式を日本語で説明してる書籍ってないですかね
- 284 :デフォルトの名無しさん:2012/01/03(火) 14:48:57.34 .net
- http://www.jaist.ac.jp/~kiyoshiy/writing/gmachine.pdf
- 285 :デフォルトの名無しさん:2012/01/03(火) 15:33:53.61 .net
- >>284
ありがと。でもそれはもう見たけど分かりづらいので別のを探してるんだわ
- 286 :デフォルトの名無しさん:2012/01/03(火) 16:45:04.68 .net
- >>285
君が既に見た分かりづらいのを列挙してくれないか?
- 287 :デフォルトの名無しさん:2012/01/03(火) 16:54:15.30 .net
- こんな丁寧なのが分からないのだと、読む方に問題があると言わざるを得ない。
もっと基本的なところから勉強した方が良さそう。
- 288 :デフォルトの名無しさん:2012/01/03(火) 16:55:39.37 .net
- >>284を分かりづらいと感じて&技術系英語読解すらNGじゃ、まるでダメポ
背伸びする前に基本を勉強した方がいいと思われ
- 289 :デフォルトの名無しさん:2012/01/03(火) 17:13:37.90 .net
- http://www.amazon.co.jp/dp/4320024931/
かなり古い本だけどこの辺から勉強するといいと思う。
G-machineは載ってないけど、この本の関数型言語処理系の仕組みを
基本的なところから解説している日本語の本は殆ど無いので。
理論寄りならλ計算の本はたくさんあるが。
- 290 :デフォルトの名無しさん:2012/01/03(火) 19:43:46.25 .net
- >>259
「言語実装パターン」(Laguage Implementation Patterns)はでたけど
「DSL in Action」と「Domain Specific Languages」(Martin Fowler)の翻訳ってでないのかなあ?
- 291 :デフォルトの名無しさん:2012/01/09(月) 17:59:02.48 .net
- >>276
多くのesolangは規格(というかネタ)先行な気もする
- 292 :デフォルトの名無しさん:2012/01/17(火) 00:03:18.76 .net
- RPGを作るために、自作のスクリプト言語を
作ろうと思うんですけど、それほど大規模な物じゃなければ
yaccやlexを使わずに作っても、それほど大変じゃなく
作れそうですか?
それともやっぱり、yaccやlexを使わずに全部自前で
作るとなると、小規模の物でも大変ですかね?
- 293 :デフォルトの名無しさん:2012/01/17(火) 00:14:24.19 .net
- >>292
まあやってみればいいんじゃね?
あまり勧めはしないけど
- 294 :デフォルトの名無しさん:2012/01/17(火) 00:19:23.88 .net
- >292
構文解析しない言語がお勧め。
LispとかForthとか。
- 295 :デフォルトの名無しさん:2012/01/17(火) 00:29:56.98 .net
- 小規模大規模ってのはなにのことを言ってるの?
構文と関係あることなの?
- 296 :デフォルトの名無しさん:2012/01/17(火) 01:30:38.38 .net
- 手書きパーサならLL(1)でいいんじゃね
LALR(1)なら小規模な文法入力であっても状態数がSLR(1)と同じになるからやってられんよ。
それでも正準LR(1)に比べると圧倒的に少ないけど。
- 297 :デフォルトの名無しさん:2012/01/17(火) 22:06:07.27 .net
- クラッシュ・バンディクーのシナリオは
LISPで書かれてたとかネットで見たような気がする
- 298 :デフォルトの名無しさん:2012/01/17(火) 23:10:04.19 .net
- マーク・サーニーだっけ?
俺はクラッシュバンディクー1はフルアセンブリだったって聞いたけど。
- 299 :デフォルトの名無しさん:2012/01/18(水) 00:23:34.50 .net
- これのこと?
ttp://otsune.tumblr.com/post/72504819/naughty-dog-lisp
元サイトだとURL長すぎるのでTumblrからでスマン。
- 300 :デフォルトの名無しさん:2012/01/18(水) 02:20:52.65 .net
- URL短縮使え。
今ならリダイレクト先確認できる短縮サービスが沢山ある。
あとotsune死ね。
- 301 :デフォルトの名無しさん:2012/01/18(水) 04:11:09.65 .net
- はい。リダイレクト先を確認するならURLの末尾に+を付けてね。
ttp://bit.ly/wDhQVh
- 302 :デフォルトの名無しさん:2012/02/10(金) 15:41:05.46 .net
- hoshu
- 303 :デフォルトの名無しさん:2012/02/11(土) 20:49:13.36 .net
- 1.「2週間でできる! スクリプト言語の作り方」 技術評論社
2.「明快入門 インタプリタ開発」 ソフトバンククリエイティブ
3.「言語実装パターン」 オライリージャパン
おまえらもう読んだ?
- 304 :デフォルトの名無しさん:2012/02/12(日) 00:45:44.36 .net
- >>292
PEGが楽。yaccとかlexとか分かりづらすぎconflictとか意味分からん
一方PEGは人間でも順を追って解析できるし、表現できる集合も大きい
自前で書いても結局PEGみたいなことをすることになる。
関数から関数を呼んでっていう
- 305 :デフォルトの名無しさん:2012/02/12(日) 07:20:16.17 .net
- その説明だとLL(1)の再帰降下とPEGとの違いがわからんぞw
PEGはpackratで実装することで本領を発揮するんだから。
- 306 :デフォルトの名無しさん:2012/02/12(日) 15:01:30.88 .net
- >>303
本は雑食なんでなんでも買ったり図書館行ったりするけど3はともかく1,2はおもちゃだったぞ
- 307 :デフォルトの名無しさん:2012/02/15(水) 03:17:06.15 .net
- delphi用のpegパーサ前に作ったのうpしよっかな
peg -> パースしてパーサ作る
パーサ使う -> 構文木 -> 自分で辿っていろいろ実装
っていう奴。本当はパーサをコンパイルしちゃうのも考えてたけどそのまま放置
あとPEGの記述自体がパーサーになるわけだけど、論理的に最適化の余地があったりするんだよな
そういうの考えたけどやってないな
- 308 :デフォルトの名無しさん:2012/02/15(水) 03:18:50.11 .net
- そういえば、次の一文字を見て飛ぶ関数をテーブルで持っておくとか考えたな
思い出してきた
- 309 :デフォルトの名無しさん:2012/02/19(日) 16:24:34.56 .net
- 同じ会社のエンジンオイルで5W30と10W30があることがありますが、
10W30を選ぶ利点は何かありますか?
- 310 :デフォルトの名無しさん:2012/02/21(火) 13:29:34.84 .net
- スレタイ末尾の「エンジン」だけ見てここに決めたのか
- 311 :デフォルトの名無しさん:2012/02/21(火) 17:08:28.32 .net
- >>310
単なる誤爆かと思ったわ。
- 312 :デフォルトの名無しさん:2012/03/01(木) 16:41:06.36 .net
- javacc使ってる人みないね。なんで?
- 313 :デフォルトの名無しさん:2012/03/04(日) 10:30:27.72 .net
- コンパイラ系の良書はあるけど
インタプリタ系でそういうのってないのだろうか?
- 314 :デフォルトの名無しさん:2012/03/05(月) 11:52:49.19 .net
- コンパイラの良書の参考文献でもみたら?
- 315 :デフォルトの名無しさん:2012/03/05(月) 21:16:44.51 .net
- >>313
機械語に落とさないで実行すりゃいいだけじゃないの?
コンパイラ系の良書って構文解析からオプティマイズまで入ってるから基本は網羅されてるし
モダンなインタプリタ処理系は内部がVMだったりするから見かけ上インタプリタに見えるだけでやってることはコンパイラ処理系とかわらんよ。
- 316 :デフォルトの名無しさん:2012/03/05(月) 21:44:14.74 .net
- SICP
- 317 :デフォルトの名無しさん:2012/03/05(月) 21:45:45.97 .net
- スレッデッドコードについてのちゃんとした説明とか
あんまり見かけないんだよな
- 318 :デフォルトの名無しさん:2012/03/05(月) 22:25:56.12 .net
- >>317
古いforthの本とかなら載ってると思う
- 319 :デフォルトの名無しさん:2012/03/05(月) 23:56:53.49 .net
- スレデッドコードって C で書けないせいか、あまり使われないね。
GCC とかだったら
goto *ip++;
とかできるんだけど。
- 320 :デフォルトの名無しさん:2012/03/06(火) 00:17:34.51 .net
- ↑インダイレクト・スレデッドコードね。
ダイレクト・スレデッドコードなら、
void (*ip)();
....
*ip++;
でいいよね。
- 321 :デフォルトの名無しさん:2012/03/06(火) 00:32:44.03 .net
- 確かウェブページにあったんだが...
ダイレクト、インダイレクト、もう一種類なんだっけ。
- 322 :デフォルトの名無しさん:2012/03/06(火) 00:47:41.16 .net
- サブルーチン・スレッディングかな?
単にサブルーチン呼び出しに展開する簡単な Forth コンパイラとかで使われてたね。
http://en.wikipedia.org/wiki/Threaded_code
- 323 :デフォルトの名無しさん:2012/03/06(火) 09:07:56.97 .net
- void *なポインタは++できないから、void **とかにしてキャストするのが常道
- 324 :デフォルトの名無しさん:2012/03/08(木) 17:22:33.78 .net
- Luaみたいな組み込み言語作ってる。
BNFも抽象構文木もわからず力押しでやってきたけど
なんとかトークン分割と文脈チェック・解析までできた。
でもバイトコードの生成・実行は難しそうだ。
たぶんこれができればあとはなんとかなるはず。
・メモリ管理(スタック、GC)
・goto(例外、if、switch、return)
無理だったら諦めて他言語のソース吐く。
- 325 :デフォルトの名無しさん:2012/03/08(木) 17:25:53.63 .net
- >>324
マイ言語作ってみたいと思ってる口だけど、そもそも入り口の言語仕様をどうやって考えたか聞かせて
- 326 :デフォルトの名無しさん:2012/03/08(木) 17:34:01.84 .net
- 昔の処理系はワンパス(ないし少ないパス数)で頑張ろうといろいろやったわけで、
教科書見るとそういう話がいろいろあるけど、今時ならデータ構造を持って、
何パスでも走らせてかまわないのが普通よね。
GCはとりあえず本もあるし、ウェブには情報がたくさんあるからそれを見る。
gotoの処理は、コードを吐きながら、今吐いてるコードのアドレスを数えておく。
飛び先の候補とかならそのアドレスを覚えておいて、あとでgotoする所でその
アドレスを書き込む。順番が逆の場合(先にgotoが出てきて、あとからその
飛び先の場所が決まる)場合は、gotoのある場所を覚えておいて、一旦ダミーの
アドレスを付けてgotoを出力してから、あとで書き直す。
と、一応書いてみたけど、BNFも抽象構文木もわからんとすると、
if (...) {
if (...) {
} else {
}
} else {
if (...) {
} else {
}
}
みたいなネストをちゃんと処理できてる?
- 327 :デフォルトの名無しさん:2012/03/08(木) 18:54:58.49 .net
- >>325
実用性とか考えてなくて、とりあえずなんでもいいから
Javaから文法削ったようなものが動けばいいと思ってる。
>>326
ネストは速度とメモリ犠牲に段階分ければ簡単。
バイトコードは時間かけて作れなかったら嫌だから
BCELとかツールでjvmとか.netを生成してもらおうと思う。
- 328 :デフォルトの名無しさん:2012/03/08(木) 18:58:39.75 .net
- peg方式はマジで分かりやすい。言語が設計しやすい
- 329 :デフォルトの名無しさん:2012/03/08(木) 19:54:23.77 .net
- PEG難しくて理解できない
世界一簡単に説明してるサイトない?
もちろん日本語で
- 330 :デフォルトの名無しさん:2012/03/08(木) 20:06:38.22 .net
- 日本語で&世界一、てのはすごい注文だなw
- 331 :デフォルトの名無しさん:2012/03/08(木) 22:52:31.94 .net
- >>327
バイトコードはある物使ったほうがてっとり早いね。
遅くてもいいならフロントエンド程の手間も掛からないけれど。
jvm や .net のエンジンの性能はほとんど芸術品だよ。
- 332 :デフォルトの名無しさん:2012/03/09(金) 00:02:15.46 .net
- LALR(1)一筋でやってきた老害の俺から言わせてみればPEGは敵性構文クラス。
- 333 :デフォルトの名無しさん:2012/03/09(金) 01:13:11.15 .net
- >>331
遅い、か。ゲームエンジンで使いたい人などは
LUAのように以下の条件を満たす必要があるもんね。
・Cとの連携にオーバーヘッドが小さい
・スクリプト・ランタイムの起動が早い
・JRE(一緒に配布できないようなランタイム)が必要ない
でも自分は動けばなんでもいいから、
簡単ツールに頼ってバイトコードの知識0で作る方法を選ぶよ。
- 334 :デフォルトの名無しさん:2012/03/09(金) 01:48:17.81 .net
- >>333
ちょうど >322 で出てるスレデッド・コードの wikipedia の解説には
インタプリタの核となる内部ループの実装が一通り載ってる。
後はスタック・マシンにするかレジスタ・マシンにするかだけれど
スタック・マシンなら半日で骨組みは書けるんじゃないかな。
- 335 :デフォルトの名無しさん:2012/03/09(金) 01:49:34.93 .net
- あ、逆に自分で書かずに流用するって話か。
- 336 :デフォルトの名無しさん:2012/03/09(金) 09:15:59.95 .net
- LALR(1)を積極的に選ぶ理由って、yaccがあるから、以外に特にないと思うけどな。
CFGとPEGの比較ということなら、CFGでは曖昧な文法ということになるようなものが、
PEGでは全部許されちゃうのが嫌ってのはあるかもしれないけど。
- 337 :デフォルトの名無しさん:2012/03/09(金) 12:56:59.71 .net
- 別にyaccでなくとも自力でLALR(1)パーサジェネレータ書ければいいと思うけど。
そこまで理解が及んでいれば、何も困る事はないしPEG使うのだったらCFGに対する正確な理解も必要。
PEGは確かに行き当たりばったりで小さな言語を作るのには向いているかもしれないけど左再帰ができないし、
「終端記号や非終端記号の集合」としての非終端記号を構築するに当たってCFGはそこが「素朴な」集合で論理的に整理されているのに対して
PEGは「順々にマッチするかを試す」辺りが「純粋な」集合ではない。
だから人間の記述ミスに起因する構文を書いてしまった時、CFGはちゃんとエラーを出してくれるのに対してPEGはacceptされてしまう。
構文は大きくなればなる程シビアになっていくから、機械的にエラーを吐いてくれた方が人間の側としては嬉しい。
よってPEGは最初から完璧に構文が出来上がっている場合(更にCFGでいう左再帰も人間の手で予め左再帰でない構文に直しておく必要がある)に採用するべきで、
それ以外の比較的規模の大きな言語はCFGを採用するべき。
- 338 :デフォルトの名無しさん:2012/03/09(金) 13:13:07.81 .net
- >LALR(1)を積極的に選ぶ理由
ドラゴンブックに「SLRとオートマトン数が同じで表現能力がLRよりは低いけどLLよりは高いからお勧め」って書いてあったから
- 339 :デフォルトの名無しさん:2012/03/09(金) 20:15:22.52 .net
- > 表現能力がLRよりは低いけどLLよりは高いから
当時は, LL から自動生成する理論的根拠が薄弱だっただけだと思う
- 340 :デフォルトの名無しさん:2012/03/09(金) 21:48:23.71 .net
- LLは自動生成というより、簡単に表駆動できるから、特に理論とか広がらなかったんじゃない?
表駆動でなければ普通に再帰降下するだけだし、左再帰の除去とかはすぐに理論が確立しちゃったし。
- 341 :デフォルトの名無しさん:2012/03/12(月) 00:16:33.08 .net
- アノテーション、複数の戻り値、例外とか
修飾子増えると一行にかなり詰め込む事になるよね。
public def hello ( @Size(min = 0, max = 100) int value)(int, int) throws IOException {
print("hello");
}
複数行にするのもタイプ量が増える。難しいな。
def hello {
-opt public
-arg (@Size(min = 0, max = 100) int value);
-ret (int, int);
-thw (IOException);
print("hello");
}
- 342 :デフォルトの名無しさん:2012/03/24(土) 11:22:52.78 .net
- 構文解析器のようなもの作ってる人に聞きたいんだけど
データ構造って自分で作ってる?
それともライブラリーのやつ使ってる?
俺は全部作りたいからテンプレートで標準ライブラリーのやつを使ってはじめに作って
あとで自作に戻すつもりだったけれど、
インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
テンプレートを使わずに0からまた作ることに決定しました。
- 343 :デフォルトの名無しさん:2012/03/24(土) 11:26:44.53 .net
- C++使ってるけどstdのvectorとかmapとかannoodaado_mapは使ってるな。
それ以外は特に使ってない。
STLと同じかそれ以上の速度で完璧に書けるなら車輪の再発明してもいいんじゃね。
- 344 :デフォルトの名無しさん:2012/03/24(土) 13:21:28.67 .net
- 自分の興味が何処にあるかによるんじゃね?
実装すること自体や性能に興味があるなら自作するだろうし、
とにかく言語をパーズして役立てたいなら有り物使うし。
- 345 :デフォルトの名無しさん:2012/03/24(土) 14:00:24.16 .net
- >インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
まずC++の規格書を読んでポリシーを頭に叩き込まないとな。
- 346 :デフォルトの名無しさん:2012/03/24(土) 14:42:52.09 .net
- >>342の言ってるテンプレートって、
C++のtemplateなのか?
- 347 :デフォルトの名無しさん:2012/03/24(土) 14:46:27.09 .net
- STL のことだと思われ
- 348 :デフォルトの名無しさん:2012/03/24(土) 14:47:46.41 .net
- >>342が何をやりたいのかよくわからんけど、
既にあるものを使わないのは効率が悪いと思う
- 349 :デフォルトの名無しさん:2012/03/24(土) 15:09:17.66 .net
- template<typename Set=std::set<int>>
としておいて後から変えるということだろう。
- 350 :デフォルトの名無しさん:2012/03/24(土) 15:37:43.96 .net
- そこまで動作効率気にするならアセンブリで書けと
- 351 :デフォルトの名無しさん:2012/03/24(土) 19:18:33.66 .net
- いまどきアセンブリで書くよりコンパイラ様に最適化任せてしまったほうが巨大なプログラムでも高速化できるし。
- 352 :デフォルトの名無しさん:2012/03/24(土) 19:23:00.08 .net
- STLに合わせるコストと、自前で用意するコストを比較して
少ないほうを取るだけやな
趣味なら好きなほうでいいけど、こっちは仕事で書いてんねん
- 353 :デフォルトの名無しさん:2012/03/24(土) 19:24:46.06 .net
- Visual C++とかIntel C++の吐くアセンブラ見てみ
適わないって思うわ
特に浮動小数点をやらせたら、fadd fxch fmul・・・・って人間技では無理やからwww
局所的なやつとか、アルゴリズム的に特別な命令使うと速くなるやつとかは別な
- 354 :デフォルトの名無しさん:2012/03/24(土) 19:33:50.40 .net
- >>343
unorderedな。
- 355 :デフォルトの名無しさん:2012/03/24(土) 19:39:03.73 .net
- 浮動小数点まわりの設計は元々ちょっと無理があっただけに、かえって芸術品になるのかw
- 356 :デフォルトの名無しさん:2012/03/25(日) 01:25:28.76 .net
- 人間が優位になりうるのは、ソースコードから読み取れる以上の
情報をプログラマが持ってる場合
別名とかが絡むとコンパイラは最適化を保守的にやらざるを得ない
- 357 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/01(日) 15:34:29.36 .net
- RubyスクリプトをC言語に翻訳することできますか?
- 358 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 15:38:43.34 .net
- Rubyってevalあったっけ?
無理そう。
- 359 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 15:39:09.46 .net
- なんだこの名前欄ww
- 360 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 15:44:37.72 .net
- Shed Skin(Python to C++)とかあるよね。制限つきらしいけど
- 361 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 19:08:16.35 .net
- C++にevalを実装する変態もいるくらいだからどうにかなるんじゃないか?
- 362 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 21:10:22.83 .net
- 新しい言語を作るのとほとんど同じくらいの手間がかかるんじゃね?
- 363 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 07:49:42.21 .net
- >>329
http://d.hatena.ne.jp/kmizushima/searchdiary?of=10&word=peg
- 364 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/02(月) 14:26:30.20 .net
- Ruby拡張ライブラリを作るような感じかな。。。
IRBにRubyLexがあるから、それを利用してできるかも。
- 365 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 16:25:16.75 .net
- pythonはpypyみたいなよく維持されているメタ処理系の参照実装があるから、
そういう実験もしやすいだろうね。Shed Skinはまったくpypy使ってないとはいえ。
- 366 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 14:24:47.28 .net
- https://github.com/inakata/ruby_scala
- 367 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 17:58:39.13 .net
- lexとyaccは、自作しなくとも、フリーで転がっているので助かるな。
- 368 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 18:31:05.54 .net
- >>363
なかなか素晴らしいサイトだが、すまんけどもっと分かりやすく
説明してるサイト無いか?w
いや、そのサイトも凄い分かりやすいけどねコードとか
- 369 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 18:47:04.07 .net
- 正規表現に似たパターンとその適用順序を定義して
順々にマッチングしていくだけ
- 370 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 11:49:43.80 .net
- >>368
http://d.hatena.ne.jp/kmizushima/20100203/1265183754
- 371 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 12:02:14.70 .net
- pdos.csail.mit.edu/papers/parsing%3Apopl04.pdf
原文読むのが一番楽。英語の壁はあるんだけど
- 372 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 15:18:31.06 .net
- Bryan Fordさんの論文で、MITの修士論文の奴が、ボリュームがすごくあるので一見して
尻込みしがちだが、実は丁寧に書いてあって、一番すらすら読めると思う。
- 373 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 18:50:21.99 .net
- ちょっとスレ違いと言うかスレずれな気がするけど、自分で新しい言語を生み出すにはどんな本かサイトを見て勉強すればよいのか、お勧めない?
それとも「えい・やっ」で、これまでに知ってる言語からあとは思いつきでやるものなのかな?
OSの一般理論みたいに、プログラミング言語とはこういうものだ、みたいな考え方を知りたい。
- 374 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 19:28:12.92 .net
- 今だとドラゴンブックかタイガーブック(ML)で各構文クラスを学習するのが一般論なんじゃない?
少なくとも自分はそういう道筋を辿っている。
あと最適化だったら中田本を当たった。
- 375 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 19:46:54.97 .net
- ちゃんとやるなら数学の話になってくるな
工学部って消費者。数学者からすればザコ
- 376 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 20:01:07.57 .net
- チューリングマシンで終了だな。
- 377 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 20:43:12.01 .net
- 工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
- 378 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 20:53:55.38 .net
- 数学は物理学の端女
- 379 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 20:59:11.70 .net
- mather
- 380 :373:2012/04/07(土) 21:34:11.62 .net
- なんかあらぬ方向に飛んで行ってるけどw
とりあえずタイガーブックってのを見ようと思って尼に行ったら★2つだったorz
ドラゴンブックいっとくかw
- 381 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 00:17:02.35 .net
- どんな言語を設計するかと、
それを言語処理系として実装する方法は違うんじゃないの
プログラミング言語のパラダイムの整理という点では
CTMCPが面白かった
- 382 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 19:43:01.65 .net
- うん。ドラゴンブックで良いと思うよ。タイガーブックの日本語版誤植多いし、中身薄いし、ドラゴンブックなら二版が出てるし。
ただ、ドラゴンブックに出てる最適化を本腰を入れてしたいなら、中田本の二版を買ったほうが良いと思う。
力不足だから。
- 383 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/08(日) 21:39:02.23 .net
- シンプルなコードが欲しい人はタイガーがいいんじゃないか?
- 384 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/09(月) 00:00:32.10 .net
- お師匠様には2つを組み合わせると良いと教わった
フロントエンドはドラゴンで、最適化部分はタイガーで
- 385 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/09(月) 14:43:47.37 .net
- タイガーブックについてる★2は気にしないでいい
ただあの評価コメントも完全にハズレってわけでもなくて
1冊目に読む本じゃなかったってだけの話だ
- 386 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 08:53:47.10 .net
- pegとLL(∞)と同じだよな。
- 387 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/12(木) 17:01:24.68 .net
- Rubyコンパイルまだ?
- 388 :デフォルトの名無しさん:2012/04/12(木) 17:15:15.40 .net
- コンパイルって需要あんの?
スクリプト系が遅いのはライブラリを実行時に毎回読み込むから
でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理
- 389 :片山博文MZボット ◆0lBZNi.Q7evd :2012/04/12(木) 17:28:27.86 .net
- >>388
少なくとも私にある。字句解析と構文解析をすっ飛ばせば
それなりに早くなると思うんだけどね。
- 390 :デフォルトの名無しさん:2012/04/12(木) 19:09:11.70 .net
- ついでに意味解析もすっ飛ばしちまえ
- 391 :デフォルトの名無しさん:2012/04/12(木) 22:49:19.75 .net
- >>388
> でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理
具体的にどういうこと?
- 392 :デフォルトの名無しさん:2012/04/13(金) 00:17:14.20 .net
- ダイナミックリンクライブラリ:「…」
- 393 :デフォルトの名無しさん:2012/04/13(金) 08:45:43.79 .net
- クラス定義と、実行するコードの区別が無いってこと
クラス定義も"実行"しないといけない。コンパイルで速くなるかもしれんが
C++とかはクラス定義をプリ実行できちゃってるから、そこには大きい差があるなって
- 394 :デフォルトの名無しさん:2012/04/13(金) 08:56:48.84 .net
- まあ工夫すれば結構早くなるとは思うけどな
でもプロトタイプってどう最適化できるかな
- 395 :デフォルトの名無しさん:2012/04/13(金) 09:02:38.74 .net
- あれかCopy on writeをうまくやれば、"ほとんど"のケースでC++並みに早くできるか
Ruby好きだからちょっと考えてみよっかな
クラス定義のプリ実行だけは本質的に無理だろうけど
- 396 :デフォルトの名無しさん:2012/04/13(金) 09:03:30.25 .net
- それは動的な定義を許してるってだけの話。
オブジェクト志向とは直行してるし、
実行時構文解析も必要じゃない。
- 397 :デフォルトの名無しさん:2012/04/13(金) 09:15:32.85 .net
- 確かに実行時構文解析は無駄。Ruby作ってる人が速くしようと思ってるなら
糞プログラマだな。多分そもそも速くする必要が無いと判断してるんだろうけど
- 398 :デフォルトの名無しさん:2012/04/13(金) 09:21:22.15 .net
- 完全にトランスペアレントにできるならまだしも、コンパイル後をどこかにキャッシュしといて
それで"変な"バグが出たりするとストレス溜まるもんな
代償もでかい
- 399 :デフォルトの名無しさん:2012/04/13(金) 09:49:41.68 .net
- 調べたらだいたいJRubyが考えてることやってるような気が
萎えた
こういうの見る限り、Javaに協力したほうが汎用性があって良さそう。
p.tl/K7Ld
invokedynamicの速い実装方法を考える
- 400 :デフォルトの名無しさん:2012/04/13(金) 09:57:21.94 .net
- その辺はJITなら問題ないんじゃないか。
それにLispは動的な言語なのに、昔からネィティブにコンパイルした
ライブラリのコードをプリロードした実行ファイルにしていたし。
- 401 :デフォルトの名無しさん:2012/04/13(金) 09:59:25.17 .net
- >>399
JavaやJavascriptは人的リソースが豊富だからねえ。
JVMもproper tail callをサポートすればもっと言語屋の利用が増えるだろうに。
- 402 :デフォルトの名無しさん:2012/04/13(金) 20:27:03.10 .net
- 爆速で実装する方法思いついた。LLVMで作ってみよっと
perlだのphpだのぶっつぶしてRubyを主流にしたいってのもあるし
- 403 :デフォルトの名無しさん:2012/04/13(金) 21:07:19.63 .net
- 有言実行
- 404 :デフォルトの名無しさん:2012/04/13(金) 23:23:15.31 .net
- 三姉妹
- 405 :デフォルトの名無しさん:2012/04/14(土) 00:43:06.14 .net
- 調べたらまっさらから書くのはつらそうだわ。本家の拡張でやる
"メソッドを動的にインラインバージョンにすりかえる"ってのをまずやってみる
vm_call0ってところを書き換えればいいらしい
- 406 :デフォルトの名無しさん:2012/04/14(土) 01:28:36.21 .net
- う〜ん、JNI?
- 407 :デフォルトの名無しさん:2012/04/14(土) 01:49:23.56 .net
- 火が着いた
アイデアの詳細
bugs.ruby-lang.org/issues/6289
調べたところ古くはYARVってのが高速Rubyで、Ruby1.9で本家にマージされたらしいが
最適化ぬるいわwww。だから俺がここらで締めてやる
- 408 :デフォルトの名無しさん:2012/04/14(土) 08:38:18.29 .net
- 最適化とか曖昧な話しは捨てて
関数のβ変換エイリアスを作ってくれや
- 409 :デフォルトの名無しさん:2012/04/14(土) 11:41:10.25 .net
- >>404
どんだけおっさんだよ
- 410 :デフォルトの名無しさん:2012/04/14(土) 18:24:15.06 .net
- >>407
Closedおつ
- 411 :デフォルトの名無しさん:2012/04/14(土) 18:30:40.59 .net
- 閉めてやる
- 412 :デフォルトの名無しさん:2012/04/15(日) 06:22:26.33 .net
- ドラゴン本が届いたんだけど、これなんでこんな装丁なんだろうね。
小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
と思ったけど、英語版もこんななのか。
- 413 :デフォルトの名無しさん:2012/04/15(日) 10:07:07.66 .net
- 着くなり製本に対する文句書き込みかよw
- 414 :デフォルトの名無しさん:2012/04/15(日) 10:09:16.01 .net
- >>413
そういうのは無視
- 415 :デフォルトの名無しさん:2012/04/15(日) 10:48:05.62 .net
- >>412
> 小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
英語版はそうなっている。
- 416 :デフォルトの名無しさん:2012/04/30(月) 17:38:37.42 .net
- hoshu
- 417 :片山博文MZボット ◆0lBZNi.Q7evd :2012/05/03(木) 17:26:35.79 .net
- Rubyスクリプトコンパイラまだ?
- 418 :デフォルトの名無しさん:2012/05/08(火) 07:13:58.21 .net
- コンパイラ作るのによく使われる代数学の分野はなんですか?
- 419 :デフォルトの名無しさん:2012/05/08(火) 09:20:59.33 .net
- 代数というか、従来(ドラゴン本とか)の定番ではオートマトン理論の解説に
力を入れるのが定番だったけど、ぶっちゃけコンパイラ作りというのは、
理学というより工学なので、代数学というのはそんなに大事じゃない。
- 420 :デフォルトの名無しさん:2012/05/08(火) 13:22:58.55 .net
- 中田本「コンパイラの構成と最適化」が亜麻で「出品者からお求めいただけます。」になってたんだけど、もしかして絶版?
- 421 :デフォルトの名無しさん:2012/05/08(火) 13:36:23.19 .net
- 新しい方?
新版が出たのに、旧版も刷られ続ける本というのは相当珍しいと思うけど。
- 422 :デフォルトの名無しさん:2012/05/08(火) 13:43:33.96 .net
- 紫と白っぽい表紙の第2版の方だよ
- 423 :デフォルトの名無しさん:2012/05/08(火) 15:59:33.77 .net
- 林晴比古のシリーズの本どうよ?
- 424 :デフォルトの名無しさん:2012/05/08(火) 16:05:06.24 .net
- 林晴比古の本、としか言いようがない
- 425 :デフォルトの名無しさん:2012/05/08(火) 17:00:18.91 .net
- >>423
本屋でチラ見した程度ではそこそこ良かった
- 426 :デフォルトの名無しさん:2012/05/10(木) 18:06:27.94 .net
- iOS 用の静的 Ruby コンパイラ
http://www.infoq.com/jp/news/2012/05/RubyMotion
- 427 :片山博文MZボット ◆0lBZNi.Q7evd :2012/05/14(月) 14:18:53.08 .net
- >>426 ちっ、有料かよ。
- 428 :デフォルトの名無しさん:2012/05/19(土) 21:52:56.35 .net
- 自分自身を返す関数の型が書ける静的型言語ってあります?
ググってみたところ、Cでダメなのは有名な話らしく真っ先に出てきました。
OCamlもちょいと試した感じではなんかダメそう。
- 429 :デフォルトの名無しさん:2012/05/19(土) 22:28:18.79 .net
- >>428
自分自身とは何を指しますか?
- 430 :デフォルトの名無しさん:2012/05/19(土) 22:47:08.95 .net
- 関数自身です。
Cで書くと(戻り値の型を書けないので仮にvoid*で代用したとして)
void *foo(int x) { return foo; }
みたいな。
OCamlで試したのは
let rec f x = f;;
とかです(エラーになりました)。
- 431 :デフォルトの名無しさん:2012/05/19(土) 23:19:57.33 .net
- 関数自身を返す関数の戻り値の型は静的に決められるのかって話になるのかな。
- 432 :デフォルトの名無しさん:2012/05/19(土) 23:24:29.20 .net
- typedefを使わないのは何故?
- 433 :デフォルトの名無しさん:2012/05/19(土) 23:28:34.83 .net
- typedefでもできないからでは
- 434 :デフォルトの名無しさん:2012/05/19(土) 23:32:07.13 .net
- typedef foo (*foo)(int); とか書けてもいいと思うけど、通らないみたいね
- 435 :デフォルトの名無しさん:2012/05/20(日) 01:49:57.44 .net
- こういうこと?(自信無し)
typedef void *(*foo_t)(int x);
foo_t foo(int x)
{
return (foo_t)&foo;
}
int main(int argc, char *argv[])
{
foo_t f1 = foo(123);
foo_t f2 = f1(456);
return 0;
}
- 436 :デフォルトの名無しさん:2012/05/20(日) 17:15:57.85 .net
- それじゃダメ
- 437 :デフォルトの名無しさん:2012/05/22(火) 12:59:33.99 .net
- >>428-430
無理だと思う。仮にできたとしても、返された関数は循環するだけで使い道がない。
- 438 :デフォルトの名無しさん:2012/05/22(火) 13:36:13.28 .net
- Any型使えば万事OK
- 439 :デフォルトの名無しさん:2012/05/22(火) 22:14:58.64 .net
- 使い道の有無と出来る出来ないは独立した話だろ
- 440 :デフォルトの名無しさん:2012/05/22(火) 22:17:46.33 .net
- 意味的にどうかってことを考えないと
その関数の型と、返ってくる関数の型
これらは意味の上で同じなのかどうか
たまたま同じ形になってるだけじゃないのか
- 441 :デフォルトの名無しさん:2012/05/22(火) 22:29:53.52 .net
- なんかおかしなのが涌いてきた
- 442 :デフォルトの名無しさん:2012/05/22(火) 22:33:36.03 .net
- ある写像 f があって、f の定義域は {{}}、f の値域は {fのグラフ}。
ここで fのグラフは集合なん?
- 443 :デフォルトの名無しさん:2012/05/22(火) 22:44:44.86 .net
- 唐突にグラフと言い出した当人が考えればよろし
- 444 :デフォルトの名無しさん:2012/05/22(火) 22:47:19.05 .net
- ここはプログラミングの中でも、コンパイラのスレ
そういう話出てきてしかるべきだろ
- 445 :デフォルトの名無しさん:2012/05/23(水) 22:25:09.01 .net
- 428です。
解決しましたのでご報告。
OCamlに-rectypesというオプションがあるのを教わり
それでやってみるとあっさりできてしまいました。
ダメそうとか書いておいてスミマセン。
# type foo_t = int->foo_t ;;
type foo_t = int -> foo_t
# let rec f x = f ;;
val f : 'b -> 'a as 'a = <fun>
# f ();;
- : unit -> 'a as 'a = <fun>
# f 1;;
- : int -> 'a as 'a = <fun>
- 446 :片山博文MZボット ◆0lBZNi.Q7evd :2012/05/30(水) 10:49:57.08 .net
- >>442
ここでグラフというのは、関数を特徴付ける集合であるから、集合。
http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95_(%E9%96%A2%E6%95%B0)
- 447 :デフォルトの名無しさん:2012/06/02(土) 18:56:09.37 .net
- >>6 のコンパイラ構成法のソース・正誤表のリンクが切れてるけど
ダウンロードできる場所しりませんか?
- 448 :デフォルトの名無しさん:2012/06/02(土) 19:11:47.93 .net
- webarchiveに残ってるんじゃね?
- 449 :デフォルトの名無しさん:2012/06/02(土) 19:31:49.11 .net
- >>447
http://akkera102.sakura.ne.jp/test/compiler.zip
- 450 :デフォルトの名無しさん:2012/06/02(土) 19:36:38.36 .net
- >>449
入手できました、ありがとうございました。
- 451 :デフォルトの名無しさん:2012/06/03(日) 00:16:39.09 .net
- >>445
この型推論ってどうやって解決してるんですか?
- 452 :デフォルトの名無しさん:2012/06/05(火) 15:00:21.11 .net
- 出現検査ってなにをすることですか?
無限に再帰するのを発見するものですか?
- 453 :デフォルトの名無しさん:2012/06/05(火) 15:05:32.68 .net
- はい。
- 454 :デフォルトの名無しさん:2012/06/05(火) 15:08:27.01 .net
- >>453
どのようにやるかなんてことは教えてくれませんか?
- 455 :デフォルトの名無しさん:2012/06/14(木) 19:49:29.88 .net
- hoshu
- 456 :デフォルトの名無しさん:2012/06/14(木) 19:51:56.70 .net
- 保守お疲れ様です (`・ω・´)ゞ
- 457 :デフォルトの名無しさん:2012/06/29(金) 10:45:27.52 .net
- LL(1)の構文木が右結合になってしまうんですけど
どうしたらいいですか?
たとえばa+b+cがa+(b+c)になるということです。
最後の文字から入力することを思いついたけど、
文字の長さが決まってないとき困ります。
- 458 :デフォルトの名無しさん:2012/06/29(金) 11:07:34.56 .net
- パーザが手書きなら自分でそう書けばいいし、
パーザジェネレータなら右結合に自然になるように文法を書けばいい。
- 459 :デフォルトの名無しさん:2012/06/29(金) 11:12:59.09 .net
- ありがとうございます。
終端記号ってアスキー文字が一文字無駄になるんで無くしたいんですけど、
アスキー文字に使われていない数とか使えばいいですか?
- 460 :デフォルトの名無しさん:2012/06/29(金) 13:20:50.40 .net
- そもそも曖昧性がなければ、
expr := term op expr か expr := expr op term のどちらかでしょ?
expr := expr op expr だったら、a + b + c が、(a + b) + c と a + (b + c) の
どちらなのか、構文規則から一意に決定できない。
あと LL だと expr := expr op term をそのまま実装すると無限ループに
なるから、左再帰の除去を適用する。
- 461 :デフォルトの名無しさん:2012/06/29(金) 18:54:39.82 .net
- yaccだとBNFとは別に結合規則指定だ。
- 462 :デフォルトの名無しさん:2012/06/29(金) 19:07:11.92 .net
- 昔ここで話題になってたcaperっていうC++のLALR(1)パーサが吐けるパーサジェネレータを改良して
演算子の結合規則を指定する事によって曖昧さと衝突を避けられるようにしたんだけど
需要ある?
- 463 :デフォルトの名無しさん:2012/06/29(金) 20:50:02.81 .net
- caperの使い方から教えてもらえるなら需要あるorz
- 464 :デフォルトの名無しさん:2012/06/29(金) 21:03:01.42 .net
- 残念ながら入力ファイルはcaperと互換ではありません。
ドキュメントがないので必要ならば今から書き始めますが…。
- 465 :デフォルトの名無しさん:2012/06/29(金) 21:41:23.93 .net
- ドキュメントが整ってないようじゃ流行らない
最近はPEG?が流行ってるんだっけ?
誰か教えてくれw
- 466 :デフォルトの名無しさん:2012/06/29(金) 22:15:40.06 .net
- caperはC#も吐けるから個人的に良いなと思ってるんだけど
ドキュメントにもサンプルにも、定義ファイル内でのコメントの書き方が載ってなくて
(結局//でいけたけど)
そういうあたりが色々惜しいなぁって感じるわ
- 467 :デフォルトの名無しさん:2012/06/29(金) 22:36:11.44 .net
- しょうがないから今からドキュメント書きますね。
githubのマークダウン形式になるのですぐに終わると思いますが如何せん眠いのでどうだか分かりません。
- 468 :デフォルトの名無しさん:2012/06/30(土) 00:04:15.64 .net
- 眠くて変な文章になってるけど許して。
ttps://github.com/uwanosora/kp19pp
boostの使える環境でmain.cppをコンパイルすると実行ファイルができあがる。
とりあえず書式の導入だけでも書き上げたけど、生成されたhppファイルの使い方はcaperとほとんど同じだから
そっちも見て脳内補間してくれるとありがたいです。
最後に、構文を受理させる場合は「token_0」をpostしてね。
暇があったらまた書きなおすよ。
- 469 :デフォルトの名無しさん:2012/06/30(土) 00:21:02.89 .net
- 外人が書いた日本語みたいだな
- 470 :デフォルトの名無しさん:2012/06/30(土) 03:06:31.81 .net
- caperから派生したんなら、caperと何が違うか書かなきゃダメじゃね?
- 471 :デフォルトの名無しさん:2012/06/30(土) 03:12:00.39 .net
- 何が違うかは>>462に書いてある通りだよ。
後は若干の高速化(漸近的には同じオーダー)。
それともリポジトリに何が違うかを書かないとダメってこと?
- 472 :デフォルトの名無しさん:2012/06/30(土) 03:21:32.02 .net
- うん、リポジトリに書いてあるほうがいいと思うの。
あなたと同じようにcaperに不満を持った人が、これを見つけられるように。
- 473 :デフォルトの名無しさん:2012/06/30(土) 08:33:22.04 .net
- PEGは、もうすでにいくつも実装がある、という段階なんだから、
なんでもいいから使ってみれ。
探せばたぶん、一般的なたいていの言語に実装があるから。
- 474 :デフォルトの名無しさん:2012/07/11(水) 20:49:45.24 .net
- PEGいいな
個人的にBNFより好きかも
- 475 :デフォルトの名無しさん:2012/07/12(木) 00:16:31.66 .net
- C++アプリケーションにスクリプトを搭載する際
C++のオブジェクトアクセスが楽なスクリプトエンジンってある?
その際スクリプトとして使う言語はJavascriptやPHPの様な
スクリプト用言語よりPerlやPython、Rubyみたいな汎用言語がよかです。
- 476 :デフォルトの名無しさん:2012/07/12(木) 00:24:32.95 .net
- >>475
Luaとか、今ならmrubyの人柱になるとか。
- 477 :デフォルトの名無しさん:2012/07/12(木) 09:51:01.32 .net
- オブジェクト指向はluaよりsquirrelのほうが、とか聞くけど
- 478 :デフォルトの名無しさん:2012/07/12(木) 17:33:47.12 .net
- >>474
PEGをBNFと比較するのは間違いです。
- 479 :デフォルトの名無しさん:2012/07/12(木) 18:07:56.57 .net
- PEGは不完全
- 480 :デフォルトの名無しさん:2012/07/12(木) 18:28:28.88 .net
- あなたの言う「完全」の定義は?
- 481 :デフォルトの名無しさん:2012/07/12(木) 22:19:12.25 .net
- C++のオブジェクトアクセスは、
スクリプトのランタイムもC++でないとまずい。
だから、LuaをC++でコンパイルしたものがおすすめ。
ちなみに、ビルド済みのバイナリでIDEに対応したやつは
たいていCでコンパイルしてるから要リビルド。
mrubyはC++でコンパイルできるのかな?
開発者はC++嫌いだからね。
Cのランタイム上で動作するスクリプトなら
直接オブジェクトの参照でなく
IPC機能を使わないと互換性で難儀する。
- 482 :デフォルトの名無しさん:2012/07/12(木) 23:05:36.67 .net
- >>475
Krossどうよ?
en.wikipedia.org/wiki/Kross_(KDE)
- 483 :デフォルトの名無しさん:2012/07/13(金) 02:05:36.38 .net
- >>481
kwsk
いまいちC++でコンパイルし直さなければならない理由がわからない。
- 484 :デフォルトの名無しさん:2012/07/13(金) 02:19:39.65 .net
- >>478
Bryan FordさんのPOPLの論文でも
文脈自由文法との差異について頻繁に論じられていた気がするけど
- 485 :デフォルトの名無しさん:2012/07/13(金) 04:19:15.31 .net
- >C++のオブジェクトアクセスが楽なスクリプトエンジンってある?
言っては駄目なんだろうが、C++のオブジェクトにアクセスしたいなら、
C++からアクセスするのが一番楽だわ。
GCC系とVC系の間でもアレなのに、スクリプト言語から呼び出しとか、果てしなくはまりそう。
ヘッダファイルに直接実装されてるインラインメソッド持ったクラスとか、どうするんだって感じだし。
>スクリプト用言語よりPerlやPython、Rubyみたいな汎用言語がよかです。
汎用言語でバリバリ制御したいなら、なおのことC++でプラグイン形式にした方が良いだろう。
汎用言語の上に別の汎用言語を載せて、
上位層から下位層にフレキシブルにアクセスしたいってのは、いろいろ不毛に思える。
そもそもが意味無いっつーか。その割りに技術的に難題だらけっていう。
- 486 :デフォルトの名無しさん:2012/07/13(金) 06:56:14.46 .net
- そうか?boost::python使えばオブジェクト操作できるようだけど。
http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
- 487 :デフォルトの名無しさん:2012/07/13(金) 07:08:26.04 .net
- >>485
既にCOMってものが実現してるかならぁ
メンバー関数のポインターをラップしてテーブル化してアクセスしたり
仮想関数テーブル経由で操作するんなら処理系の壁はないぞ
- 488 :デフォルトの名無しさん:2012/07/13(金) 16:17:12.83 .net
- >仮想関数テーブル経由で操作するんなら処理系の壁はないぞ
実際には仮想関数テーブルの何番目の関数ポインタが、どういった
・名前になっているか
・戻り値と引数の型は何か
を、スクリプト言語側が知る必要がある。
ここが大きな壁。
- 489 :デフォルトの名無しさん:2012/07/13(金) 17:04:15.25 .net
- >>484
BNFと文脈自由文法は別のものです。
かたや記法、かたや文法。
- 490 :デフォルトの名無しさん:2012/07/13(金) 17:06:04.71 .net
- boost::pythonはすごくいいよ。Krossも。
>>475の質問の趣旨を全く理解してない人がいるね。
- 491 :デフォルトの名無しさん:2012/07/13(金) 18:08:21.50 .net
- COMみたいなメンドイもので時間浪費するより
スクリプトのソースがC++でビルドできるものを選んで
一緒にmakeするのがベストじゃん。
組み込み関数の作成にもboostとか使いたいしね。
- 492 :デフォルトの名無しさん:2012/07/13(金) 20:22:17.63 .net
- http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
これのどこが便利なんだか。
クラスのメソッドを全て手動で登録とか・・・。
C++からC++を呼び出すなら、全く必要のない手間だよ。
PythonからC++で作ったパーツを呼び出したいって需要なら分かるが、
その逆に、C++で作ったフレームワークをPythonから制御したいってのは
果たしてメリットあるのかねぇ。
C++もPythonも汎用言語だから同程度には複雑だし、
手動でコンバートを書かなくちゃならなかったり、速度面で不利だったり、
コンパイラの静的型チェックが死んだり、と、
何も良いことないように思えるが。
- 493 :デフォルトの名無しさん:2012/07/13(金) 20:47:38.02 .net
- webkitpyとかすでに使えるようになってるのがあるよん。
- 494 :デフォルトの名無しさん:2012/07/13(金) 22:19:01.50 .net
- PEGってどこが凄いのか分からん
だれか上手に教えてくれ orz
- 495 :475:2012/07/13(金) 22:31:17.62 .net
- 皆さん有り難うございました。
Krossとboost::pythonが気に入りました。
どの方法も直接C++のオブジェクトを操作ってのは難しそうですが
C++アプリの制御する分にはそれなりに楽に行けそうですね
- 496 :デフォルトの名無しさん:2012/07/15(日) 22:32:38.76 .net
- SWIG は?
Lua は C でコンパイルしてあっても extern "C" でヘッダを読み込めば問題ないよ。
- 497 :デフォルトの名無しさん:2012/07/15(日) 23:26:35.02 .net
- PL/SQLとかって文法的にどうなの?
データベースの使い方の事じゃなくて、プログラミング言語の文法として
- 498 :デフォルトの名無しさん:2012/07/16(月) 02:01:54.62 .net
- 制約が大きすぎてカタコトすぎるw
その制約で最適化が効くわけだけどね。
んでも
互換性の問題がないのなら新規設計で
もっと素晴らしいものが作れるように思う。
- 499 :デフォルトの名無しさん:2012/07/16(月) 02:30:24.81 .net
- >>494
こういう言い方をすると怒られそうだが、
実用上はすげー強力な正規表現だと思っていい気がする
大きく違うのは非終端記号が使えることで、
例えば括弧対応の認識のような、正規表現じゃ書けないようなものも表現できる
e <- "(" e ")" / ε
理論的にはLR(k)より強力らしいから、人工言語を扱う限りは
非力さを感じることはそうそう無いはず
その他いろいろあるけど
・選択オペレータ/が優先度付きなので、曖昧な文法が生じない
文法をいじってたらいつの間にかシフト-還元競合みたいな事は起きない
・先読みが使える
・*は貪欲マッチを行う
- 500 :デフォルトの名無しさん:2012/07/16(月) 02:40:31.97 .net
- (" e ")
- 501 :デフォルトの名無しさん:2012/07/17(火) 02:56:59.59 .net
- 組み込み用だと思っていた言語がどんどん汎用的になっていく流れについていけません!
- 502 :デフォルトの名無しさん:2012/07/17(火) 08:36:09.87 .net
- まさしくまさしく。汎用言語ならC++で間に合ってるわけで。
わざわざ組み込むのなら、出来ることに制限をかけたスクリプト的な物でなければ意味がない。
- 503 :デフォルトの名無しさん:2012/07/17(火) 20:54:44.77 .net
- VIMScript・PostScript・各種シェルスクリプト。確かに最初から
スクリプト前提に作られた言語は便利じゃあるが、
Blenderみたいに汎用言語でも十分な場合は多い。
わざわざ新しい言語エンジン作るだけ無駄だよ。
それから、わざわざ作業を自動化したいだけなのに
メモリーやら最適化やら気にしながら書くのも煩わしい。
ましてや、ホビーグラマー程度のユーザーに使わせるものに
聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。
- 504 :デフォルトの名無しさん:2012/07/17(火) 22:22:49.16 .net
- >>499
ありがとうございます
あとは処理形が安定してるかどうか、ですねぇ
どっかに言語処理形作るような仕事、ありませんかねぇ…
- 505 :デフォルトの名無しさん:2012/07/18(水) 09:54:43.80 .net
- >聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。
まさに組み込み用と思われてた言語がどんどん汎用化して、
ほとんどCやC++やJavaやC#と変わらなくなってきてるのが問題なわけだが。
汎用用途じゃC++とかJavaに勝てるわけ無いし、
そっちの方向を追い求めても空しいっつーか。
- 506 :デフォルトの名無しさん:2012/07/18(水) 20:06:21.76 .net
- 汎用言語である必要はないけど、新たに言語エンジン作るのが手間だから
出来合いの汎用言語をスクリプトに使うんだろ。頭かてぇなぁ。
- 507 :デフォルトの名無しさん:2012/07/18(水) 21:14:47.83 .net
- 汎用言語を組み込むぐらいなら、
元がC++ならC++のDLLを、元がJavaならjarを、
プラグイン的に読み込めるようにすれば良いだろ。
スクリプト言語側へクラスや関数を公開したり型変換を提供するための、特別なコードも必要ないし、
標準的な言語と環境だから利用者の幅も広いし枯れてるし、
開発環境もデバッガも強力だし、実行速度も速いし、良い事尽くめじゃないか。
「出来合いの汎用言語をスクリプトに使う」というところまで思考が及んでいるのに、
どうして、お手元の出来合いの汎用言語(C++やJava)で十分な事を見落としてしまうのか不思議だ
- 508 :デフォルトの名無しさん:2012/07/18(水) 22:04:14.54 .net
- もう、ユーザ自身にアプリ作らせろよwww
- 509 :デフォルトの名無しさん:2012/07/18(水) 23:16:59.63 .net
- イラストレーターやらモデラーやらDTPやってるやつに
開発環境の使用を求めるのかよ。
描画エフェクトの順番制御のためだけにEclipseやらVSインスコしろとかw
- 510 :デフォルトの名無しさん:2012/07/18(水) 23:35:26.32 .net
- 範囲選択してスクリプト実行が指示されたら、
選択範囲の90度方向から40%の範囲にハイライト。
ハイライト完了後選択範囲全体にlog_[10]( 閾値 )でガウシアンぼかし。
数行で書けるコードのためにコンパイルとかパッケージ化とかやっとられんわ。
- 511 :デフォルトの名無しさん:2012/07/18(水) 23:52:37.14 .net
- それは違うな。
VSやEclipseを自分のソフトに組み込んで配布することが出来るなら、
それがベストのはずだ。
イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
本来必要なのは、C++やJavaのフリーライセンスでアプリから呼び出し可能な統合開発環境。
ブラウザで言うところのIEコンポーネントに相当するもの。
そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。
- 512 :デフォルトの名無しさん:2012/07/19(木) 07:31:55.25 .net
- Smalltalkか?
どう考えても大昔からあるものを、
「そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。(キリッ)」とかw
- 513 :デフォルトの名無しさん:2012/07/19(木) 12:46:52.46 .net
- 昔C++のインタプリタなるものを見たことがあるが
誰か使ってるのだろうか
- 514 :デフォルトの名無しさん:2012/07/19(木) 14:54:50.38 .net
- >>511
>イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
そもそも絵描きの人たちがプログラムを書きたがるとは思えないんだが。
うちでもXSIのスクリプトは絵の人じゃなくてプログラマの人が書いてるよ。
- 515 :デフォルトの名無しさん:2012/07/19(木) 21:12:11.25 .net
- Objective Cのインタプリタは少し使ったことある。
まだNeXT健在の頃の話ね
- 516 :デフォルトの名無しさん:2012/07/20(金) 10:39:59.81 .net
- その辺の雑談はこのスレでやれば?
2011年のプログラミング言語シェア、Objective-Cが増加率1位…総合ではC#が3位・Objective-Cは5位
http://kohada.2ch.net/test/read.cgi/pcnews/1326714846/
- 517 :デフォルトの名無しさん:2012/07/20(金) 16:56:59.22 .net
- >>511
大は小を兼ねるってのは迷信
無駄な機能を切り捨てないのは悪
一生使わない機能のために
セキュリティホールやリスクやアップデートの手間を増やすのは罪
- 518 :デフォルトの名無しさん:2012/07/21(土) 01:09:18.15 .net
- 実務でどれだけ便利かってことより、○○で3Dゲームが作れるようになったとか、JITを搭載したとか、そういう話題の方が人気あるよね。
ブランド大好きだなって冷ややかな目で見てる。
- 519 :デフォルトの名無しさん:2012/07/21(土) 01:11:35.32 .net
- 実務っつったらVBA最強…いや何でもない
- 520 :デフォルトの名無しさん:2012/07/21(土) 01:42:03.92 .net
- 別に人気が出ることが
単純に悪いわけではないでしょ
- 521 :デフォルトの名無しさん:2012/07/21(土) 13:31:50.72 .net
- >>513
Root C++でググればいろいろ出てくるが、高エネルギー研究フレームワークの
一部として実装されてて、そういう分野じゃ基本技能として使われてる。
http://hep.planet-koo.com/index.php?g=root
http://www.quark.kj.yamagata-u.ac.jp/~miyachi/ROOT/index.html
- 522 :デフォルトの名無しさん:2012/07/21(土) 13:39:27.41 .net
- 凄いな。胸がときめいた
- 523 :デフォルトの名無しさん:2012/07/21(土) 16:14:19.37 .net
- >>517
うん、だから、組み込み用言語がどんどん汎用言語化していく方向に難色しめしているんだよ。
汎用系はC++やJavaに任せていれば良い。
- 524 :デフォルトの名無しさん:2012/07/21(土) 16:21:44.82 .net
- >>514
そうだね。
プログラマが書くんなら、プラグイン形式にしておいて、
VSとかでコード書けたほうが良いね。
強力なデバッガやインテリセンスがあって便利。
- 525 :デフォルトの名無しさん:2012/07/21(土) 16:26:02.25 .net
- >>518
そうそう。DirectXで3Dゲームを作りたいなら、C++やC#を使えばよいだけなのにね。
マイクロソフトがヘッダを用意してくれてるから超楽チン。
わざわざ移植する必要ないよね。
- 526 :デフォルトの名無しさん:2012/07/21(土) 16:37:29.15 .net
- 汎用系の組み込み言語でも、Officeのマクロほどの開発環境が用意できるなら別だがなぁ。
でも、君らはそれがとても出来ないからって、どっかのフリーの組み込み用の汎用言語の処理系を
借りてくるっていうんだろ。そんな中途半端なこと。しないほうがマシ。
お互い無駄なことに時間を使う羽目になる。
プラグインの仕様とヘッダだけ公開しておけば、それで良いんだよ。
アプリ書く人も拡張する人もコンピュータも、皆が楽。
- 527 :デフォルトの名無しさん:2012/07/21(土) 16:59:54.81 .net
- 汎用系組み込み言語っておかしくないか?
特に、「組み込み用汎用スクリプト言語」とか書かれると気持ち悪くて仕方ない
このスレの流れで言うと、こういう感じだろ表現を統一してくれ。
スクリプト用言語 = ( 組み込み用言語 or 制御用言語 )
汎用言語 = スクリプト用言語以外
汎用言語を組み込む = 汎用言語をスクリプト用途で使う
- 528 :デフォルトの名無しさん:2012/07/21(土) 17:05:32.84 .net
- >>524
所詮プラグインはプラグインで、スクリプトはスクリプトだよ。
エンドユーザーで実際にコード書ける人はいるし需要があるから
スクリプト搭載したソフトが出回ってる。特に、ここ数年は、
OOナニそれレベルだけどJavascriptで小細工できるって人が非常に増えた。
高機能なソフトだとスクリプトの需要は増えてる。
- 529 :デフォルトの名無しさん:2012/07/21(土) 17:23:49.77 .net
- にわか対象への売りにはなると思うよ。でも騙しだね。ケレン味たっぷりのパズワード。
スクリプト言語へのインターフェースと型変換の提供は結構面倒。
がんばってシコシコ橋渡しの部分を書いても、
載っかるのはC++やJavaとそう変わりないほど複雑な汎用スクリプト言語。
しかも、VSやEclipseのような便利なエディタも無し。
デバッガなんか有るわけ無いし、運が悪ければ、printデバッグすら無理だったり。
そんな事実を知らない人への売りにならなるんじゃないかな。
Officeのマクロのような開発環境を一式ごっそり用意できるってんなら別だが。
どうせそんな余力無いんだから、大人しく「出来合いのもの」を使えって話。
「出来合いのスクリプト言語処理系」ではなく、「出来合いの開発環境」を使えるようにしろと。
- 530 :デフォルトの名無しさん:2012/07/21(土) 17:33:11.65 .net
- >載っかるのはC++やJavaとそう変わりないほど複雑な汎用スクリプト言語。
そんなヤベー言語があるのか、…知らなかったぜ
メモリアライアメントがどうとかADLとか右辺値参照みたいなことを要求してくるのか、こりゃ地獄だな!
- 531 :デフォルトの名無しさん:2012/07/21(土) 17:36:52.98 .net
- >>529
なんで希望・願望を垂れ流してんの?
スクリプトエンジン組み込んだソフトリリースして一度でもユーザーから
統合開発環境が欲しいとか要望あったか?
- 532 :デフォルトの名無しさん:2012/07/21(土) 17:57:48.94 .net
- >>530
どう考えてもマトモなデバッガが無いほうが地獄だし、
大抵が動的型言語だったりするので、バグ取りはC++よりも複雑。
動的にしか型が決まらないのに、デバッガで追えないって最悪な組み合わせだな。
>>531
欲しいに決まってるだろJK。特にデバッガ。
スクリプト言語処理系を組み込むよりも、
まともな開発環境を提供するほうが余程大変だし、
しかも、開発効率は、言語仕様よりも開発環境によるところが
大きいわけだから、その辺よく考えないと。
- 533 :デフォルトの名無しさん:2012/07/21(土) 18:14:29.45 .net
- だからそんな事言うユーザーがいたのかよ。
あくまでライトユーザー向けの機能でプラグインの代用品じゃないんだぞ。
- 534 :デフォルトの名無しさん:2012/07/21(土) 18:19:36.77 .net
- >>532
そもそもバグで困るような数十行も書く用途じゃねぇんだよ
- 535 :デフォルトの名無しさん:2012/07/21(土) 18:22:35.65 .net
- ライトユーザ向けってのはOfficeのマクロ開発環境のようなものの事を言うのであってだね。
- 536 :デフォルトの名無しさん:2012/07/21(土) 18:39:44.48 .net
- >>532
「複雑な言語はやだね」 → 「まともなデバッガがない方が地獄」 んんん?
ステップ実行と変数内容の表示とかって実装しちゃいけないの?
あれ?存在しないプログラミングコンポーネントに対して存在しないデバッグコンポーネントを引き合いに出すのはOKなんだよね?
- 537 :デフォルトの名無しさん:2012/07/21(土) 18:40:34.59 .net
- 簡単なエディタが付いてて外部のファイルでも食わせられるようにしとけば十分。
そもそもユーザーは、できるだけ書かかないで済む方法さがすし、スクリプト機能の存在自体に
不満を言ってきたやつなんて見たことないわ。多少複雑な機能なら要望に応じてこっちが対応する。
- 538 :デフォルトの名無しさん:2012/07/21(土) 18:43:16.89 .net
- ライトユーザー向けの
「コピペ改変がしやすいスクリプト言語」
という電波を受信した
- 539 :デフォルトの名無しさん:2012/07/21(土) 18:51:22.45 .net
- >「コピペ改変がしやすいスクリプト言語」
保守するわけでもないに何か悪いのか?
- 540 :デフォルトの名無しさん:2012/07/21(土) 18:59:55.42 .net
- >>532
>大抵が動的型言語だったりする
別に型推論ベースの静的型付けでいいんだが何かこだわる必要あんのか?
- 541 :デフォルトの名無しさん:2012/07/21(土) 19:08:16.93 .net
- ユーザーがクラスなんか使ったらある意味奇跡
関数定義するだけでもよっぽど
引数に渡す型は、ほぼ文字か数値
そんな状態で型がどうのこうのとか・・・
- 542 :デフォルトの名無しさん:2012/07/21(土) 20:15:28.13 .net
- >>541
ではやはり組み込み向けのスクリプト言語が汎用系に向かうのは間違いですよね。
- 543 :デフォルトの名無しさん:2012/07/21(土) 20:18:32.27 .net
- お前の言う組み込み向けスクリプト言語ってなんだよ
スクリプト言語と何が違うんだ
- 544 :デフォルトの名無しさん:2012/07/21(土) 20:25:02.18 .net
- >>542
スクリプト用言語を用意できるならそれに越したことはない。
既存の汎用言語エンジンをスクリプト用に使ったほうが現実的だから
大体の人はそうしてるだけ。
- 545 :デフォルトの名無しさん:2012/07/21(土) 20:38:15.56 .net
- 必ずしも汎用言語が多いわけでもないな
Javascriptの様にモジュールリンケージがなく
拡張しなきゃ単体で使えないスクリプト用言語を使う
ケースも増えてきてる
- 546 :デフォルトの名無しさん:2012/07/21(土) 20:40:32.41 .net
- >既存の汎用言語エンジンをスクリプト用に
それがどんどん複雑化してきてるけど、その方向性どうなのって話なのだが。
- 547 :デフォルトの名無しさん:2012/07/21(土) 20:43:17.35 .net
- だからどうしたとしか言いようがねぇだろ
自分のソフトは汎用言語エンジン使わず気に入るように作ればええがな
好きにしろよ
- 548 :デフォルトの名無しさん:2012/07/21(土) 20:48:15.21 .net
- あれか、俺らに工数や経費、需要を無視してスクリプトに専用言語を使えといいたいのか。
他人に押し付けんなよ馬鹿馬鹿しい。
- 549 :デフォルトの名無しさん:2012/07/21(土) 20:48:56.90 .net
- >だからどうしたとしか言いようがねぇだろ
シンプルって言う、スクリプト言語のメリットがなくなってきてるし、
かといって汎用ではC++やJavaに勝てるわけも無く。
どこへ向かっているんだろうね。
- 550 :デフォルトの名無しさん:2012/07/21(土) 20:54:52.45 .net
- >>548
C++やJavaを使えばよいよ。
今時のスクリプト言語は機能豊富で煩雑さはC++やJavaと大差ないし、
そのくせ開発環境は貧弱だから、これなら、
VSやEclipseが使えるC++やJavaのほうがマシだよ。
- 551 :デフォルトの名無しさん:2012/07/21(土) 20:54:53.87 .net
- 使う側・実装する側が楽できて適度に妥協できる方向にむかうだけだろ
- 552 :デフォルトの名無しさん:2012/07/21(土) 20:57:16.50 .net
- >>550
だから他人に自分の希望を押し付けんな。
- 553 :デフォルトの名無しさん:2012/07/21(土) 20:57:33.19 .net
- C++やJavaを使うのが一番らくだね。
使う側はVSやEclipseが使えるし、
実装する側はヘッダファイル用意するだけ。
- 554 :デフォルトの名無しさん:2012/07/21(土) 20:58:32.72 .net
- >>552
何でそんなに怒ってるの?当たり前のことを言っているだけなのに。
- 555 :デフォルトの名無しさん:2012/07/21(土) 21:00:26.76 .net
- 他人に意見を押し付けるのが当たり前とかどんな教育うけてきたんだ・・・
あれか名前がDQNネームだったりするのか
- 556 :デフォルトの名無しさん:2012/07/21(土) 21:03:16.40 .net
- 俺が何か言ったら、君はそのとおりにしなければならないのかい?
それとも既に後ろめたい気持ちにあって、事実を言われると気づかずにはおれないから困る人?
- 557 :デフォルトの名無しさん:2012/07/21(土) 21:06:18.17 .net
- 話が不毛なんだよ
- 558 :デフォルトの名無しさん:2012/07/21(土) 21:26:08.22 .net
- スクリプト言語を組み込むことが不毛になりつつあるんだよ。
- 559 :デフォルトの名無しさん:2012/07/21(土) 21:32:46.32 .net
- むしろどんどん使われてるが?
ミドルウェアは相変わらずC++, Javaが多いとはいえ。
- 560 :デフォルトの名無しさん:2012/07/21(土) 21:47:58.68 .net
- たぶんそういう話じゃない
- 561 :デフォルトの名無しさん:2012/07/21(土) 23:10:22.62 .net
- なんか複数の話題を一緒くたにしつつ、
各人がそれぞれの前提や想定に基づいて相手をやり込めようとしてる感じ。
そろそろ勝ち負け言い出すんじゃないの?
- 562 :デフォルトの名無しさん:2012/07/21(土) 23:44:04.35 .net
- まあ全員で前提条件の合意が取れたら、でてくる結論はみんな同じこと言ってると思うよ。
- 563 :デフォルトの名無しさん:2012/07/22(日) 00:32:43.14 .net
- >>1通り汎用言語使わずに、自前で処理系用意してる人いる?
自前の処理系使った時のメリットってどんなのがあった?
出来れば動機も教えてください。やっぱ組み込み機器向け?
- 564 :デフォルトの名無しさん:2012/07/23(月) 00:37:22.26 .net
- >C++やJavaを使うのが一番らくだね。
わかりやすい例として
・ブラウザをActiveX通してC++で拡張
・ブラウザをJavaScriptで拡張
前者は淘汰されつつある方式です。
- 565 :デフォルトの名無しさん:2012/07/23(月) 02:25:18.48 .net
- ブラウザは基本プラグインじゃなくてアドオン拡張だもんな
AutoCADとかあの辺もプラグインじゃなくてlispやvbaのスクリプト拡張だ
Photoshopも昔からプラグインが使えたが要望が多くて結局javascriptをスクリプトとして導入したし
- 566 :デフォルトの名無しさん:2012/07/23(月) 02:33:13.28 .net
- 用途・目的が違うからな。
スクリプトはプラグインにならんし
プラグインはスクリプトにゃならん。
- 567 :デフォルトの名無しさん:2012/07/23(月) 07:44:29.00 .net
- ブラウザはセキュリティーの問題があるからな。
セキュリティー気にしないのなら、開発自体はActiveXの方が楽だ。
- 568 :デフォルトの名無しさん:2012/07/23(月) 17:54:38.04 .net
- ランタイムの問題もある。
SRAのパワーグレスの関数がVCで書けるようになっていたが、
コンパイルオプションが/MTじゃダメだったなあ。
本体をバージョンアップしていなかったら
古いコンパイラを今でも用意しておかないとメンテできない。
- 569 :デフォルトの名無しさん:2012/07/23(月) 20:29:58.63 .net
- >>567
NaCLやJavaAppletはまだしもActiveXは無いだろ。
本質的にどうでもいいことに掛ける作業量が多すぎる。
特にCOM周辺が糞めんどい。
- 570 :デフォルトの名無しさん:2012/07/26(木) 21:09:39.02 .net
- みなさいどんな狙いで作ってます?
私はポストPHPを目指してます。
- 571 :デフォルトの名無しさん:2012/07/27(金) 20:40:26.01 .net
- PostPHPかぐぐったけど見当たらなかった
俺も時代に取り残されてるなぁ
- 572 :デフォルトの名無しさん:2012/07/29(日) 16:09:13.14 .net
- Web専用って意味だろ?
言語仕様とフレームワークが一体なら特化した強みもでるかもな
- 573 :デフォルトの名無しさん:2012/07/31(火) 00:17:05.19 .net
- そんなんブログやWikiとかオンライショップ構築用のアレとかの方が良くね
- 574 :デフォルトの名無しさん:2012/07/31(火) 00:18:45.18 .net
- 単に言語仕様と環境が一体化してるならVisualWorksやPharoという前例があってな
- 575 :デフォルトの名無しさん:2012/07/31(火) 01:00:57.60 .net
- 言語処理系といいたかったのかな。
仕様と環境の一体化は無理だろ。
- 576 :デフォルトの名無しさん:2012/08/01(水) 15:40:37.56 .net
- >575
つsmalltal...
- 577 :デフォルトの名無しさん:2012/08/01(水) 17:49:53.48 .net
- 統合環境が最高って言うのは、
付属のフレームワーク上で作業しているからであって、
そこから外れたら重いだけの糞環境って事になる。
VisualC++だってサードパーティーの
ライブラリで使うときはメリットを感じない。
というかviで作業したほうがラクw
- 578 :デフォルトの名無しさん:2012/08/01(水) 19:50:34.84 .net
- viですか。へぇ
- 579 :デフォルトの名無しさん:2012/08/01(水) 20:14:57.84 .net
- nanoがないと今日の日記も書けませんorz
- 580 :デフォルトの名無しさん:2012/08/01(水) 22:13:16.90 .net
- >>577
Visual C++にフレームワークなんて付いてないだろATL/WTL/MFCってな
ファンデーションライブラリと、.Net Frameworkのクラスライブラリを間借りできるだけ。
必要な分だけ自分で書くようなのを目指すならQtとかまともなサードのツールキットが必要だ。
- 581 :デフォルトの名無しさん:2012/08/01(水) 22:15:19.44 .net
- GoogleのV8エンジンっていいな。
だれか本格的にV8でスクリプト実装してる人いる?
- 582 :デフォルトの名無しさん:2012/08/11(土) 17:50:18.39 .net
- V8を使った組み込みとかってどうしてやる必要あるの?
沢山の人に使われているプログラム以外、やる必要ないと思うけど
- 583 :デフォルトの名無しさん:2012/08/11(土) 19:48:39.96 .net
- 沢山の人に使われていないから、なるたけ利用者が多くて学習コストの低いJSにするのだ。
- 584 :デフォルトの名無しさん:2012/08/11(土) 20:37:53.54 .net
- JSなどのメジャーな言語を使う理由でなく、
スクリプト自体をアプリに組み込む理由を聞いてるんだろ
- 585 :デフォルトの名無しさん:2012/08/11(土) 21:18:50.95 .net
- >>581の言っているのは、Javascript以外の言語の実装に使う例なんじゃないの?
- 586 :デフォルトの名無しさん:2012/09/05(水) 03:03:33.11 .net
- 保守
- 587 :デフォルトの名無しさん:2012/10/11(木) 08:17:22.19 .net
- 保守
- 588 :デフォルトの名無しさん:2012/10/29(月) 01:56:01.81 .net
- こんな感じのどう?
function parse(id1,id2) {
var textarea1 = document.getElementById(id1);
var textarea2 = document.getElementById(id2);
var v = textarea1.value.match(/(\/\*|\*\/|\/\/.+|"[^"]*"|'[^']*'|((\+\+|\-\-|)[_a-zA-Z][_a-zA-Z0-9]*(\+\+|\-\-|))|[\+\-\*\/\=\|\>\<\!&%]\=|\<\<\<?|\>\>\>?|\|\||&&|[\+\*\/\=\-\.\[\]\(\)\|\?!\>\<\^\$~#&%{},;:'"]| +)/g);
var t = '', i;
for(i=0;i<v.length;i++) {
t += i + ' = "' + v[i] + '"\n';
}
textarea2.value = t;
}
- 589 :デフォルトの名無しさん:2012/10/29(月) 02:03:15.85 .net
- 訂正 数値が抜けてた
match(/(\/\*|\*\/|\/\/.+|"[^"]*"|'[^']*'|((\+\+|\-\-|)[_a-zA-Z][_a-zA-Z0-9]*(\+\+|\-\-|))|[\+\-\*\/\=\|\>\<\!&%]\=|([0-9]+(\.[0-9]+|))|\<\<\<?|\>\>\>?|\|\||&&|[\+\*\/\=\-\.\[\]\(\)\|\?!\>\<\^\$~#&%{},;:'"]| +)/g);
- 590 :デフォルトの名無しさん:2012/10/29(月) 08:18:19.49 .net
- それぞれのトークンの種類も判別できるようにしよう
- 591 :デフォルトの名無しさん:2012/11/05(月) 19:57:39.48 .net
- 人がいないな
- 592 :デフォルトの名無しさん:2012/11/05(月) 20:03:22.03 .net
- なにこれ?正規表現でトークン切り分けようとしてるの?
最初見たとき、構文解析してるのかと思って
「だからオートマトンで構文解析はできないとあれ程」とだけ書き込もうと思った。
どちらにしろ汚い。
- 593 :デフォルトの名無しさん:2012/11/05(月) 20:36:29.57 .net
- 何でもかんでも正規表現でやるのは気持ち悪いわ。
- 594 :デフォルトの名無しさん:2012/11/05(月) 21:52:30.44 .net
- とりあえず可読性が悲惨なのは不味いんじゃないの
エスケープ一つとっても多すぎる
- 595 :デフォルトの名無しさん:2012/11/07(水) 02:43:30.02 .net
- JavaScriptなのか
- 596 :デフォルトの名無しさん:2012/11/14(水) 23:19:57.05 .net
- メンテしたくねえ
- 597 :デフォルトの名無しさん:2013/01/19(土) 22:11:16.25 .net
- 俺Lispコンパイラを作ろうと思うんだが、
コンパイルした後にeva相当のことを行うことはしたくない。
マクロってどういう場合にコンパイル時に解決できない場合があるか、
調べたいんだけど、その辺の議論ってどうやって調べればいいんだろう、
ゴーグルのでキーワードだけでもおしえてちょんまげ。
- 598 :デフォルトの名無しさん:2013/01/19(土) 22:43:11.34 .net
- とりあえずcommon lispのdefine-compiler-macroを理解しといたほうがいいと思うけど。
- 599 :597:2013/01/21(月) 02:19:03.22 .net
- >>598
ありがと、勉強する
- 600 :デフォルトの名無しさん:2013/01/21(月) 11:35:26.45 .net
- 後はhttps://engineering.purdue.edu/~qobi/software.htmlのstarlinやpartialとか
- 601 :デフォルトの名無しさん:2013/03/05(火) 23:32:24.88 .net
- CでCのコンパイラを作ることに、メリットはあるかな。
車輪の再発明か、それとも、ハードの理解を深めるメリットがあると
見るべきか。
- 602 :デフォルトの名無しさん:2013/03/05(火) 23:34:46.48 .net
- CでCのコンパイラを作るとか普通じゃん
- 603 :デフォルトの名無しさん:2013/03/05(火) 23:39:55.03 .net
- 既存のCコンパイラってCで作ってるんじゃないの?
- 604 :デフォルトの名無しさん:2013/03/05(火) 23:55:26.37 .net
- VCはVCで作られましたってメッセージが出てたよな
- 605 :デフォルトの名無しさん:2013/03/05(火) 23:58:20.95 .net
- 新VCは旧VCで作られたって意味じゃないの?
- 606 :デフォルトの名無しさん:2013/03/06(水) 00:02:41.23 .net
- IDEはVC#メインっぽい雰囲気だが
コンパイラは今でも当然VCだろうね
- 607 :デフォルトの名無しさん:2013/03/06(水) 01:54:55.78 .net
- コンパイラの実用を目指すなら再発明だわな
目的次第
- 608 :デフォルトの名無しさん:2013/03/06(水) 02:05:06.85 .net
- Cコンパイラでもどこが作ったコンパイラかでバイナリの性能やサイズが違うって言うし
- 609 :デフォルトの名無しさん:2013/03/06(水) 02:22:10.54 .net
- まあでもこのスレに来てる大半はそのへんのところ
既存のバックエンドに投げるだけじゃないか
- 610 :デフォルトの名無しさん:2013/03/06(水) 12:50:03.79 .net
- バックエンドは人海戦術
- 611 :デフォルトの名無しさん:2013/03/06(水) 17:30:38.45 .net
- >バックエンドは人海戦術
雲海戦術なら昨今のcloud事情的にありそう
- 612 :デフォルトの名無しさん:2013/03/08(金) 20:25:20.05 .net
- MS製のC関連品では、悲惨な目にあった奴もいるみたいだ。
C++の「仕様通りに動かない」とか...。
- 613 :デフォルトの名無しさん:2013/03/08(金) 21:04:30.62 .net
- >>612
具体的に書かないとただの悪口だぞ。すべて伝聞体だしどの仕様だかわからない
- 614 :デフォルトの名無しさん:2013/03/08(金) 21:42:16.68 .net
- むしろ仕様通りで、仕様が酷いことの方が多かったがw
WinsockでOSのバージョンごとに仕様が違う標準的な関数があるとか。
- 615 :デフォルトの名無しさん:2013/03/09(土) 14:36:18.35 .net
- 仕様を決めた奴が最後まで尻拭いしてくれる訳でもない
- 616 :デフォルトの名無しさん:2013/03/10(日) 23:47:37.76 .net
- 「BASICのコンパイラを作りたい!」
と述べたら、
「おまいは、高級レストランで、カップめんを注文するような奴かw」
と笑われてしまった(泣)...。
- 617 :デフォルトの名無しさん:2013/03/11(月) 00:01:19.69 .net
- BASICコンパイラとか普通にあったと思うけど
笑うような事ではない
- 618 :デフォルトの名無しさん:2013/03/11(月) 00:25:46.35 .net
- レストランの例えは、ちょっとずれてるよな
HDの8mmビデオ機を作りたいと言ってるような話。
しかもBASICは8mmビデオよりずっと古い。
- 619 :デフォルトの名無しさん:2013/03/11(月) 00:28:51.32 .net
- うーん、どっちもどっち。
いずれにせよ現時点でBASICは仕様上すごいアイデアでもない限りありえない。
- 620 :デフォルトの名無しさん:2013/03/11(月) 01:28:54.64 .net
- 作るのが目的であって実用しないんでしょ
- 621 :デフォルトの名無しさん:2013/03/11(月) 01:51:41.45 .net
- COBOLおばあちゃん
http://www.theregister.co.uk/2013/03/09/iwd_grace_hopper/
- 622 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/11(月) 02:07:57.12 .net
- D言語の闇の力を借りれば、COBOLだって高速実行できる処理系ができそう。
- 623 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/11(月) 02:47:16.14 .net
- D言語でCOBOLのランタイムを作ってさらにコンパイルタイムも作っちゃう。
- 624 :デフォルトの名無しさん:2013/03/11(月) 03:37:23.22 .net
- そりゃ例えばバックエンドにLLVMとかを使えば
高速なコードは吐けるだろうけど
- 625 :デフォルトの名無しさん:2013/03/12(火) 03:37:33.50 .net
- LLVMって仕組み上、CPUアーキテクチャ特化の最適化に勝てそうにないから
実際上、微妙なところがあるよね
- 626 :デフォルトの名無しさん:2013/03/12(火) 03:40:22.13 .net
- COINSよりはまし
- 627 :デフォルトの名無しさん:2013/03/12(火) 08:45:13.74 .net
- >>625
というと?
- 628 :デフォルトの名無しさん:2013/03/12(火) 15:09:26.52 .net
- Low Level Virtual Machine - Wikipedia
http://ja.wikipedia.org/wiki/Low_Level_Virtual_Machine
これは面白いな
- 629 :デフォルトの名無しさん:2013/03/13(水) 05:49:26.36 .net
- AutoHotKey のようなスクリプト言語、またはAutoHotKeyの移植版を
Linux 用に書こうかと思うんですが
どの言語で書けば協力者があらわれやすいと思いますか?
今頭にある候補はJava, C# , Python, C, C++ です
- 630 :デフォルトの名無しさん:2013/03/13(水) 08:13:26.80 .net
- >>625
iccくらいにしか負けてないでしょ?
- 631 :デフォルトの名無しさん:2013/03/13(水) 10:00:16.01 .net
- >>628
専用スレあるよ
- 632 :デフォルトの名無しさん:2013/03/13(水) 15:13:23.37 .net
- 【最速へ】LowLevelVirtualMachine【LLVM】
http://toro.2ch.net/test/read.cgi/tech/1211547655/
- 633 :デフォルトの名無しさん:2013/03/15(金) 06:56:14.73 .net
- このスレの住民でLLVMを知らん人がいたのか
- 634 :デフォルトの名無しさん:2013/03/16(土) 09:53:11.48 .net
- そりゃあ、ピンキリの世界だからな。
- 635 :デフォルトの名無しさん:2013/04/10(水) 17:58:03.33 .net
- リフレクションの代わりにアノテーション・プロセッサで
クラスをバイナリ・XML・RDBに変換する言語つくりたいけど
考えただけで気が遠くなった。
- 636 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/04/18(木) 01:14:25.60 .net
- 君の周りでPEGって流行ってる?
- 637 :デフォルトの名無しさん:2013/04/23(火) 23:54:07.09 .net
- "Mastering PEG" "PEG Cookbook" はまだか?
- 638 :デフォルトの名無しさん:2013/04/24(水) 00:33:55.26 .net
- めもめも
- 639 :デフォルトの名無しさん:2013/04/29(月) 09:37:01.43 .net
- java または jython にシンタックスシュガーを加えた言語? を作りたいです
(自作構文を含んだコード) → [自作変換ソフト] →(変換済みコード) → [既成コンパイラ]
という構造にしたいんですが
この自作変換ソフトを書くためにはML系と Haskellってどっちが簡単でしょうか?
MLはわかります。 パターンマッチの関係で他の言語は考えてませんが問題はないでしょうか?
- 640 :デフォルトの名無しさん:2013/05/03(金) 02:17:59.52 .net
- 小さくて読みやすい正規表現処理の実装ないですか……
できればC、C++、Javaあたりで
- 641 :デフォルトの名無しさん:2013/05/03(金) 05:54:18.13 .net
- >>640
DFAエンジンで良ければ↓の19章はどう?
ttp://www.context.co.jp/~cond/books/algo/
- 642 :デフォルトの名無しさん:2013/05/03(金) 06:15:15.53 .net
- >>641
802行、短い! 見てみます。ありがとうございます。
- 643 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/04(火) 23:16:44.03 .net
- 逆コンパイラ作ってる人、居ますか?
- 644 :デフォルトの名無しさん:2013/06/04(火) 23:19:01.13 .net
- はい。
- 645 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/06/09(日) 03:15:28.90 .net
- >>644
逆汗を逆コンパにするのに必要な知識を教えて下さい。
- 646 :デフォルトの名無しさん:2013/06/09(日) 12:53:11.61 .net
- つ [インラインアセンブラ]
- 647 :デフォルトの名無しさん:2013/06/09(日) 13:36:39.72 .net
- パッと思いつくのは
・アドレスにラベルを割り付ける
・関数を切り分ける
・スタックフレームから関数引数・ローカル変数・戻り値を切り出す
・if/for/switchを抽出して構文化する
・DLLからロードされるシンボルを置き換える
解説しているサイトとかあるかは調べてないので知らん
どうせ defineされた定数をマクロ名に戻せないとか
構造体復元が難しいとかあるから大したことはできん
- 648 :デフォルトの名無しさん:2013/06/23(日) 20:48:35.47 .net
- MinCaml(min-caml.sourceforge.net/)ってGC入ってる?
陽にGC入ってるって書いてないだけでGCのコード入ってる?
- 649 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- lua.vm.js
Scala.js
なんかJavascriptが中間言語として凄いことになってきた。
- 650 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- >>648
fdpe05.pptの18ページに実装してないリストがある。
GCも実装してないリストに含まれてる。
- 651 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- >649
最近のはやりはJSをネイティブとして扱ってJSコードをはき出す処理系ってのがあるのでその一環じゃないかと思う。
これとgoogle closureの組み合わせで効率的なJavascriptを生成する感じ
- 652 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- >>651
> 最近のはやりはJSをネイティブとして扱って
いやいやw
- 653 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- >>652
割とマジなんだけどなー
JSをプラットフォームとして扱う傾向にあるの
- 654 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- ネイティブじゃなくてターゲットと言いたいのか?
- 655 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- >>654
それでも違わないけど、Webブラウザ上のネイティブ言語としてのJSっていう扱いなんだよね。
様々なパーティがいろんな言語->JSへのコンパイルみたいな事してる。
- 656 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- なんだかなあ
- 657 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- 寧ろ、生JS嫌われすぎだろ?とw
- 658 :デフォルトの名無しさん:2013/07/02(火) NY:AN:NY.AN .net
- 仕様が柔軟すぎてカオス
- 659 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN .net
- JS向けに最適化されたチップが安く売りだされたら考えてやる
- 660 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN .net
- >>655
このスレ的に正しい用語は
「Webブラウザ上の中間言語としての」
「いろんな言語->jsへのトランスレートみたいな事してる」
かな
- 661 :デフォルトの名無しさん:2013/07/04(木) NY:AN:NY.AN .net
- コンパイルはまあいいと思うけどね。ネイティブはちょっとおかしい。
- 662 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- たぶんJSを目的言語として捉えてるからネイティブって書いたんだろうけど、
まあ気持ちは分からなくもないが……
- 663 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- 名前付けを疎かにするとこのように問題がやまないのである
- 664 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- jsにトランスコードとかがこんなに流行るなら、いっそWebVMみたいなのを作ればいいのに
- 665 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- >>662
その通りなんじゃないの?
ブラウザ上で動かすプログラムだとJS以外ないし。(他にあったっけ?)
ClojureScriptのサイトとか読んでもそんな感じだし、Google closureとか通す処理系みてもなんかそんなニュアンスだし。
- 666 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- それをネイティブと表現するのは、わかりやすいようでかえってわかりにくい
Node.jsやWindows Script Hostだってあるし
そもそもネイティブって何だ?って話に
- 667 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- ChromeはNaCLあるしね。
ブラウザ限定でも分かりにくい用法。
- 668 :デフォルトの名無しさん:2013/07/05(金) NY:AN:NY.AN .net
- > そもそもネイティブって何だ?って話に
いまどきだとx86プロセッサでもx86コードを直接実行してるわけじゃなかったりするしな
- 669 :デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN .net
- むしろなんでJSでやりたがるんだよ
いい加減捨てようぜアレ
- 670 :デフォルトの名無しさん:2013/07/11(木) NY:AN:NY.AN .net
- Javascriptはブラウザ実装がフォークして混沌としてたけど、
言語自体はそれほど悪くない設計だから流行るのは当然。
人が集中して処理系実装も非常に優れたものが多い。
- 671 :デフォルトの名無しさん:2013/07/11(木) NY:AN:NY.AN .net
- あれだけ処理系が進化しちゃうと
今更別の言語に変えるとかもう無理だからな…
別言語からの変換をするか、asm.jsみたいなアプローチをするか
- 672 :デフォルトの名無しさん:2013/07/12(金) NY:AN:NY.AN .net
- >>671
別言語からの変換だけでも結構数でてるからもうしばらくは消えないんじゃないの?
というか2.0仕様だっけ?型導入されたやつとかすら出てきそうにないのが嫌な感じ。
- 673 :デフォルトの名無しさん:2013/08/14(水) NY:AN:NY.AN .net
- EasyUOからOpenEUOへの変換プログラム作ったら
思いのほかうまく動いてしまったのだけど
これって論文にしたら怒られます?
どんな雑誌に投稿すればいいのかもわからないけど
- 674 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- コンパイラ作ってるんだけど、
字句解析器作ってる間に人生終わりそうなんですけど。
lexつかったほうが良いですか?
- 675 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- さすがにそんなにかかるはずはない
力技でも1週間もあれば作れると思うけど
- 676 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- 本に乗ってる奴ならね・・・
- 677 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- >>674
字句なんて1〜2日でできるだろう。
できないとしたら、プログラミングの技能か字句解析アルゴの知識か他の何か、進め方のどこかに問題があるのだろう。そっちを明らかにした方がいい
- 678 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- はいはい、凄いね凄いね。
言って貰いたいんだろ・・・・
- 679 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- じゃあ、1つ質問して良い?
正規表現の構文解析木の段階で状態数を最小にする方法
知ってるか?
- 680 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- >>678
お前みたいな発想だから日本はダメなんだよ
- 681 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- 字句解析器を手書きで作るなら正規表現とか使わないんじゃないの?
- 682 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- >>674
lexくらい、フリーで転がっているのがあるんじゃないの。
それとも、何か、特別なこだわりがあるとか。
自作できないなら、フリーで転がっているのを使うか、
周りの経験者に聞いた方が、早いと思うよ。
字句解析の次は、構文解析が待っている。
さらに、もっと面倒なファイル作りとか、最適化も必要なのだし。
「最適化のために、頭を使う」というレベルでないと、先は長いよ。
ファイルサイズを、極限まで小さくすることにこだわるか、あるいは、
ともかく、完成させることを目指して、最適化は、後の研究課題にするとか、
コンパイラ作りをする連中は、主に、その辺で頭をひねったり、悩んだり
しているのではないかと推測されるから。
- 683 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- >>674
自作言語なの?
・識別子・キーワード
・数値
・文字列
・コメント
・その他記号・演算子
※必要に応じて改行処理
こんだけじゃないの?
- 684 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- 面倒くさければもう、一文字ずつかえして、
パーサで解析させちゃおうyo
- 685 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- そっちの方が大変だねぇ
- 686 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN .net
- >>674
どんな文法なのかでまるで苦労が違うぞ
字句解析と構文解析とが綺麗に切り分けできない言語だったりしてないか?
IF IF=THEN THEN THEN=IF ELSE ELSE=THEN END IF
だっけ?PL/Iで悪名高い文は
- 687 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- インラインアセンブラみたいに
文脈によってキーワードが変わったりするのか
- 688 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- なんか勘違いしている人多いけど
作っているのは字句解析器じゃなくて
字句解析器生成系っすよ
- 689 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- そうなのか?
>>674 には字句解析器作ってるって書いてあるから
言葉通りに字句解析器作ってるんだと思った
- 690 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- コンパイラーじゃなくて自分のアプリのマクロ機能の為に
スクリプトコンパイラーを作る位なんだけど
本格的な言語コンパイラー作ろうと思ったら
lexみたいな解析器生成プログラムとか自作するのが普通?
いまは言語仕様が小さいこともあって、オートマトンみたいなの
力業で手書き
言語仕様はJavaScriptもどきなんだけど、生成プログラムの作り方が
良く分かってないのと、ECMAScriptの仕様の範囲くらいなら
いまのまま力業で実装ってのもありかもって思ってるんだけど
- 691 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- 規模よりも変更頻度とかだと思うよ
一度書けば終わりでもう二度と変更しないってんなら、どれだけ大きくてどれだけメンテしづらくても、まぁ、どうってことない
仕様変更がよくあるなら、なるべく変更しやすい形、そうするとlexみたいなのが一番手軽に変えられるから、そうなるんじゃない
- 692 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- 字句系なんてそうそう変わるもんじゃない
エディタの構文?ハイライトに対応できる範囲で小さく作ればいい
- 693 :690:2013/08/23(金) NY:AN:NY.AN .net
- thx
一応使わないかもだけどlex系の作り方みたいなのは
少し勉強しておきたいな
コンパイラー系は中田育男氏の本斜め読みしただけなんだけど
lex系の処理とかはやっぱりソース読むしか無いのかな?
細かい解説なしに理解出来る気がしない
- 694 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- まずはただの正規表現マッチの実装からやってみたら。
それがわかれば後は混ぜて炒めて塩ふるだけってぐらいに思えるだろう。
- 695 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- >>690
言語は素のJavaScriptにしておいて
どうしてもやりたいことだけJSとのインターフェースクラス作るのが
それを扱う第三者にとっては一番便利だよ
「スクリプトエンジン」って言葉の意味、よく噛み締めてみると
そういう結論になると思う
- 696 :デフォルトの名無しさん:2013/08/23(金) NY:AN:NY.AN .net
- ちなみにJavaScriptエンジンはどれがおすすめ?
- 697 :デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN .net
- >>694
意外とできあがりに差がつきそうな工程だなw
- 698 :デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN .net
- 字句解析を忘れていっそPEGで書いちゃうとか
- 699 :デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN .net
- lexの作り方はドラゴンに乗ってる。
ドラゴンのままじゃ遅くて使い物にならないから
改良してるけど。
- 700 :デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN .net
- Lexerは「言語実装パターン」とか参考になったような
- 701 :デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN .net
- 参考になります
言語実装パターンは目次読んだらなんだかよさそうでした
電子版もあるし、翻訳技術書としてはかなり安めだし
これ読んでみようかな
ドラゴンは定番みたいだけど難しそうな印象、出版も少し古め?
- 702 :デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN .net
- ドラゴンは難しくないよ、むしろ分かりやすい
ろくにコメントの入ってない「ソース丸ごと掲載」ってのが
苦手な俺には特にありがたい
- 703 :デフォルトの名無しさん:2013/09/01(日) 23:05:37.42 .net
- ttp://piumarta.com/software/peg/
このpeg/legっての触ったことある人いますか?
ちょっとだけ遊んでみたんだけど、トークンの位置を扱う方法が分からないんで教えて欲しいです
とりあえずアクションの中でyytextと一緒に行番号と列番号を表示したい
- 704 :デフォルトの名無しさん:2013/09/04(水) 16:30:46.02 .net
- lex+yacc の仕組みを丸パクリしてるっぽいから
そっちの説明を探せばたくさん出てくるはず
flex+bisonでもいい
- 705 :デフォルトの名無しさん:2013/09/04(水) 19:00:06.77 .net
- 2年くらい前に見た時はポシャったプロジェクトと思っていたけど
しぶとく続いてたんだな
- 706 :デフォルトの名無しさん:2013/09/12(木) 19:48:08.44 .net
- ドラゴンブック見て字句解析器生成プログラムを書いてみたんだけど、サイズが大きく
なりすぎる傾向があるので、手書きしたほうがいいような気がした。
もちろんいろいろ工夫する余地はあるんだけど、手書きする手間をかけても良い部分と感じる。
逆に構文解析器は自動生成でもいいかなと思う。
- 707 :デフォルトの名無しさん:2013/09/25(水) 16:18:58.07 .net
- JavaScriptのV8エンジンの文字列処理の最適化について教えてください
例えば、
var s = "";
for(var i=0; i<1000; i++) {
s = "s" + s + i + "e";
}
のようなコードをCやほかの言語で実行しても
V8エンジンほど速くはならないのですが、
V8エンジンは内部でどういう最適化をしているのでしょうか?
- 708 :デフォルトの名無しさん:2013/09/25(水) 16:39:07.74 .net
- 文字列処理の最適化より
配列処理の最適化した方が良い
- 709 :デフォルトの名無しさん:2013/09/25(水) 17:40:52.82 .net
- つーかスレ違い
- 710 :デフォルトの名無しさん:2013/09/25(水) 21:02:34.66 .net
- V8はがべこれしてない
- 711 :デフォルトの名無しさん:2013/10/12(土) 02:00:43.76 .net
- >>707
関係無けど、こういう原理的にはコンパイル時に決定できる最適化関係はV8エンジンは異様に強いよね
- 712 :デフォルトの名無しさん:2013/10/12(土) 19:19:47.74 .net
- >>707
Cでどんなコード書いたのか気になるところ
- 713 :707:2013/10/12(土) 23:34:43.11 .net
- Cのコード
#include <stdio.h>
char buf1[1000000];
char buf2[1000000];
char *bench(int n)
{
int flag = 0;
int i;
char *p1, *p2;
buf1[0] = '\0';
buf2[0] = '\0';
for(i=0; i<n; i++) {
if(flag) {
flag = 0;
p1 = buf2;
p2 = buf1;
} else {
flag = 1;
p1 = buf1;
p2 = buf2;
}
sprintf(p1, "s%s%de", p2, i);
}
return flag ? p2:p1;
}
続く
- 714 :デフォルトの名無しさん:2013/10/12(土) 23:35:36.22 .net
- 続き
int main()
{
int i;
for(i=0; i<2000; i++) {
printf("%s\n", bench(i));
}
return 0;
}
- 715 :デフォルトの名無しさん:2013/10/12(土) 23:36:21.05 .net
- JavaScriptのコード
function bench(n) {
var s = "";
for(var i=0; i<n; i++) {
s = "s" + s + i + "e";
}
return s;
}
for(var i=0; i<2000; i++) {
print(bench(10));
}
- 716 :デフォルトの名無しさん:2013/10/12(土) 23:40:38.09 .net
- 環境
OS: Fedara 19
CPU: Core2 Duo T7500 (2.20 GHz)
gcc 4.8.1
glibc 2.17
v8 3.14.5.10
コンパイルオプション
gcc -O2 -march=native bench.c
結果
time ./a.out > /dev/null
real 0m12.917s
user 0m12.900s
sys 0m0.010s
V8結果
time d8 bench.js > /dev/null
real 0m0.063s
user 0m0.044s
sys 0m0.012s
こんなに違うのですがどういう最適化をしているのでしょうか
- 717 :デフォルトの名無しさん:2013/10/13(日) 01:07:39.01 .net
- 関数benchで副作用が(関数内で)閉じている事はコードを静的解析すれば分かるから、
V8処理系が自動的にメモ化しているのではないかと思われ
def bench(n)
s = ""
for i in 0..(n - 1)
s = "s" + s + i.to_s + "e"
end
s
end
MEMO_BENCH = Hash.new { |hash, key| hash[key] = bench(key) } # メモ化
def memo_bench(n)
MEMO_BENCH[n]
end
def run(n)
t0 = Time.new
for i in 1..n
yield
end
t1 = Time.new
p (t1 - t0)
end
N = 2000
run(N) { bench(10) }
# => 0.358945
run(N) { memo_bench(10) }
# => 0.016584
- 718 :デフォルトの名無しさん:2013/10/13(日) 08:14:54.39 .net
- Cがbench(i)で
JSがbench(10)なのはここに書き込む際のミス?
bench()内のループの実効回数が100倍くらい違ってくるんだけど。
- 719 :デフォルトの名無しさん:2013/10/13(日) 12:45:35.76 .net
- というか、sprintf() 使っている時点で勝負ありだろ
- 720 :デフォルトの名無しさん:2013/10/13(日) 14:54:29.45 .net
- Cのsprintfもprintfも外部ライブラリの関数なので
インライン展開が効かない
2000回のループをひとまとめにすることは出来ないしdenchの
呼び出しのsprintfの引数に与える変数をコンパイル時に決定することも出来ない
対して、JavaScpiptのコードは組み込み関数なので
実質的に全てを展開可能で、最大限に最適化した場合に
print("s0e\ns1e\n......
のような一行だけ実行するかも知れない
Cで最適化が効くように書く事は可能かもしれない
ただ、言語に組み込まれた組み込み関数がある事は
最適化にとって有利なのは間違いないだろう
少なくとも例示された書き方は、Cの速度を評価するには
余りに不適切な書き方ではあるし、Cで意図した処理を
JavaScriptより高速に書くことは常に可能ではある
(手動最適化を含める必要がある場合はあるかも知れない)
- 721 :デフォルトの名無しさん:2013/10/13(日) 15:29:41.09 .net
- >>720
>Cで意図した処理をJavaScriptより高速に書くことは常に可能ではある
Rubyにはクロージャとしてのブロックがあるので、
>>717で示したようにメモ化を用いた高速化は容易に実装できる
Cの場合にはクロージャが無いからRuby同様なメモ化は実装できないが、
代わりに「遅延データ構造」という手法を用いれば実装できる
ただし、遅延データ構造による実装が「常に可能である」か否かは知らない
おそらく対象が何らかの代数構造を満たす必要があるだろう
少なくとも今回のお題の(対象としての)文字列はモノイドなので、これを満たす
- 722 :デフォルトの名無しさん:2013/10/13(日) 20:14:13.25 .net
- >>717
ではbench(10)をbench(i)になおした以下のコードもV8 Engineではメモ化されるのでしょうか。
これでも先ほどのC言語のコードより速くなった(0.462s)のですがどのような最適化によると思われますか?
function bench(n) {
var s = "";
for(var i=0; i<n; i++) {
s = "s" + s + i + "e";
}
return s;
}
for(var i=0; i<2000; i++) {
print(bench(i));
}
- 723 :デフォルトの名無しさん:2013/10/14(月) 06:59:38.53 .net
- 717じゃなくて悪いけど、逆順から呼び出してみ。
for(var i = 2000; i-- < 2000; ) { print(bench(i)); }
これで実行時間が変わらないなら事前計算された文字列をハッシュテーブルから
引いてるんじゃない?
大幅に遅くなるなら、実行結果をキャッシュして次の計算に使用してるんでしょ。
bench(10)の結果はbench(9)の結果を使って計算できるんだしさ。
そういう風にCで作ったら、bench()呼ぶ毎にmallocでメモリ確保しても
ゴミCPU(C-50)で853msだったし。
- 724 :デフォルトの名無しさん:2013/10/14(月) 08:13:36.02 .net
- あ、ごめん。i-- < 2000 じゃなくて i-- != 0 で。
- 725 :デフォルトの名無しさん:2013/10/14(月) 08:53:14.95 .net
- >>724
0.168sでした
事前計算というのはどういう手法なんでしょうか?
- 726 :デフォルトの名無しさん:2013/10/14(月) 09:06:49.52 .net
- これで
http://codepad.org/CZldxktk
$ gcc -O2 -march=native main.c -o main
$ time ./main >/dev/null
real 0m0.001s
user 0m0.000s
sys 0m0.000s
こうだった
- 727 :デフォルトの名無しさん:2013/10/14(月) 09:23:47.57 .net
- あぁ、ちょっと勘違いしてた
http://codepad.org/hiJz0zt5
こうだな
real 0m0.063s
user 0m0.061s
sys 0m0.001s
printf呼び出しが冗長だから、それを少なくするように書けば
いくらでも速くなると思う。(メモリーとの兼ね合い)
多分処理時間の大部分はIOで食ってると思う
これを取り除くとCPU時間はほとんど0に近くなるんじゃ無いかな
- 728 :デフォルトの名無しさん:2013/10/14(月) 09:26:01.91 .net
- >>726
それ実行結果違わね?
>>725
むしろ速くなってるね。
コンパイル時に引数に対応した文字列のテーブルを作っておいて
bench内ではテーブル引いて返すだけって意味で事前計算って言った。
たぶん717のやってることだと思うんだけど、こういう言語
触ったことないからわからん。
- 729 :デフォルトの名無しさん:2013/10/14(月) 09:38:24.69 .net
- >>727
[30, 40]行目をこれと交換して
char* p2;
p = buf;
p2 = buf + n;
for(i = 0; i < n; ++i) {
*p++ = 's';
_itoa(i , &p2);
*p2++ = 'e';
}
*p2++ = '\0';
puts(buf);
- 730 :デフォルトの名無しさん:2013/10/14(月) 09:39:37.87 .net
- ごめん。これじゃだめだ。
- 731 :デフォルトの名無しさん:2013/10/14(月) 09:40:37.01 .net
- あ、だめじゃなかった。ほんとごめん。
- 732 :727:2013/10/14(月) 09:59:49.35 .net
- >729
thx
40行目のnullターミネィトだけ必要ですね
putsの方が速いか
- 733 :デフォルトの名無しさん:2013/10/14(月) 10:04:40.09 .net
- >>729
人間が処理を理解して工夫すれば、
このようにとても早いアルゴリズムに直せると思うのですが、
V8のスクリプトエンジンなどは's'の並びがbufからbuf+nまで連続することに
あらかじめ気づくのでしょうか?
- 734 :デフォルトの名無しさん:2013/10/14(月) 10:21:59.47 .net
- 何とかJSの速度を超えられないかと思ってC++で
std::string s;
for(int i = 0; i < n; ++i) {
s = 's' + s;
std::ostringstream os;
os << i;
s += os.str();
s += 'e';
}
とかやってみたけどさ、全然遅いのよね。
速いアルゴリズムに代えられることに気付いているとしか思えない速さだと思うよ。
この分野さっぱりだからさ、アドバイスはできないんだけどね。ごめんね。
- 735 :727:2013/10/14(月) 11:04:15.70 .net
- あぁこう言うことか
http://codepad.org/rSzsp8sE
これで良いんだよね?
- 736 :デフォルトの名無しさん:2013/10/14(月) 11:17:50.14 .net
- V8 Engineはバッファの基点をbuf[0]にしないことで
for(...) {
s = S + s + E;
}
という文字列処理の最適化を行っているんでしょうか
- 737 :デフォルトの名無しさん:2013/10/14(月) 11:46:20.22 .net
- V8エンジンってのはそんなに凄い物なの?
ちょっと聞いたことが無いんだけど
この程度の最適化を自慢してるくらい何だから
作ってる奴らは
どうせ口ばっかりでたいしたことない奴なんだよ
おれなら10倍高速に書けるのに
- 738 :デフォルトの名無しさん:2013/10/14(月) 19:57:51.28 .net
- >>737
針デカ過ぎです
- 739 :デフォルトの名無しさん:2013/10/14(月) 20:38:14.11 .net
- コピペかと思ったら違った
- 740 :デフォルトの名無しさん:2013/10/14(月) 22:41:11.40 .net
- まぁ、そもそもコンパイラーなんて書く気も無い
ワナビーはそろそろ場違いなんでお引き取り願った方が良いのでは
- 741 :デフォルトの名無しさん:2013/10/14(月) 23:07:41.87 .net
- ごく普通のBASIC的なスクリプトを作って実行するとHSPぐらいは行ってるな。べんちとると。
- 742 :デフォルトの名無しさん:2013/10/17(木) 19:41:19.45 .net
- ポジショントークだよな。
>>734とか速いわけがないコード出して遅いっていう意味がわからないもの
- 743 :sage:2013/12/16(月) 21:40:57.87 .net
- あああ
- 744 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/02(日) 14:49:49.00 .net
- http://katahiromz.web.fc2.com/mathai/mzcalc1.zip
これをC++のプログラムにしたいんだけど、どうすればいいかな?
- 745 :デフォルトの名無しさん:2014/02/03(月) 02:10:20.39 .net
- lexとyacc通してcにすればいいんじゃないかな
そういう意味じゃないってんならlexはともかくyaccの方はコンパイラコンパイラでC++に落ちる奴使えばええんでないの?
あるいは文法規則をc++のtemplateで生成する奴使うとか
- 746 :デフォルトの名無しさん:2014/02/03(月) 10:33:27.76 .net
- そこで具体的なツールの名前が出てくるのがこのスレなんじゃないの
- 747 :デフォルトの名無しさん:2014/02/03(月) 15:37:14.13 .net
- >>746
前スレだか前々スレにcaparってのが紹介されてた
このスレでも>>462でちょろっと名前が出る
ただ文法規則は違うんだよね、移植は必須
- 748 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/08(土) 16:18:00.61 .net
- やはりBison++は互換性に問題があるようだ。さらにWin32では新しいバージョンが用意されていない。
結論:Bison++は使えない
- 749 :デフォルトの名無しさん:2014/02/08(土) 16:47:27.06 .net
- どのみちそんなもんラップして使うだろ
C++のライブラリに拘る意味がわからない
- 750 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/08(土) 16:59:45.47 .net
- 一つのプログラムでパーサーが2つ以上必要なときや、再入可能じゃないといけないときは、困るだろう
- 751 :デフォルトの名無しさん:2014/02/08(土) 17:06:44.50 .net
- ドキュメントくらいしっかり読めよ
YYPARSE_PARAMなんて基本中の基本だぞ
その用途で解決策が乏しくて不満が出るのは普通はFlexの方だ
- 752 :デフォルトの名無しさん:2014/02/08(土) 17:17:51.98 .net
- >>750
お題程度ならC++でゴリゴリ書いても良いじゃんよ
元の目的がはっきりしてないから質問の答えだって迷走すらぁね
- 753 :デフォルトの名無しさん:2014/02/08(土) 20:57:24.99 .net
- staticにするなり、defineで別名にするなり、手で別名にするなり、どうとでもすればいい気が…
そのまんまC++に持ってって動くコードなら適当な名前空間などで括るとかどうにでもすればいい
- 754 :デフォルトの名無しさん:2014/02/09(日) 00:45:47.83 .net
- lexer と parser の協調動作(parser 側から lexer のステートを切り替えるとか)が
必要な場合、何かお薦めの方法ある?
yacc とかが生成したパーザだと、先読みの可能性を考えながら文法書くのが辛すぎる。
- 755 :デフォルトの名無しさん:2014/02/09(日) 02:10:59.56 .net
- 先読みが問題になるって事はreduce以外のタイミングでlexer側のステートを切り替えたい要件?
それをyacc系でやるのは茨の道かな…切替タイミングをreduce時に絞れるなら何とでもなるけど
それ以外はケースバイケースでアクロバティックになる事も割と多かった気がする
- 756 :デフォルトの名無しさん:2014/02/09(日) 03:49:23.31 .net
- LRパーサをやめてANTLRとかに走ってみるとか
- 757 :デフォルトの名無しさん:2014/02/09(日) 10:09:24.90 .net
- keyword_or_identifierみたいなトークンに織り込んでしまえ
汚くなるけど一貫した方法で処理できるからスキャナの状態触るよりはマシ
- 758 :デフォルトの名無しさん:2014/02/09(日) 15:09:09.34 .net
- >>755
LR パーザの動作をちゃんと理解している自信がないのだけど、
LR(0) でない限り、 reduce のタイミングでも次のトークンが
食われてる可能性はあるような。
先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
綱渡り感がすごい。
>>756
LL 系パーザでも、パーザジェネレータを使うと先読みのコントロールが
利用者から奪われるのは変わらない気がする。
>>757
過去、二回くらい試して挫折した。たぶん一番正しい方法なんだけど、
スキャナが余分なトークンを生成する(空白文字の取り扱いが変わるため)ことで、
文法が LR(1) に収まらなくなるという…。
- 759 :デフォルトの名無しさん:2014/02/09(日) 15:23:34.69 .net
- > 先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
ごめん。これ嘘。
もちろん実装依存ではあるのだけど、現実的には常に先読みされていると
思っていいのかもしれない。
- 760 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/09(日) 16:12:54.17 .net
- http://katahiromz.web.fc2.com/mathai/mzcalc2.zip
Boost.Spiritを使ってみた。変数への代入ができないよお。
助けてよお。
- 761 :デフォルトの名無しさん:2014/02/09(日) 16:32:52.05 .net
- 終端記号にトークンを必要としない文法ならreduceのタイミングでは先読みはないよ
Bisonなら吐かれた制御ロジックや表を理解しなくても詳細ファイルを出力させるだけで大体そこは読み取れる
ただし先読みを行う行儀の悪い実装が無いとは言えないし、
parser上の先読みは無くともlexer上の先読みの話は残るので文法によってはyyunput()等での調整は必須になる
終端記号にトークンを必要とする文法ではlexerへの干渉内容次第でyacc系での実装が無理筋なのはその通り
一応色々対策はあるけどそこまで来たら文法と手段の見直しが先決
- 762 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/09(日) 17:02:38.95 .net
- Boost.Spiritは難易度高いよな。。。
- 763 :デフォルトの名無しさん:2014/02/10(月) 20:25:51.23 .net
- スキャナアクセスが考慮されてるパーサジェネレータもあった気がする
- 764 :デフォルトの名無しさん:2014/02/10(月) 20:53:09.41 .net
- %option reentrant と %pure-parser(再入)と
%glr-parser(LALRじゃなくGLRによる衝突遅延)と
%x (スキャナの状態)
Flex+Bison で何が不足か
- 765 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/10(月) 21:24:12.35 .net
- Boost.Spirit V2は難解すぎ。アクションメソッドがconstで何ができるっつーんだよ。
BisonはGPLに汚染されていてC++への対応が悪い。
消去法でANTLRが良さそうなので使ってみるか
- 766 :デフォルトの名無しさん:2014/02/10(月) 22:47:16.40 .net
- Bisonは大して不満ないけどFlexの足回りはやや進化が遅い気がする
前使った時に泥臭いなと思ったのは入力ストリームを一度割り当てて読み切った後に
他の入力ストリームに交換してクリーンリセットする正規の手段がない事と翻訳単位変数依存がある事
あの時は.l側にyy_init=1やyy_start=0等を実行する小さな関数を作って%initial-action他から
実行させて凌いだけど、最近のバージョンは正規の手段準備されたんかね
- 767 :デフォルトの名無しさん:2014/02/10(月) 23:08:31.46 .net
- >>762
Caper使えよもう
- 768 :デフォルトの名無しさん:2014/02/11(火) 03:22:57.50 .net
- Bisonが吐いたコードまでGPLに感染するわけじゃないだろ
C++はわからんな・・・結局Bisonが吐いたコードをC++のコンパイラが処理できれば足りるはず
アクションにどこまでC++を書けるかはやってみたこと無いからわからん
まあANTLRなら戦えるだろう
- 769 :デフォルトの名無しさん:2014/02/11(火) 09:05:54.48 .net
- シェルを作ってみたい
- 770 :デフォルトの名無しさん:2014/02/11(火) 10:23:11.80 .net
- 一瞬で作れる
- 771 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/11(火) 17:34:29.83 .net
- ANTLRWorks 1.5.2ゲットだぜ!
- 772 :デフォルトの名無しさん:2014/02/12(水) 00:37:42.11 .net
- >>766
re2c 使うべし。
- 773 :デフォルトの名無しさん:2014/02/12(水) 23:43:50.58 .net
- サンクス、こんな流れがあったのか、それも結構前から
個人的には近年のツールなのにきちんとCをサポートしてる所がいいな
Flex同様ドライバの一部にも多種の組み込みにも使える余地を残してると
Flexの長所と短所を踏まえて作られた流れみたいだしその内試してみる
- 774 :デフォルトの名無しさん:2014/02/22(土) 20:36:37.25 .net
- ANTLRv3で!ってどういう意味?
v4でどう書けばいいのかわからん
- 775 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/22(土) 23:32:18.23 .net
- ANTLR3でbacktrackが必要な文法だとFOLLOW_set_in_問題が
発生して死ぬ可能性あり。詳しくはFOLLOW_set_in_でググれ。
- 776 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/25(火) 14:05:33.88 .net
- Cパーサーを作成中。
識別子の解析でreduce/reduce conflictが起こってしまうよ。助けて偉い人
- 777 :デフォルトの名無しさん:2014/02/25(火) 14:25:55.18 .net
- とりあえず関数の中を全部捨てて一通りパースを通すのがいいんじゃまいか
関数の中はむずかしいw
- 778 :デフォルトの名無しさん:2014/02/25(火) 14:27:58.33 .net
- あるいは typedefを捨てればチョー簡単になる
- 779 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/25(火) 15:19:58.04 .net
- わかった。typedefにある識別子は型名と見なしていいんだな。
- 780 :デフォルトの名無しさん:2014/02/25(火) 16:36:10.08 .net
- ああ、typedefがあるおかげで、識別子が型名に化けるという問題か。
Cだと確かアドホックにやるしかないんじゃなかった?
Javaの場合確か文脈によって区別できたと思うけど。
- 781 :デフォルトの名無しさん:2014/02/25(火) 17:49:26.54 .net
- Javaにはポインタがないというさりげない工夫
- 782 :デフォルトの名無しさん:2014/02/25(火) 18:14:37.18 .net
- それ、この話とどう関係が?
- 783 :デフォルトの名無しさん:2014/02/26(水) 09:02:57.86 .net
- Javaは関係ないだろといいたいのか
何でポインタが出てくるのかわかんねーといいたいのか
コンフリクトが解消できません
- 784 :デフォルトの名無しさん:2014/02/26(水) 11:06:38.22 .net
- 識別子が型名に化けるので、文法がLALR(1)のようなシンプルな範囲に
厳密には収まっていない、ということと、Javaにはポインタがない、ということに
関連はありますか、ということ。
- 785 :デフォルトの名無しさん:2014/02/26(水) 16:40:29.35 .net
- よくわからん話題だな。俺はchar[]を1文字ごと解析してる。
javaアプリに組み込むインタプリタを作りたいのだが、
それは諦めて、スクリプトを自作パーサでjavaソースに変換し、
javassistで実行中のjavaアプリに動的ロード&実行しようと
計画を立てたものの、一向に進まないやw
- 786 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/26(水) 16:59:45.90 .net
- >>785
LuaJava
luaj
- 787 :デフォルトの名無しさん:2014/02/26(水) 17:27:01.59 .net
- >>785
思い切って機能を端折って、とにかく動くものをエイヤで作らないと、いつまでも進まないと思う。
ひとつめは捨てることになろうとも、とにかく作れ。
- 788 :デフォルトの名無しさん:2014/02/26(水) 20:04:22.24 .net
- >>786
javascriptとかPHPみたいにcharも触れない言語は糞なの。
>>787
まずはクラスとか捨てて関数とプリミティブ型と文字列でコンソールにhello worldやな。
- 789 :デフォルトの名無しさん:2014/02/27(木) 19:33:32.45 .net
- LispやForthみたいなParserなにそれ?みたいなのからAlgol系みたいなパーサが楽なのからやらないでいきなりC++みたいなキ印パーサとか正気とはおもえない。。
- 790 :デフォルトの名無しさん:2014/02/27(木) 21:18:27.77 .net
- お前の書き込みは如何なるパーサーでも解析できない
- 791 :デフォルトの名無しさん:2014/02/27(木) 21:41:54.51 .net
- C系は構文解析と意味解析が綺麗には分離出来ず、パーサからレキサへのフィードバックが
必ず必要になる(寿命管理のおまけつき)から目的を問わず最低開発コストは高いよ
原始的なC構文だけでもエラーや回復、構造体や共用体、ポインタの咀嚼までgdgdにならず完走するのは一仕事
でもこの辺一通り実装出来なきゃCパーサとしては使い物にならない
- 792 :デフォルトの名無しさん:2014/02/28(金) 00:10:08.13 .net
- つかみんなCの新しい実装をつくりたいの?
- 793 :デフォルトの名無しさん:2014/02/28(金) 01:44:45.36 .net
- 楽しいよ?
C90ぐらいだとけっこう手ごろな規模だし
- 794 :デフォルトの名無しさん:2014/02/28(金) 12:48:03.64 .net
- トークンを区切るところまでできた。
まずは関数単位でブロックに分けてみる。
- 795 :デフォルトの名無しさん:2014/02/28(金) 14:57:32.10 .net
- 関数の中から先にやるといっているのだろうか
- 796 :デフォルトの名無しさん:2014/02/28(金) 15:14:24.99 .net
- >>785 の続きか。すまないわすれてくれ
- 797 :片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/28(金) 16:56:06.21 .net
- Cパーサのプロトタイプができたよ!!!!
http://katahiromz.web.fc2.com/mathai/cparser2.zip
暇だったら見てやって下さい
- 798 :デフォルトの名無しさん:2014/02/28(金) 20:56:29.92 .net
- >>796
うん。関数の中以外を分けてブロック化した。
do main : int {
return 0;
}
class A
{
do hello(){}
var i : int;
class B { enum C { a, b, c} }
}
こんな感じのものから、ソースファイル内にある
クラス名・メンバ関数名・メンバ変数名を全部抽出する。
冗長になるけど、関数宣言はdo, 変数宣言はvarを付けて分割しやすくした。
- 799 :デフォルトの名無しさん:2014/03/01(土) 03:19:13.07 .net
- javassist練習中。スクリプトがmain()メソッドひとつで完結していれば
なんとかなりそうだけど、他の関数を呼んだりクラスを後に追加するに
あたってはまるで見当がつかないや
java (スクリプトロード前)
class ScriptRunner {
..void load(String script_file, String script_main){}
..void go(){
....// nothing
..}
..void unload(){}
}
script側
do main(){
..log <= "hello"+" & "+"world";
}
java(スクリプトロード後)
class ScriptRunner {
..void go(){
....Log.log("hello"+" & "+"world"); // changed
..}
..void load(){} void unload{}
}
- 800 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/06(木) 13:56:35.01 .net
- __attribute__のパースに失敗する。reduce/reduce conflictが大量に発生する。大変難しい。
- 801 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/06(木) 17:27:27.33 .net
- __attribute__を文法から除外することで解決した。
- 802 :デフォルトの名無しさん:2014/03/10(月) 21:18:01.35 .net
- SLR文法であるような現実的なプログラミング言語って何か例ある?
- 803 :デフォルトの名無しさん:2014/03/10(月) 21:38:02.51 .net
- なんでわざわざSLRにこだわるんだ?
SLRと状態数がほぼ同じで、より広い範囲の文法を扱えるLALRがあるのに
- 804 :デフォルトの名無しさん:2014/03/10(月) 21:54:58.29 .net
- じゃあGLRの教科書教えてください。
- 805 :デフォルトの名無しさん:2014/03/10(月) 21:56:16.29 .net
- GLRはamazonで検索すると出てくるよ
- 806 :デフォルトの名無しさん:2014/03/10(月) 22:01:27.17 .net
- あんがとあんがと。
- 807 :デフォルトの名無しさん:2014/03/10(月) 22:03:37.88 .net
- CD GLR385760 ハイドン弦楽四重奏曲選集/スコア&パートセット (2003/2/25)
現在お取り扱いできません
こんなのしかない・・・
- 808 :デフォルトの名無しさん:2014/03/10(月) 22:08:46.57 .net
- 「コンパイラ」とかで検索かけて商品説明で自然言語とか扱ってるのを買えばいいんじゃね
- 809 :デフォルトの名無しさん:2014/03/10(月) 22:15:16.29 .net
- やあみんな、Scala開発者のための新しいopen-sourceのPEGパーサライブラリ−
"parboiled for Scala"を紹介しよう。Scalaのパーサコンビネータに似た内部DSLで
PEGパーサを作ることができ、以下の優位点を持つ。
・パーサ規則作成と、入力の解析とがきれいに分かれているので、速度が速い
・親切なエラー報告機能がある
・シンタックスエラーがあってもエラーリカバリして、最後までパースできる
- 810 :デフォルトの名無しさん:2014/03/10(月) 22:25:38.04 .net
- GLRって日本人が考えたんでしょ?
なんで日本語の本が無いの?
- 811 :デフォルトの名無しさん:2014/03/10(月) 22:49:40.31 .net
- すげえ!まるでbisonだ!
- 812 :デフォルトの名無しさん:2014/03/11(火) 00:10:35.61 .net
- PEGはメモリーを使いすぎることと、構文規則を書くときに左再帰が
許されないのが弱点だって。
左再帰は自動除去も考えられるけど、メモリーはどうなんだろな。
- 813 :デフォルトの名無しさん:2014/03/11(火) 10:55:35.08 .net
- 何百メガもあるようなソースを処理するのでなければ今時問題ない。
- 814 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/11(火) 11:32:31.67 .net
- @jonigataさんのCaperが劇的に高速化されたらしいぞ!!!
github.com/jonigata/caper
- 815 :デフォルトの名無しさん:2014/03/11(火) 11:37:22.16 .net
- PEG/Packratのメモリ使用量ってソース規模の関数?そうだっけ?
- 816 :デフォルトの名無しさん:2014/03/11(火) 12:08:58.00 .net
- バックトラックで数百メガ使うことはないだろ
右再帰だと関数とかの単位でけつまで抱え込むみたいだが
- 817 :デフォルトの名無しさん:2014/03/11(火) 22:47:14.53 .net
- メモ化で大量のメモリを消費する
- 818 :デフォルトの名無しさん:2014/03/11(火) 23:09:48.37 .net
- テキストの長さに比例しただけのメモリの消費を、今時「大量」とか言う奴は、
物事の感覚がおかしい。
- 819 :デフォルトの名無しさん:2014/03/11(火) 23:40:28.59 ID:k/rF32la.net
- Packratはもちろん空間計算量O(n)ではあるんだけど
文法によっては入力テキストの100倍とかメモリを消費するので……
たかが比例する程度だから問題ないと言えるほどでもないと思う
- 820 :デフォルトの名無しさん:2014/03/12(水) 22:24:28.72 ID:MqlPltvC.net
- このスレがワードの文字カウントで108881文字ある。
てことは、仮にUTF-8だった場合、300KB位じゃないの?
sjisだよとかそういう話じゃなくて。
PEGで書かれたHTMLパーサがCGIで使われていて、同時に100人がアクセスしてきたら
とか考え始めると、やっぱりメモリーも大事なんじゃないのかな。
あと、PEGの本紹介してください。
ドラゴンブックは読んで、自分でLALRパーサジェネレータまでは書いた。
100年かかった。
10年で出来るPEGの本があったら教えて!
メモリーを心配してるのは、字句解析器が吐くコードがやたら大きくなるので、
こりゃまずいと思ったから。
- 821 :デフォルトの名無しさん:2014/03/12(水) 22:52:28.64 ID:MqlPltvC.net
- IDの所為か人がいなくなった。
地球には自分一人しかいないような気がしてきた。
みんなどこ行ったんだ。
- 822 :デフォルトの名無しさん:2014/03/12(水) 23:15:34.15 ID:9eCKiTHh.net
- 元から人口はこんなもんだった気がする
- 823 :デフォルトの名無しさん:2014/03/13(木) 00:08:05.31 ID:nrkT8+wK.net
- 2月3月の書き込み多いやん。このスレ的には。
- 824 :デフォルトの名無しさん:2014/03/13(木) 19:02:35.71 ID:q1sfF2Hs.net
- >>814
ブログとgoogle codeしか見てなかったthx
- 825 :デフォルトの名無しさん:2014/03/13(木) 19:26:13.01 ID:hR60BOrR.net
- GitHubのCaperって今の時点で2つしかwatch無いのね
watch入れてない自分が言うのもなんだけど。(だって入れなくてもcloneできるしー)
- 826 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/13(木) 20:18:49.02 ID:AgM9wxep.net
- 注視しているならwatchをonにした方がいい。作者にも情報が伝わるし気合いが入ると思うから
- 827 :デフォルトの名無しさん:2014/03/14(金) 18:00:27.58 ID:I0jjMatv.net
- >>826
Pull request出してるのみたお
応援するお
- 828 :デフォルトの名無しさん:2014/03/14(金) 19:54:21.98 ID:aEjAmidr.net
- 何で突然設定変更?と思ったら勢い5以上のスレ限定で告知とかやってたのか
何かお前は板の住人じゃないって言われてるみたいでちょっともやっとするなー
全スレに貼る労力を考えたら仕方ないのかも知れんが
- 829 :デフォルトの名無しさん:2014/03/15(土) 09:28:42.87 ID:nEK2Wa8J.net
- Caperって、コメントアウトしてあるけどLR文法を受理するパーサーも出力できるんだね。
ちょっとソースコードいじってみようかな。
いまどきLALRにこだわる理由もないし。
- 830 :jonigata:2014/03/16(日) 19:19:16.97 ID:TnbKjXG7.net
- >>829
ごめん、そのアルゴリズム考えた人に「うまく動かないんだけど」って
連絡したら、「そのアルゴリズムバグってる」って言われたんで
潰した。手元のバージョンでは消してあります。
- 831 :デフォルトの名無しさん:2014/03/16(日) 21:16:59.72 ID:lTEgNzO7.net
- おお、お久しぶり、っていうかCaperを自己紹介した時以来?
あのときから時々ではありますが、パーサが必要なときにいつも使っているので感謝してます。
- 832 :デフォルトの名無しさん:2014/03/16(日) 21:54:41.12 ID:iSg2y7I0.net
- LRを考えた人って言ったらKnuthか!
- 833 :デフォルトの名無しさん:2014/03/18(火) 03:58:52.77 ID:uwWTDmYY.net
- 結局、LispやForthのような構文解析が簡単な言語には
BASICのようなインタプリタは速度面で勝てないのだろうか。
- 834 :デフォルトの名無しさん:2014/03/18(火) 04:17:09.74 ID:AJd0B3pW.net
- >>833
構文解析なんか最初の一回きりだろう?
構文解析が原因で実行速度で追いつけてないのはインタプリタの設計で毎回パースするようなアホな事してるかじゃないの?
- 835 :デフォルトの名無しさん:2014/03/18(火) 07:51:12.40 ID:6VY9d7pb.net
- BASICは解析結果を別ファイルに保存しておく機能がよくあったじゃん。
- 836 :jonigata:2014/03/18(火) 09:23:22.69 ID:7A7zada1.net
- >>831
ありがとう、使いづらいところがあったら教えて下さい!
今なら対応できるかもしれません。
(最近片山さんに煽られてエラーリカバリ実装するために
ソースほとんど全部読みなおしたところなので、把握出来てる)
>>832
david.tribble.com/text/honalee.html
これです! うまく動かなかった!
- 837 :デフォルトの名無しさん:2014/03/18(火) 14:35:25.99 ID:5bt/pR7P.net
- >>830
返信と現状の情報ありがとうございます。
ドラゴンブック読んだら自分でもLRくらいなら実装できそうなのでがんばってみます。
- 838 :デフォルトの名無しさん:2014/03/19(水) 17:26:05.81 ID:OMDJGFgM.net
- Caper の FUTURE WORKS の項目に EBNF の対応が課題としてありますが、
kp19pp では (group) / ? / * / + による修飾に伴って型とセマンティックアクションを指定し、
内部処理ではそれらを一種の Lambda 的な扱いで解決しています。
これらを参考として Caper 組み込んで下さるといろんな方達が助かります。
- 839 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/19(水) 18:11:31.69 ID:aM34prOC.net
- >>838
じゃあ何でkp19ppを使わないの?
- 840 :デフォルトの名無しさん:2014/03/19(水) 18:34:07.04 ID:OMDJGFgM.net
- kp19pp を作った人が死亡したからです。
- 841 :デフォルトの名無しさん:2014/03/19(水) 19:04:08.24 ID:aM34prOC.net
- 勝手にシンデレラ
死んでても使えませんか?
- 842 :jonigata:2014/03/19(水) 21:37:10.09 ID:tn/Loswd.net
- ちょっと良く覚えてないですが、
EBNFに対応するにはstd::vectorとか特定のデータ構造が必要になるなと思って、
セマンティックアクション側に特定の構造を期待しないcaperとしては
実現不可能だなと思ってやめた気がします。
今だったら、variadic template使えばいいかな?
- 843 :jonigata:2014/03/19(水) 21:39:03.68 ID:tn/Loswd.net
- いやvariadic template使っても難しいかな……
SemanticAction側の条件を厳しくする以外に
いい仕様が思いつかない
- 844 :jonigata:2014/03/19(水) 21:55:41.81 ID:tn/Loswd.net
- あ、次の引数を受け取る関数をセマンティックアクションに渡して、
セマンティックアクション側はテンプレートで受け取ればいいのか。
struct SemanticAction {
template <class F>
void SumList(F f) {
std::vector<Value*> a;
Value* v
while(f(v)) {
a.push_back(v);
}
}
};
こんな感じ
- 845 :デフォルトの名無しさん:2014/03/20(木) 03:19:30.93 ID:2RkNjYZf.net
- 質問っす。
インタプリタのVMについてです。
明快入門 コンパイラ・インタプリタ開発を読み終えましたが、
バイトコード生成から命令実行のスイッチまでのあたりで、
あれよりいい方法はありませんか
また典型的にはどの様に実装されますか
- 846 :デフォルトの名無しさん:2014/03/20(木) 04:38:07.63 ID:QFA+fydK.net
- 規模と寿命と使われ方、他にもターゲットマシンの性格によって使い分けるんでその質問に的確に答えるのは難しいんじゃないかな?
- 847 :デフォルトの名無しさん:2014/03/20(木) 04:46:25.82 ID:2RkNjYZf.net
- >>845ですです。
プラットフォームは当分x86ですが、
場合によっては移植できるよう機種依存コードはできるだけ書きたくありません。
目的は、インタプリタの実装の学習とテストです。
「いい方法」とは具体的には、速度と拡張性のことです。
まだ、有名どころのコードを読むまでのスキルがなく、参考にすることができません。
参考書籍の紹介だけども助かるのでお願いします。
- 848 :デフォルトの名無しさん:2014/03/20(木) 04:47:26.65 ID:2RkNjYZf.net
- だけども->だけでも
です。
- 849 :デフォルトの名無しさん:2014/03/20(木) 23:35:41.25 ID:5JoitLb0.net
- LR系のテーブル/オートマトン作成方法って調べれば調べるほど出てくるな。
- 850 :デフォルトの名無しさん:2014/03/20(木) 23:59:31.80 ID:QFA+fydK.net
- >>847
VMの高速化技法っつってもJITもあれば言語が動的オブジェクトへのメッセージ送りもってれば辞書キャッシュとかVM命令の粒度変更とかいろいろある
学習が主題かつ他人のコードを読みこなせないのであれば数こなすとか、出てる本片っ端から(外れもあるんだけど)読むとかから手つけておくのが一番の近道だと思うぞ
- 851 :jonigata:2014/03/25(火) 00:03:25.96 ID:GAMZ9k7g.net
- ebnfブランチ github.com/jonigata/caper/tree/ebnf で
EBNFを実装してみた(C++ジェネレータのみ)ので暇な人いたら人柱募集。
使い方はsamples/cppのlist0, list1, list2, optionalを参考のこと。
list2のスラッシュオペレータは独特のやつで、
X/Yと書くと X Y X Y XにマッチしてYを捨ててXのリストを返す。
引数リストなどに使う目的で作った。
カッコは役に立つところが思いつかないので実装してない
(今のところ実装する気もない)。
というか実用的な言語ではスラッシュ以外ほとんど使うところないと思ってる。
出力されるパーサ・ジェネレータのソースはより読みやすくなったはず。
- 852 :デフォルトの名無しさん:2014/03/25(火) 00:08:50.24 ID:dHbpAKvO.net
- EBNFってCaperみたいな強い静的型付け言語の機能を利用したものだとYaccみたいに全てを諦めるしか実装方法ない様に思えるんだけどどうなの?
- 853 :jonigata:2014/03/25(火) 22:09:52.29 ID:GAMZ9k7g.net
- とりあえずイテレータ対とかboost::optional的なものを返すようにしてみたよ。
それをどう使うかはセマンティックアクション側で勝手にしてね、的な。
template <class S>
int Document(const S& x) {
for(typename S::const_iterator i = x.begin();i!=x.end();++i) {
}
return 42;
}
こんな感じで受ける。
なぜかrange-based forは使えなかった。
返すイテレータの実装が悪いのかな?
誰かに添削して欲しい。
- 854 :jonigata:2014/03/25(火) 22:12:36.54 ID:GAMZ9k7g.net
- あ、気のせいだった。普通に使えた。
template <class S>
int Document(const S& x) {
for (const auto& y: x) {
}
return 42;
}
これで受けれる。
- 855 :デフォルトの名無しさん:2014/03/26(水) 17:47:48.07 ID:pT8ZOuEm.net
- マイクロソフトが、MS-DOSとWordのソースコードを一般公開したらしい。
サイズはなんと、300kb未満。(2014年3月26日)
「MS-DOS ソース公開」で検索。これは参考になるかな?
- 856 :デフォルトの名無しさん:2014/03/26(水) 21:14:23.26 ID:Q9zmlY8C.net
- アセンブラ読む気あるの?
- 857 :デフォルトの名無しさん:2014/03/26(水) 22:51:21.32 ID:gTzKvy2/.net
- アセンブリ
- 858 :デフォルトの名無しさん:2014/03/26(水) 23:00:27.71 ID:FbuvqMDP.net
- アセンブル
- 859 :デフォルトの名無しさん:2014/03/26(水) 23:43:33.35 ID:14kSAhy1.net
- EX10
- 860 :デフォルトの名無しさん:2014/03/27(木) 13:32:33.06 ID:rBkYuYzY.net
- 確かに、公開しても、あるいは昔のCPUで簡単としても、
解読する暇はないな。意外な盲点だった。
- 861 :デフォルトの名無しさん:2014/03/27(木) 21:04:41.95 ID:I9aZwzrL.net
- MS-DOSの頃なら大半はC記述じゃないか?
前身のMSX-DOSの頃ですらM80/L80/Cと一連の移植ツールセットを売ってたし、
いかにもCP/Mベタ移植っぽい効率の悪い動きしてたからな
- 862 :デフォルトの名無しさん:2014/03/27(木) 21:19:26.84 ID:8HxvNny/.net
- > 前身のMSX-DOSの頃
単に事実誤認。
MS-DOS 2.0 のリリースと MSX の誕生が 1983 年。
- 863 :デフォルトの名無しさん:2014/03/27(木) 21:26:21.36 ID:d2Tv2Evk.net
- 関係ないけどjonigata氏を今まで20代後半くらいかなと思ってたら全然違った
- 864 :デフォルトの名無しさん:2014/03/27(木) 21:39:43.18 ID:zmWcMUxs.net
- >861
MSX-DOS出たときにMSDOSはとっくに存在しとるじゃないか。
PC98でMSDOS上のCross AssemblerとかカノープスのZ80ボード経由でMSXのソフトとか開発するの普通じゃん。
>>859
むせる方か、東芝の12ビットチップの方かどっちだ?
- 865 :デフォルトの名無しさん:2014/03/28(金) 03:58:36.84 ID:NMpBVu7e.net
- >>864の言ってるソフトの括りは偏ってる気がする
I/O直叩きや高速性が求められるゲームなんかは当時はほぼ機械語でゴリゴリ書くしかなかったが
DOS系コード(チップ制御以外)は違いますがな、性能より開発コスト重視で割と酷い動きしてたじゃん
システムコールのレコード長周りとか
- 866 :デフォルトの名無しさん:2014/03/28(金) 07:38:02.50 ID:PUotWYu6.net
- MSXDOS.SYSやCOMMAND.COMのレジスタの使い方はコンパイラの匂いしてた記憶あるな。
MS-DOSもそうなってるかまでは知らんけど。
- 867 :デフォルトの名無しさん:2014/03/28(金) 13:09:02.05 ID:konPatBX.net
- 省メモリ最優先なんじゃないの?
COMMAND.COMは所詮オプションだからCで書けるかも知れんな
- 868 :デフォルトの名無しさん:2014/03/28(金) 13:17:21.59 ID:beMC8OFd.net
- 主要部分は640Kの最後のほうに置いて、下位アドレスに常に常駐するメモリ量は
最小限にするとか、COMMAND.COM だってけっこうエグいトリック使ってるよ。
- 869 :デフォルトの名無しさん:2014/03/28(金) 14:34:01.65 ID:AwRMv83+.net
- >>865
そうなのか?,あの頃ってMSX単体開発するのにMSXDOS出るまでって相当厳しかったんじゃ?
ASCII編のアセンブラとかもMSXDOS前提な書籍とかあったし。
おいらは若松のCP/Mマシンに9918AとPSGつないでMSXのソフト作ってた
タイトル言うと即バレするので書かないけど2つ程ROMカセットで売って貰った、98でクロスアセムでもROMエミュ持ってたらそっちの方が楽かもしれないと思った。
っていうかこれスレ違いだなぁ orz
- 870 :デフォルトの名無しさん:2014/03/28(金) 14:52:40.42 ID:lxVw5nnh.net
- いらん話題持ち込んで糞スレと化したw
- 871 :デフォルトの名無しさん:2014/03/28(金) 18:56:26.40 ID:s2VWqUv5.net
- >>868
その手のCで書き辛い部分はDOSに関しちゃごく一部だから、そこだけ別ルーチンで書いてリンクすれば終わるよ
容量制限の厳しいROMBIOSなんかはMSも涙ぐましい努力してたけど、DOSにそこまでの対効果を見込んだかどうか…
まあここでゴチャゴチャ言うより誰かDLして確認すれば正確に分かると思う
- 872 :デフォルトの名無しさん:2014/03/28(金) 23:34:37.88 ID:NMpBVu7e.net
- >>869
ここで言ってるDOS系コードはDOSの構成要素である各種コード群や
その上で動くソフトの事で、それらはCを排除する絶対的な要件って無かったよなって話
単体開発とかMSX限定とかそういう話じゃないよ、それらで大半を機械語で書く必然性の話
- 873 :デフォルトの名無しさん:2014/03/28(金) 23:49:20.80 ID:beMC8OFd.net
- ダウンロードして展開してみたけども、
msdos\v11source\ の中は *.ASM が7個と Tim_Paterson_16Dec2013_email.txt というテキストファイルが 1個。
msdos\v20source\ の中はファイル118個中 *.ASM が丁度100個、Cで書かれたソースコードは無し。
以上
- 874 :デフォルトの名無しさん:2014/03/29(土) 00:11:29.61 ID:G9+QHheZ.net
- >>873
今の時代でも、参考になりそうなテクニックは網羅されていたかな?
- 875 :デフォルトの名無しさん:2014/03/29(土) 00:16:37.14 ID:dWnwe2uv.net
- >>869
御冗談を
MSXでMSX-DOSのシステムコールが必要なソフトなんて
グラフサウルスくらいしかしらないんだが
MSX-DOSのシステムコールどころかBIOSすらほとんど使ってないはず
市販ソフトはほぼ自前で実装でしょ
MSX-DOSが無いと厳しいという話は聞いたことが無いなあ
- 876 :デフォルトの名無しさん:2014/03/29(土) 00:35:43.67 ID:M4O/iXzM.net
- ソフトの実行じゃなくて開発の事を言ってるんだと思う
DOSが必要だったというかメモリが64KB使える環境でないとメガROM以前の
16KB/32KBROMの開発すら無理だったと言いたいんじゃないかな
http://ascat.jp/tg/tgd3.htm
ただMSX-DOSには多分一般リリースされた日と一通り仕上がった日に結構な開きがある気はする
MSXはシステムコールの実体を全てFDC-ROMが供給という特殊な構成を取ってるから(なのでDOSが
無くとも全てのシステムコールが可能)、初期にFDD付きMSXを売ってたナショナルやヤマハ等の
ベンダー向けに出回った内製のMSX-DOSがあって、FDC-ROMの雛形と一緒に本体開発前に配られてたのでは
でないとROMのデバッグが相当面倒臭い事になる
- 877 :デフォルトの名無しさん:2014/03/29(土) 00:40:35.10 ID:7AalbuHZ.net
- いい加減にスレ違いと気づいて呉
- 878 :デフォルトの名無しさん:2014/03/29(土) 00:45:02.67 ID:EN1l+2Rh.net
- まぁこういった話は正確なことを残しておかないと間違いが後に残る
- 879 :デフォルトの名無しさん:2014/03/29(土) 01:34:52.89 ID:GY0iNuGM.net
- 残しておく価値もない
- 880 :デフォルトの名無しさん:2014/03/29(土) 09:45:57.62 ID:E1gpfH0G.net
- 残すべきスレはここじゃない
- 881 :デフォルトの名無しさん:2014/03/30(日) 00:07:47.84 ID:fOfAZgZI.net
- シリコンコンパイラ作れる猛者はこんな所に居るかい???
居る訳ないよね? とっくにカメラメーカーの研究所とかに就職してるよね?
- 882 :デフォルトの名無しさん:2014/03/30(日) 00:16:03.66 ID:9JDD3652.net
- つらそう
- 883 :デフォルトの名無しさん:2014/03/30(日) 00:20:42.16 ID:ftWH2ajM.net
- PEGとパックラットについて知りたいのですが、
オライリーの言語実装パターンっておすすめですか?
記述が少しあるようなのですが。
- 884 :デフォルトの名無しさん:2014/03/30(日) 00:22:50.64 ID:fOfAZgZI.net
- LLVMこそ至高
ならば全人類のためにLLVMのシリコンコンパイラを作ろうではないか
- 885 :デフォルトの名無しさん:2014/03/30(日) 00:26:39.08 ID:tuvM7udc.net
- はい
- 886 :デフォルトの名無しさん:2014/03/30(日) 02:02:51.37 ID:fKxQVEZv.net
- シリコンコンパイラ、何かと思ったら…研究費ふんだくってくるためのネタみたいなやつやな
- 887 :デフォルトの名無しさん:2014/03/30(日) 20:42:52.71 ID:szVVotNM.net
- ハードウェア記述言語の言語処理系のことを昔はそう呼んでたと思うけど、
それとはまた違うものを最近はそう呼んでるの?
- 888 :デフォルトの名無しさん:2014/04/01(火) 22:32:32.41 ID:28c8XDsv.net
- Caper更新キターーーー!!!
- 889 :デフォルトの名無しさん:2014/04/01(火) 22:43:42.45 ID:yGT6IIrw.net
- test
- 890 :デフォルトの名無しさん:2014/04/04(金) 13:43:25.03 ID:FR4h37Hv.net
- [速報]米マイクロソフト、C#/Visual Basic次世代コンパイラ「Roslyn」を
オープンソースで公開。独自言語など開発可能に。Build 2014
ttp://www.publickey1.jp/blog/14/cvisual_basicroslynbuild_2014.html
- 891 :デフォルトの名無しさん:2014/04/05(土) 22:42:43.55 ID:YvEBV2Nh.net
- MZたんがんがってるなぁ
mergeしてるjonigataさんも大変かも
- 892 :デフォルトの名無しさん:2014/04/06(日) 09:14:01.07 ID:6fUxN2Jx.net
- シリカコンパイラ
- 893 :デフォルトの名無しさん:2014/04/07(月) 00:43:08.70 ID:JdSV9wAR.net
- >>890
開発部隊がバラバラだから、JavascriptもC++(/CLI)も含まれてないw
だせえ
- 894 :デフォルトの名無しさん:2014/04/07(月) 07:14:43.95 ID:aChPVlpJ.net
- アホか
Roslynは現在C++で書かれているC#とVBのコンパイラをブートストラップで書き直すことで
メタプログラミングに使いやすくするプロジェクトだ
- 895 :デフォルトの名無しさん:2014/04/07(月) 10:37:36.86 ID:H5+AU72d.net
- 何のために公開すると思ってんだという話
- 896 :デフォルトの名無しさん:2014/04/07(月) 14:10:26.78 ID:phll1q+x.net
- 社内にはC++やJavascriptのプロジェクトはないんだろうな。
C#とVBとその二つへの埋め込みDSL以外はドキュメントでも触れてないから。
- 897 :デフォルトの名無しさん:2014/04/07(月) 14:17:28.62 ID:ajgX5Rf9.net
- つうかc#もjavascriptもまだ未完成で
perl6とかmozilla tamarinとかdehydra gccとか
ウヤムヤプロジェクトになってもおかしくないレベル。
- 898 :デフォルトの名無しさん:2014/04/07(月) 14:27:51.32 ID:2P7F2w5n.net
- >>896-897
とりあえず完結した入力文法持ってる言語ってFORTHとLISP以外ないんじゃないの?
- 899 :デフォルトの名無しさん:2014/04/07(月) 14:47:17.73 ID:ajgX5Rf9.net
- >>897
間違えた。
javascript→VB
- 900 :デフォルトの名無しさん:2014/04/07(月) 18:01:09.29 ID:H5+AU72d.net
- 未完成ってのは仕様が固まってないじゃなくて
実装が不十分ってことかい
- 901 :デフォルトの名無しさん:2014/04/07(月) 19:10:55.36 ID:GBBuIuYe.net
- 仕様もないけど。
実装=仕様の状態だから。
AST, APIが不完全。
- 902 :デフォルトの名無しさん:2014/04/07(月) 20:30:45.87 ID:2P7F2w5n.net
- rubyでつね
- 903 :デフォルトの名無しさん:2014/04/08(火) 12:29:52.55 ID:8RVw5/Dj.net
- roselyn APIのことね。
C#とVBのbindingがあってそれぞれの言語が対象になってる。
- 904 :デフォルトの名無しさん:2014/05/14(水) 20:41:05.24 ID:z3LIcL30.net
- この辺かい?
アセンブリ命令
http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html?wapkw=x86+manual
Intrinsic
https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/index.htm#GUID-28F49E4A-615D-4373-A36E-C8A92E913325.htm
- 905 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/15(木) 14:20:11.58 ID:/BROOYqI.net
- >>904
ありがとう。助かった。
- 906 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/17(土) 22:18:34.48 ID:MhKuGNEw.net
- CaperにちょっとしたC言語ソースのパーサのサンプルを追加しました。
興味があったらご覧下さい。
https://github.com/jonigata/caper
- 907 :デフォルトの名無しさん:2014/05/18(日) 01:05:27.51 ID:8NF5w4j9.net
- lexerの自動生成って必要?
ANTLRみたいなタイプならともかく、flexみたいなのって
よほど単純な言語でない限りは余計に複雑になるしデバッグもしづらくなる気がする
- 908 :デフォルトの名無しさん:2014/05/18(日) 01:14:44.51 ID:VbYhl7s+.net
- 必要ないものは使わなければいい。
parser generatorも同様。
- 909 :デフォルトの名無しさん:2014/05/18(日) 04:01:55.25 ID:EpNTbyyn.net
- そらまあ慣れてればパーサも手書きで十分だろうけど
- 910 :デフォルトの名無しさん:2014/05/18(日) 05:18:01.09 ID:km1NGPSj.net
- LALR手書きできるスキルがあれば…orz
- 911 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/18(日) 13:38:13.73 ID:wTsBQBni.net
- Caperにスマートポインタサポートを追加しました。
- 912 :デフォルトの名無しさん:2014/05/18(日) 19:32:32.83 ID:3lmx3bd8.net
- はいはいはいはーい質問でーす
処理系のVMについてですが
オペコードはスイッチ文(switch, if)で一つずつ分岐するのと
命令一つ一つを関数でつくりそれを実行するのではどちらが早いですか?
ちなみに処理系はCでできています
おながいします!
- 913 :デフォルトの名無しさん:2014/05/18(日) 19:43:06.46 ID:wTsBQBni.net
- >>912
実測値を信じろ
- 914 :デフォルトの名無しさん:2014/05/18(日) 19:45:19.17 ID:VLKMweCv.net
- 名前どうしたw
- 915 :デフォルトの名無しさん:2014/05/18(日) 20:07:20.77 ID:3lmx3bd8.net
- >>913
大手スクリプト言語どっちなんじゃ?
- 916 :デフォルトの名無しさん:2014/05/19(月) 01:58:06.48 ID:Si0coWpv.net
- >>912
タイトなとこだけ展開。
昔のJITじゃないVMの読むと結構出てくる。
https://sites.google.com/site/io/dalvik-vm-internals
ちょこまかとした書き換えがすごく効く。
gotoとかloadとか小さい命令で。
- 917 :デフォルトの名無しさん:2014/05/19(月) 13:46:34.97 ID:Bh2YKOjV.net
- >>910
LALR(1) も変形すれば LL(2) くらいにはなるので
あとは再起下降でもなんでも好きなようにすればいい
- 918 :デフォルトの名無しさん:2014/05/19(月) 16:15:14.07 ID:rN3m2Poq.net
- (1)じゃないたいていの言語でも、たいていは(2)ぐらい、というのは真だが、
変形すればLL(2)ってことはない。
- 919 :デフォルトの名無しさん:2014/05/19(月) 20:46:03.83 ID:utepvwi4.net
- 手書きするなら左再帰に注意してLL(1)で十分だと思うよ。
- 920 :デフォルトの名無しさん:2014/05/20(火) 00:22:32.49 ID:WYH9CLBB.net
- ていうか手書きなら自然にループとか書けるから、再帰使わなくても
<X> = a (b c)* d
みたいな拡張BNFをそのままプログラムにすると思えばいい。
- 921 :デフォルトの名無しさん:2014/05/20(火) 01:02:13.67 ID:ezmBCAPL.net
- 文法が再帰的なのにか。
- 922 :デフォルトの名無しさん:2014/05/20(火) 07:35:25.85 ID:wdE7nCB8.net
- 本質的に再帰的なのと実装の都合で再起を使ってるのは区別しようね
- 923 :デフォルトの名無しさん:2014/05/20(火) 10:40:44.97 ID:fbMM1sIr.net
- LL (1) で足りるかどうかの方が問題なんじゃね
- 924 :デフォルトの名無しさん:2014/05/20(火) 11:38:51.42 ID:3nq9aFUp.net
- パーザは本質的に再帰。
- 925 :デフォルトの名無しさん:2014/05/20(火) 13:53:02.72 ID:WYH9CLBB.net
- 入力の読み取りを後戻りさせたくないとか、mallocとかしたくないという昔の事情が (1) を欲しただけで、
部分的にちょっと (2) になってる、とかなら今時のマシンと言語とライブラリならたいして問題ない。
本質的に再帰になってるものとしては、式の構文とかがあるけど、普通にループで書ける。
<EXPR> : <TERM> (('+'|'-') <TERM>)*
<TERM> : <FACTOR> (('*'|'/') <FACTOR>)*
<FACTOR> : num | '(' <EXPR> ')'
<FACTOR> のルールにある、「カッコ内の<EXPR>」みたいなのを「本質的に再帰」と言う、
と言えば、まぁそうなんだけど。
- 926 :デフォルトの名無しさん:2014/05/20(火) 14:07:45.06 ID:PibgqYJG.net
- abcとaをはんべつするときは
文字を2こ戻す必要ありますよね。
abdとかabeを弾いてaにしなければならなのですから。
- 927 :デフォルトの名無しさん:2014/05/20(火) 14:13:37.37 ID:mjphnHY1.net
- boost.spiritはLL(∞)です。
- 928 :デフォルトの名無しさん:2014/05/20(火) 20:27:27.59 ID:3YV0fEWD.net
- くわしく
- 929 :デフォルトの名無しさん:2014/05/21(水) 01:50:35.06 ID:aDDYIuqo.net
- LL(*)とか言ってるのはANTLRじゃなかったっけ
なんかPLDIの論文で見たような記憶が
- 930 :デフォルトの名無しさん:2014/05/21(水) 09:18:01.98 ID:Fj6ednoX.net
- LL(k) k:定数
- 931 :デフォルトの名無しさん:2014/05/23(金) 08:33:34.73 ID:S9ZhBRpZ.net
- PEG(パックラット)なら任意個先読みだけど?
- 932 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/05/29(木) 17:26:52.76 ID:XnoInNKg.net
- ひらがな電卓、作ったよ!!!
ひらがな電卓CalcH
http://katahiromz.web.fc2.com/calch/
- 933 :デフォルトの名無しさん:2014/05/29(木) 18:52:19.98 ID:LQk3BeN6.net
- 片山博文MZさんはGithubというキーワードでぐぐると幸せになれる。
- 934 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/05/30(金) 12:21:16.56 ID:SSvUP3u/.net
- GitHubはバリバリ使ってるよ。リクエストはまだないけど
- 935 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/01(日) 06:52:57.24 ID:CnlwSSTK.net
- 日本語は同音異義語が多い。人工言語に比べて、自然言語は多態性が問題となる。
そこでこれまで使われてきたのが形態素解析だが、
多態性が解消できれば人工言語の構文解析の手法がそのまま使える可能性が高い。
そのことをひらがな電卓で示そうと思う。
- 936 :デフォルトの名無しさん:2014/06/01(日) 08:52:19.11 ID:4IM3O9wE.net
- お前は何を言ってるんだ
そんなもんBrainfuckのオペを日本語に置き換えたネタと変わらんわ
- 937 :デフォルトの名無しさん:2014/06/01(日) 13:03:56.67 ID:iF6nhgL2.net
- >>935
lojban で示してくれ
生来 esiperantisto の俺も lojban に傾倒しつつある
- 938 :デフォルトの名無しさん:2014/06/01(日) 19:01:15.96 ID:r6R+kq87.net
- 日本文化には敢えて日本語の多態性をフル活用するカテゴリーがあるからねえ
自然言語から多態性を排除したモノをプログラム言語として使うというのはアリだけど
- 939 :デフォルトの名無しさん:2014/06/04(水) 11:36:58.64 ID:JjkiX3zX.net
- 各非終端記号を囲むカッコが2つ以上あるとLL文法じゃなくなるな。
- 940 :デフォルトの名無しさん:2014/06/04(水) 14:22:25.33 ID:H9m/5fkb.net
- 具体的にBNFで
- 941 :デフォルトの名無しさん:2014/06/05(木) 10:04:10.48 ID:1JqbWMwZ.net
- B:=C|(C)
A:=B|(B)
こんな感じ?
- 942 :デフォルトの名無しさん:2014/06/05(木) 10:10:07.49 ID:1JqbWMwZ.net
- A:=BC
B:=D|(D)
C:=E|(E)
こっちの方が分かりやすいな。
- 943 :デフォルトの名無しさん:2014/06/05(木) 10:13:32.16 ID:1JqbWMwZ.net
- A:=B|C
B:=D|(D)
C:=E|(E)
違った。
- 944 :デフォルトの名無しさん:2014/06/05(木) 17:19:48.25 ID:bOGqmnDA.net
- その例なら、
A := BC
BC := '(' DE ')' | DE
DE := D | E
と、くくり出せる。
- 945 :デフォルトの名無しさん:2014/06/06(金) 11:15:49.36 ID:y0bQ4ynG.net
- なるほど。
- 946 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/06(金) 16:52:16.19 ID:dyn5MnFB.net
- このスレのテンプレにCaperを追加しておくれ。
jonigataさんのパーサジェネレータCaperは充分に実用的になった。
Caper
https://github.com/jonigata/caper
- 947 :デフォルトの名無しさん:2014/06/06(金) 20:49:34.19 ID:iMYjirOz.net
- >>946
アレは良い物ですな、つかなかなかここまで細かい事できるのに使い方が簡単なのってなかなか無いんだよね。
自分使うだけでアレだけど、MZはpullrequest結構出しててそれもとっても有り難かったです。
- 948 :デフォルトの名無しさん:2014/06/06(金) 20:57:54.81 ID:Y8WrhCVM.net
- 今作ってる言語でCaper組み込む予定だよ。
いいよね、Caper。
- 949 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/07(土) 19:30:42.70 ID:3R8CEA88.net
- 実行時に文法を動的に変えることできますか?
- 950 :デフォルトの名無しさん:2014/06/07(土) 20:14:40.23 ID:RFWgpx3m.net
- 主語を明示してください
- 951 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/07(土) 20:32:42.40 ID:3R8CEA88.net
- プログラムが実行時に解析する文法を動的に変えることできますか?
- 952 :デフォルトの名無しさん:2014/06/07(土) 20:37:06.36 ID:SxbAzKvi.net
- eval
- 953 :デフォルトの名無しさん:2014/06/07(土) 20:44:08.32 ID:ZfdboDuT.net
- >>951
たとえばオブジェクト指向言語であれば
Gof本のInterpreterパターンで実装することによって
「実行時に解析する文法」を動的に構成できます
関数型言語だとコンビネータやモナドを使った
構文解析器(パーザ)の動的な構成技法があります
- 954 :デフォルトの名無しさん:2014/06/07(土) 22:43:46.58 ID:3R8CEA88.net
- >>953
わかった
ちょっとjonigataさんに相談してみる
- 955 :デフォルトの名無しさん:2014/06/08(日) 16:02:17.85 ID:3LWaPBPW.net
- 解析実行時に文法を切り替えるっていうと
Boost::Spiritでruleインスタンスを差し替えるのを先に思いついた
- 956 :jonigata:2014/06/08(日) 21:20:13.94 ID:/sgfaDLO.net
- caper、動的エンジンもともともってるよ。
caperの文法ファイルは動的エンジンで起動時に文法作って読んでる。
- 957 :デフォルトの名無しさん:2014/07/12(土) 10:00:10.48 ID:RjnQ2yc8.net
- A:=C|BC
B:=B|(B)
C:=C|(C)
これだとくくり出せないし、LL文法じゃないですよね。
カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃないですよね
- 958 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/07/13(日) 02:56:51.90 ID:rSyi36+2.net
- #include "http://example.com/my_library.h"
こんな機能があってもいいと思う。
- 959 :デフォルトの名無しさん:2014/07/13(日) 03:18:39.87 ID:EUkLrXER.net
- その場合リンカもネット越しにリンクできないと駄目だな
- 960 :デフォルトの名無しさん:2014/07/13(日) 03:19:59.56 ID:hh7t9GxI.net
- Gogleならやってくれそう
- 961 : ◆QZaw55cn4c :2014/07/13(日) 08:51:38.45 ID:OfL9oG5/.net
- >>959
CPP だけの問題なのでは?どうしてリンカが関係するの?論理的に説明してね
- 962 :デフォルトの名無しさん:2014/07/13(日) 10:10:10.25 ID:p5bwqgUP.net
- ヘッダのインクルードはライブラリを使うためのもの、という固定観念だろう
- 963 :デフォルトの名無しさん:2014/07/13(日) 10:11:05.79 ID:fq5Ei1vd.net
- そんなどうでもいいことより
958についてどう思う?
- 964 :デフォルトの名無しさん:2014/07/13(日) 10:35:33.89 ID:YSmlh2iv.net
- 1. ヘッダーをネット経由で参照するなら、libもネット経由で参照するだろう
libだけダウンロードしてヘッダーはダウンロードしないのは変だから
2.libファイルをネット越しに参照するなら、リンカもネット越しに対応する必要がある
3.よって、リンカもネット越しに対応しないとだめ
- 965 :デフォルトの名無しさん:2014/07/13(日) 11:03:49.99 ID:p5bwqgUP.net
- > libだけダウンロードしてヘッダーはダウンロードしないのは変だから
この時点で話が逆になってるし
- 966 :デフォルトの名無しさん:2014/07/13(日) 12:32:33.10 ID:fq5Ei1vd.net
- A:=C|BC
B:=B|(B)
C:=C|(C)
これはLL文法に出来ないということでよいですか[y/n]
- 967 :デフォルトの名無しさん:2014/07/13(日) 12:38:12.73 ID:hh7t9GxI.net
- NFSを知らん世代がC使うようになったのか胸熱
- 968 :デフォルトの名無しさん:2014/07/13(日) 12:45:23.98 ID:+97kXbwc.net
- MZはナウいヤングメンなので、UNIXなんて知りませぬ
- 969 :デフォルトの名無しさん:2014/07/13(日) 16:30:35.77 ID:4JQGeYPE.net
- aとbはエイリアスだから W
- 970 :デフォルトの名無しさん:2014/07/13(日) 18:44:05.22 ID:p5bwqgUP.net
- IDで追いかけるなんて、惨めだなw
- 971 :デフォルトの名無しさん:2014/07/13(日) 18:57:17.40 ID:4JQGeYPE.net
- http://hissi.org/read.php/tech/20140713/cDVid3FnVVA.html
初心者を脱して覚えたてのエイリアス使ってやろうと、
「aとbがエイリアスだったら…」とやっちゃったんだろうな。W
- 972 :デフォルトの名無しさん:2014/07/13(日) 20:21:17.96 ID:p5bwqgUP.net
- 自分が初心者を脱したことがうれしいらしいw
- 973 :デフォルトの名無しさん:2014/07/13(日) 21:08:09.17 ID:c9esStKn.net
- なんでスレ違いの話題でスレ合ってるのをスルーするわけ?
- 974 :デフォルトの名無しさん:2014/07/14(月) 00:06:14.02 ID:IJfuG6Dx.net
- >>946
これのJavaを生成してくれるものってないのでしょうか
- 975 :デフォルトの名無しさん:2014/07/14(月) 09:01:52.27 ID:0ty9SLgy.net
- 6月8日から誰も書き込まなくて
やっと7月12日に書き込んだと思ったら
それを急にスレ違いな書き込みで
スルーするっておかしくない?
- 976 :デフォルトの名無しさん:2014/07/14(月) 16:07:02.50 ID:85+K9ELL.net
- >>975
答えられる人がいないだけだろ
- 977 :デフォルトの名無しさん:2014/07/14(月) 20:53:05.31 ID:hsWcAmzQ.net
- >>975
しょうがないから説明するが、>>957の文法は無限ループだから何法だろうがパースできないわけで、
答えなんかないわけよ。そういう頭の悪そうな発言をする人がこのスレに来るミステリー。
あなたがおかしなことを書いてしまったのだから、バカにされたり無視されたりするのは当然の
結果なんだが、俺様が一ヶ月ぶりに質問してやったのにスルーするなという、勘違い甚だしい
態度に二度びっくりだよ。
- 978 :デフォルトの名無しさん:2014/07/14(月) 22:34:06.61 ID:+HCYiRGv.net
- じゃあ最初からそれを書けよ
一切対応せず延々とスレチの話をしてやがって
何が「しょうがないから」だよ
- 979 :デフォルトの名無しさん:2014/07/14(月) 23:47:27.27 ID:4Au1+Pyc.net
- 皆のスルー力が高いからって喚くな
- 980 :デフォルトの名無しさん:2014/07/15(火) 14:59:02.41 ID:JZ9KbigV.net
- >>977
意味不明。
LL文法ではないかあるかを聞いているのに
「何法でもパースできないから答えが無い」とか的外れな回答をするアホ。
一言LL文法で済む話なのに。
ちなみにプッシュダウンオートマトンでパースできますが、これは
秘密にしておこう。
- 981 :デフォルトの名無しさん:2014/07/15(火) 15:11:44.46 ID:JZ9KbigV.net
- よくみると>>957は文法をきいているのであって、
解析法を質問しているんじゃないんだよな。
本当に的外れワロスwww
少なくとも文脈自由文法に含まれることは確かだな。
- 982 :デフォルトの名無しさん:2014/07/15(火) 22:11:20.95 ID:mz5l6m+l.net
- 何言ってるのかわからない。
>>957は、解析器の作成に失敗するか、常にパースに失敗する解析器しか生み出さない。
パースが成功することは決してない。パース*できない*。
だから、>>966の「LL文法にできるか」という問いには、
「>>957は意味不明であり、あなたが何をしたいのかわからない」
「あなたがやりたいことがLL文法にできるかは『答えようがない』」
っていうのが正解でしょ。
ちなみに>>957の「カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃない」については
「LLで、先読みの上限を超えたら上手く扱えないだろうけれど、カッコのせいじゃないだろ。」
って答えができるが態度悪いやつに説明するのが面倒だから無視しているだけね。
- 983 :デフォルトの名無しさん:2014/07/16(水) 09:34:22.88 ID:iVIaM1wP.net
- パーサーに>>957を読み込ませて解析できるかってことをきいてるんじゃなくて、
985を変形してLL文法解析器で構文解析できるかをきいているんでしょ。
- 984 :デフォルトの名無しさん:2014/07/16(水) 09:39:32.16 ID:iVIaM1wP.net
- あと先読み数は関係ない、LL(1)とは書いてないから。
LL(∞)だから扱えないとうのは理由にならない、無限の代わりに十分に大きいN
を使えばいいんだから。
- 985 :デフォルトの名無しさん:2014/07/16(水) 09:52:56.89 ID:Dccn/eWm.net
- 態度を持ち出すとはワロタ
劣勢ですなあ
- 986 :デフォルトの名無しさん:2014/07/16(水) 10:06:34.41 ID:iVIaM1wP.net
- 過疎になると初めに書く勇気が無いくせに
勇気のある一人誰かが書き込むとハイエナのように
群がってそいつの引きづりおろして人の手柄を横取りする
ハイエナばっかだな。
とくに>>946と片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0(>>958)
どうせこのドチラかの自演だろうけど。
ちなみにおれは通りがかってこのスレを見ただけだがなw
- 987 :デフォルトの名無しさん:2014/07/16(水) 10:12:05.76 ID:iVIaM1wP.net
- 訂正:>>946→>>974
- 988 :デフォルトの名無しさん:2014/07/17(木) 03:01:43.62 ID:syfeQpO8.net
- 文脈自由文法が生成する文字列は、
開始記号を有限回書き換えて得られる終端記号の並びだと定義されている
>>957は何回書き換えても非終端記号が残るのに何をどうしろと
どこかにεあたりが抜けているような気はする
総レス数 988
234 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★