2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

「コンパイラ・スクリプトエンジン」相談室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 ★