板検索:
「コンパイラ・スクリプトエンジン」相談室15 (1011)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:33:18
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

■過去スレ
1 別板リンク(tech)kako/981/981672957.html
2 プログラム板の別スレッドへ
3 プログラム板の別スレッドへ
4 プログラム板の別スレッドへ
5 プログラム板の別スレッドへ
6 プログラム板の別スレッドへ
7 プログラム板の別スレッドへ
8 プログラム板の別スレッドへ
9 プログラム板の別スレッドへ
10 プログラム板の別スレッドへ
11 プログラム板の別スレッドへ
12 プログラム板の別スレッドへ
13 プログラム板の別スレッドへ
14 「コンパイラ・スクリプトエンジン」相談室14
コメント2件


2
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:33:40
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
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:33:55
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 http://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
 http://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
 http://www.bj-ig.de/software/bison/
・ANTLR(非yaccのパーサジェネレータ)
 http://www.antlr.org/
・JavaCC(Java Compiler Compiler)
 https://javacc.dev.java.net/
 http://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
 http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html
・CUP, JLex, JFlex
 http://www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP)
 http://www.jflex.de/
・SableCC
 http://www.sablecc.org/
・¬<><∪∪ (notavacc)LALR(1)
 http://ne.cs.uec.ac.jp/~koto/notavacc/
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 http://spirit.sourceforge.net/
 http://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
 http://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html

4
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:34:10
★ごみ集め

・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/compilerresum...
・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
コメント1件

5
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:34:35
★学会
・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
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:35:22
★参考書籍

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

7
デフォルトの名無しさん[sage]   投稿日:2011/01/28 20:35:38
・最新コンパイラ構成技法(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
デフォルトの名無しさん[sage]   投稿日:2011/01/28 21:45:32
>1
スレ立て乙

前スレ終盤で「漢字嫁ねカタカナ表記の方が分かり易くね?」というカキコに対して賛否あった。
で、手元に「翻訳系構成法序論」という1982年刊行の古い本があるけど、
題名で分かるように(w)徹底的に漢字を使う。この本から「さ行」の一部を引用してみる。

元の英単語は、このスレに興味を持つようなヤシなら誰でも知っているものばかり。
お前ら、対応する英単語を即答できるか?(カナでも可とする)

・算体
・算帖
・算程
・算譜
・算法

9
デフォルトの名無しさん[sage]   投稿日:2011/01/28 22:09:06
>4
>・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
> http://www.okisoft.co.jp/esc/go.html

URL が変更になっていました。

http://www.oki-osk.jp/esc/go.html

10
デフォルトの名無しさん[sage]   投稿日:2011/01/29 04:39:23
タイガーブックは硬い訳で、言い回しが多少くどい
すらすら読めるところもあるんだけどたまに引っかかって、文意を解くのに疲れる
いい本だとは思うけどね

11
デフォルトの名無しさん[sage]   投稿日:2011/01/29 08:28:51
・算体 データ?
・算譜 プログラム
・算法 アルゴリズム

残りはわからん。
コメント1件

12
デフォルトの名無しさん[sage]   投稿日:2011/01/29 11:11:21
算体 object
算帖 file
算程 process
算譜 program
算法 algorithm
コメント1件

13
デフォルトの名無しさん[sage]   投稿日:2011/01/29 13:04:45
Holub氏のCompiler Design in Cと言う本を持ってる人いませんか?

譲り受けた物が手元にあるのですが、最後にピンク色の破線で切り離せるっぽい頁があったみたいなのですが、切り離されていました。
これが何だったのか気になりましてw

14
8[sage]   投稿日:2011/01/29 13:24:01
>12
素晴らしい。全問正解だ。

>11
それが(自分を含めて)普通の感覚だと思うよ。

ちなみにこの本では、前スレで誰かが言ってた初出の箇所は「漢字(英単語)」という表記で、
しかも巻末にまとめとして対訳表があるから、漢字だらけでも苦痛に感じられなかった。

15
デフォルトの名無しさん[sage]   投稿日:2011/02/02 00:51:19
BNFとか全然わかんね

力押しでゴリゴリ動かしてるぜー
コメント1件

16
デフォルトの名無しさん[sage]   投稿日:2011/02/02 07:38:31
BNF は読み書きできるようになった方がいい

構文解析分野共通の言語あるいは図解フォーマットみたいなものだから
コメント1件

17
デフォルトの名無しさん[sage]   投稿日:2011/02/02 07:59:04
>16
BNFとか見てるとなんでlexとyaccに分解されちゃうのか時々わかんなくなる(自己記述可能な言語でパーサ書いたあととか特に)

コメント1件

18
デフォルトの名無しさん[sage]   投稿日:2011/02/02 08:10:30
中間言語経由した方が便利だからじゃね?

19
デフォルトの名無しさん[sage]   投稿日:2011/02/02 13:38:59
当時のハード・ソフトでは字句解析と構文解析を分けないと、時間のかかるεNFAからDFAの変換が
どうしようもなく時間がかかるようになるからでない
コメント1件

20
デフォルトの名無しさん[sage]   投稿日:2011/02/02 16:15:26
片方だけ利用って局面が稀にあるから独立してないと困るな
ツール的にはむしろyacc(bison)は更に2つに分かれてた方が助かる
状態と遷移表の抽出結果を入力として、表圧縮とソース成形の機能だけ利用したい時があるんだよね

入力内の遷移表にshift/goto/reduce以外の独自操作を定義追記出来る形ならなお良い

21
デフォルトの名無しさん[sage]   投稿日:2011/02/02 18:09:47
>15
BNFが使えるようになれば、言語処理系以外の
一般的なデータ構造の記述(定義)にも応用がきくから、慣れた方がいいと思う。

BNFが難しければ、最初は構文図(Syntax Diagram)でスケッチして、
それをBNFに書き換えるという練習をするのがいいと思われ。

構文図については、たとえば http://www.json.org を参照。
他にもググるといくつも例が見つかるから、自分で調べてね。

22
デフォルトの名無しさん[sage]   投稿日:2011/02/02 20:50:57
>17
言語定義の規模が大きくなるから機能分割しているのではないかと。
より一般的な言い方をすれば、字句解析(下位層)と構文解析(上位層)への階層化。
階層化によって、>19が指摘した効率化(処理の高速化)という利点も生まれる。

実用的な言語レベルの規模になると、lex/yaccのようなパーサジェネレータを使わずに
実装された例としては、自分の知る限りSmalltalkしかない。(Lisp/Prolog系は別格なので除く)
しかもSmalltalkの構文は二項演算子に優先度が無い等、かなり簡素な定義になっている。

また、自己記述可能な言語としては、自分はPrologのDCG(Definite Clause Grammer)を
使うことが多いけど、定義言語の規模が小さくても意識的にscannerとparserに分割して書いているよ。
コメント3件

23
デフォルトの名無しさん[sage]   投稿日:2011/02/02 20:57:14
スキャナがパーサの状態に依存する言語は多いけどな
コメント1件

24
デフォルトの名無しさん[sage]   投稿日:2011/02/02 21:08:01
>22
gccは手書きだよ
コメント2件

25
デフォルトの名無しさん[sage]   投稿日:2011/02/02 21:12:28
>23
Rubyとかは、その典型例だね。
Rubyは人に優しい言語だから自分は大好きだけど、中の人にはなりたくないw

26
22[sage]   投稿日:2011/02/02 21:33:40
>24
えええっ!、そうなんだ。知らんかったよ。

27
デフォルトの名無しさん[sage]   投稿日:2011/02/02 22:09:56
ていうか今時の言語だとたいがいパーサは手書きでしょ

28
デフォルトの名無しさん[sage]   投稿日:2011/02/02 22:28:26
ここはポコポコオレ様言語を作るスレだろ。

29
デフォルトの名無しさん[sage]   投稿日:2011/02/03 00:49:17
>24
よく知らんのだけど、
パーサジェネレータの吐いたコードを下敷きにしてるとかじゃなかったっけ?
エラーメッセージの丁寧さがうんたらかんたら

30
デフォルトの名無しさん[sage]   投稿日:2011/02/03 02:06:06
エラーメッセージじゃなくて、エラーハンドリングが丁寧ね。
構文エラーでも、コンパイル続けたいし。

字句解析/構文解析分割については、
字句解析ないと、BNFレベルで字句解析もやることになるから、
予約語や数値リテラルの解析なんかも全部BNFに入ってくる。
嬉しいことなんてないと思うが。

31
デフォルトの名無しさん[sage]   投稿日:2011/02/03 07:49:27
そこで PEG ですよ

32
デフォルトの名無しさん[sage]   投稿日:2011/02/03 10:55:17
>22
FORTRANとCOBOLに火炎瓶投げられても知らんぞw

33
デフォルトの名無しさん[sage]   投稿日:2011/02/03 16:43:02
俺、A=aAa|aに相当するPEG(若干違った鴨)が2^(n-1)個のaを表すってのを知ってPEGがわからなくなった
ぐぐったらちょうどこの文法がPackrat Parserで受理出来ないって英語版Wikiにかいてあるね

34
デフォルトの名無しさん[sage]   投稿日:2011/02/15 00:13:48
書籍「コンパイラの構成と最適化」 で分からないところがあったので質問させてください。

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
デフォルトの名無しさん[sage]   投稿日:2011/02/15 06:57:14
>22
lispのリーダーマクロみたいな仕組みで別言語に化けられる奴とかってないかな?

36
デフォルトの名無しさん[sage]   投稿日:2011/02/15 10:46:32
Scheme実装であるPLT Schemeが発展したracketに
言語開発フレームワークがある。

Algol 60の例
http://docs.racket-lang.org/algol60/index.html

37
デフォルトの名無しさん[sage]   投稿日:2011/02/16 02:23:51
LR(1)において、規則左辺と右辺と先読み記号の組 A->αβγ..., aにおいて、先読み記号はどのように決定されるのですか?

38
デフォルトの名無しさん[sage]   投稿日:2011/02/16 10:43:23
AのFollow-setでいいんじゃない

39
デフォルトの名無しさん[sage]   投稿日:2011/02/16 13:27:01
ありがとうございます。

40
デフォルトの名無しさん[sage]   投稿日:2011/02/16 13:29:47
すみません。なんだか37も日本語おかしいですね。死にます。

41
デフォルトの名無しさん[sage]   投稿日:2011/02/16 20:25:50
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
デフォルトの名無しさん[sage]   投稿日:2011/02/16 20:28:29
すみません。言葉足らずでした。

6行目は「のとき、follow(E) in follow(L)なのでしょうか?」が正しいです。

それと、自分で組んだ実装では、follow(L)はfollow(E)を含みませんでした。
タイガーブックにある例とドラゴンブックにある例をパスしましたが、これが気になって先にすすめません。

43
デフォルトの名無しさん[sage]   投稿日:2011/02/17 04:45:27
立て続けにすみません。
生成規則の右辺に出てくる終端記号以外に関してはfollow集合は作らなくても大丈夫なんですか?

44
34[sage]   投稿日:2011/02/17 23:42:20
COINSのソースを読んで解決しましたので、質問を取り下げます。

ところで、LLVM の '条件文を考慮した定数伝播' って実装途中なんですかね。
肝心な部分の処理が足りてない気がします。

45
デフォルトの名無しさん[sage]   投稿日:2011/02/18 20:01:09
SECDとbf間のトランスレータってありますか?

46
デフォルトの名無しさん[sage]   投稿日:2011/03/08 15:30:02
月刊・コンパイラ。
毎号付属するモジュールを組み立てていくと、あなたオリジナルのコンパイラが完成します。
創刊号は字句解析器が付いて1200円。
ディアゴスティーニ♪

47
デフォルトの名無しさん[sage]   投稿日:2011/03/08 15:41:47
ぷよぷよ

48
デフォルトの名無しさん[sage]   投稿日:2011/03/08 15:45:30
付属のモジュールを組み立てるだけなのにオリジナルとは一体

49
デフォルトの名無しさん[sage]   投稿日:2011/03/08 15:48:35
ウリジナルニダ

50
デフォルトの名無しさん[sage]   投稿日:2011/03/21 21:10:43
旧版ドラゴンブック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
基本的にCを元に、ちょっと改造したC作ってみたいんだけど、
参考しても(パクっても)GPLに汚染されない、無料なwindows向けのCのソースってない?
コメント1件

52
デフォルトの名無しさん[sage]   投稿日:2011/04/03 15:26:35

53
デフォルトの名無しさん[sage]   投稿日:2011/04/03 15:40:34
>52
ありがとう。
でもmingw32(gcc)のライブラリが必要っぽいんだけど、
ライブラリだけなら、汚染されないんだっけ?
コメント1件

54
デフォルトの名無しさん[sage]   投稿日:2011/04/03 15:45:39

55
デフォルトの名無しさん[sage]   投稿日:2011/04/03 15:47:16

56
デフォルトの名無しさん[sage]   投稿日:2011/04/03 15:59:21
>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?
コメント1件

57
デフォルトの名無しさん[sage]   投稿日:2011/04/03 16:12:55
>56
自分なら w32api: のパラグラフ全文を入れると思う
コメント1件

58
デフォルトの名無しさん[sage]   投稿日:2011/04/03 16:27:15
>57
全文入れれば間違いないのは分かるけど、文章の掛かってる部分はどこなのかと…
まぁ、取り合えず、GPLにはならないことは間違いなさそうなので、
もう少し良く考えて、分からなければ、全文にします。
コメント1件

59
デフォルトの名無しさん[sage]   投稿日:2011/04/03 16:41:19
>58
>文章の掛かってる部分

だから w32api: の項目全文でしょ

1. This library... の部分は免責の事しか書いていない(利用制限をしてはいけないという条項が入っていない)
2. This library... の部分だけなら、"the notice below must be included." みたいに書く筈

他人の助言を信じるにせよ信じないにせよ、Use at your own risk.

60
デフォルトの名無しさん[sage]   投稿日:2011/04/05 10:46:46
クラウドコンパイラーってないの?
手元でやるより超高速で出来そうじゃないか?

61
デフォルトの名無しさん[sage]   投稿日:2011/04/05 10:55:07
昔SourceForge.jpがやってた。
コメント1件

62
デフォルトの名無しさん[sage]   投稿日:2011/04/05 20:34:39
西日本も福島原発の放射能に曝される。

4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/

63
デフォルトの名無しさん[sage]   投稿日:2011/04/06 02:55:03
>61
どうして止めたんだろう

64
デフォルトの名無しさん[sage]   投稿日:2011/04/13 20:18:35
ANTLRの*.gって日本語書けないの?
コメントすら日本語入れるとinternal errorとかいってくれちゃうんだけど、
何か設定なりオプションなり加えれば通るのかしら。

65
デフォルトの名無しさん[sage]   投稿日:2011/05/05 18:19:53
hosyu

66
デフォルトの名無しさん[]   投稿日:2011/05/06 23:53:19
BNFで検索すると2ちゃんねるとかいうわけのわからない検索結果ばかり出てくるんだけど。
2ちゃんねるってなんなの。シネよ。

67
デフォルトの名無しさん[sage]   投稿日:2011/05/07 14:01:54
バッカス-ナウアー記法で親父ギャグが飛び交ってないだけマシ

エイホは知らんが。

68
デフォルトの名無しさん[sage]   投稿日:2011/06/10 05:34:32
下降型の構文解析のエラー処理をどうしたらよいのか考えているのですが、
どうも、うまく出来ません。

できれば、エラー復帰もできるとうれしいのですが、そういう話の前に、
エラーをうまく管理できてないので、ちゃんと管理したいんです。
エラーコード表つくって、エラー発生時はエラーコードから、メッセージを取り出せば、
管理は出来そうな気はしてます。

みなさんはどのようにしてますか?

69
デフォルトの名無しさん[sage]   投稿日:2011/06/10 11:11:28

70
デフォルトの名無しさん[sage]   投稿日:2011/06/10 14:15:01
ドラゴン2版の字句解析器の章で一番最後に乗ってる
表をずらして保存して圧縮するアルゴリズムの一般的な名前ってなんですか?

71
デフォルトの名無しさん[sage]   投稿日:2011/06/12 03:55:38

72
デフォルトの名無しさん[sage]   投稿日:2011/06/14 07:45:32

73
デフォルトの名無しさん[sage]   投稿日:2011/06/14 19:09:26
常識無いな
何のコメントも無しにリンク張るなよ紛らわしい。

74
デフォルトの名無しさん[sage]   投稿日:2011/06/14 19:20:31
ご立腹ですねw

75
デフォルトの名無しさん[sage]   投稿日:2011/06/18 15:52:19
>69

ありがとうございます。参考になります。

>71 が JavaScriptで書いたPEGのパーサ
>72 がRubyで書いた、パーサやら、LLVMのなにか
みたいですね。

76
デフォルトの名無しさん[sage]   投稿日:2011/06/21 01:35:14
言語処理系入門したいんですが、ドラゴンブックから入ればいいんですかね?

プログラミング歴はそれなりで、構造化されたものを読むのに
なんとなく再帰下降型のパーサを書くくらいのことはできます
情報科学については学部レベルの知識……かなぁ

仮想マシンの設計や JIT コンパイルとかやってみたいのです
コメント2件

77
デフォルトの名無しさん[sage]   投稿日:2011/06/21 03:14:19
>76
仮想マシンはドラゴンブックでいいかもしれんがJITだとあんまり良い書籍無いような気がする
JITで良い書籍あったら自分も読みたい

#第一版しかもってないからかもしれんけど

78
デフォルトの名無しさん[sage]   投稿日:2011/06/21 06:56:57
JITコンパイルについて詳しいことが書かれた成書って無いんじゃないかなぁ

79
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:02:57
>76
具体的なことまで読みたくなると、ドラゴンブックだけでは足りない。
もちろんドラゴンブックだけで書いてしまう人もいる。

JITはインタプリタ、コンパイラ、リンカ、機械語の知識が必要になるので、
いきなりJITを目指さないほうがいいと思う。仮想機械方式にしておけば、
コンパイラからJITへの発展は、ほぼ仮想機械の書き換えで済む。

tccにJITを付けるプロジェクトが幾つかあったはずだが、今はもうないようだ。

80
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:06:28
最近だとLLVMを触ってみるのもいいかもしれんねぇ

それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた
コメント1件

81
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:08:02

82
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:08:57
>80
タイガーブックのほうが実際的だね。
ドラゴンブックは網羅的概論。

83
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:48:38
これはドラゴン、タイガーの中間くらい?
http://www.amazon.co.jp/dp/012088478X/

84
デフォルトの名無しさん[sage]   投稿日:2011/06/21 12:58:12
竜虎って言うけどまさに言葉どうりの2冊だな。

85
デフォルトの名無しさん[sage]   投稿日:2011/06/21 21:02:38
うちの先生は「二つ組み合わせるのがよい」とか言ってたな
フロントエンドはドラゴンのほうが詳しいが、
最適化の部分はタイガーのほうが良いとか

86
76[sage]   投稿日:2011/06/22 02:51:12
おおう沢山のアドバイスありがとうございます
JIT がレベル高そうな直感はありました
参考にさせて頂きつつ段階的に勉強したいと思いますです

87
天使 ◆uL5esZLBSE [sage]   投稿日:2011/07/03 00:41:34
----
((((((((( 最近だとLLVMを触ってみるのもいいかもしれんねぇ )))))))))(キリッッッッ!!キリッッッッ!!!!キリッッッ!!キリッッ!ッッッ!
----
(((((( それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた ))))))(←キリッッッ!!キリッッ!キリッ!!!!ッッ
--------------(キリッッ


ゴミは何いってもゴミ

88
デフォルトの名無しさん[sage]   投稿日:2011/07/03 15:35:05

89
デフォルトの名無しさん[sage]   投稿日:2011/07/04 10:40:16
Flex2.5.4を使用しています。

355/113のような文字列を分数として認識させたいと思い、後続コンテキストを使用して

ureal   {uinteger}|{numerator}\/{uinteger}
numerator   {uinteger}/\/
uinteger    [:digit:]+

のように定義を書いてみたのですが、
urealのルール部分でunrecognized ruleというエラーになってしまいます。
(意図しているのは、「スラッシュが続く無符号整数を分母と認識する」というものです)

ルールnumeratorが悪いのか、一時的に

ureal   {uinteger}|{uinteger}\/{uinteger}

と置くとエラーは無くなるのですが、正しい書き方とはどのようなものでしょうか。

90
89[sage]   投稿日:2011/07/04 11:57:48
自己解決しました。

 | と / では | の方が優先度が高かったため、

{uinteger2}|{numerator2}\/{uinteger2}

だと、

({uinteger2}|{numerator2})\/{uinteger2}

として解釈されていたようです。

{uinteger2}|({numerator2}\/{uinteger2})

のように括弧をつけたところエラーがなくなりました。

91
89[sage]   投稿日:2011/07/04 12:02:36
すいません、誤報でした

何度か弄っている間にnumeratorの後ろの /\/ を誤って消してしまっていて

numerator   {uinteger}

になっていました。

92
デフォルトの名無しさん[sage]   投稿日:2011/07/04 12:06:31
Flex「落ち着いて!」

93
89[sage]   投稿日:2011/07/04 12:15:13
やりたいことが単純すぎて、どこに盲点があるのか…

暑くて半分頭茹ってるし。へるぷ

94
89[sage]   投稿日:2011/07/04 12:31:56
次こそは間違いないはずだ!

Lex とFlex では定義の展開の方法が違います。Flex(およびPOSIXのドラフト仕様)は、
定義を展開する時に丸括弧( ) で囲みますが、Lex は囲みません。
このことは、Flex 定義では演算子`^'、`$'、`/'、`<<EOF>>'、および`<start state>'は使うことができない
ということを意味しています。

だって(マニュアル8章)。

-l コマンドオプション使ったら排他的スタート状態を使えなくなるし…。うーあー。

95
デフォルトの名無しさん[sage]   投稿日:2011/07/06 10:22:42
ジャングルブックってのもあるらしいぞ

96
デフォルトの名無しさん[sage]   投稿日:2011/07/06 18:11:18
ジュマンジ。

97
デフォルトの名無しさん[sage]   投稿日:2011/07/12 15:25:19
色々な本読むと先読みするのを1文字にするのが滅茶苦茶大事みたいな雰囲気がひしひしと伝わって来るんですけど
そんなに大事とは思えないのは俺だけ?

98
デフォルトの名無しさん[sage]   投稿日:2011/07/12 15:47:12
読み直し

99
デフォルトの名無しさん[sage]   投稿日:2011/07/12 17:32:18
昔はこだわったけど、
つまり1文字先読みだけで解析できればメモリも消費しないし、
入力ファイルを先頭からサーッとなめるだけで終わる。

現代ではぜんぜん大事ではないね。
コメント1件

100
デフォルトの名無しさん[sage]   投稿日:2011/07/12 17:38:15
>99
> 入力ファイルを先頭からサーッとなめるだけで終わる。

何文字先読みしようがここは変わらんだろ。

101
デフォルトの名無しさん[sage]   投稿日:2011/07/12 17:48:45
ワンパスで処理しきれん時代も今は昔、だな

102
デフォルトの名無しさん[sage]   投稿日:2011/07/15 12:43:55
re2c 0.13.5で使用しています。

いくつかのルールからなる正規表現の、各部分を検出するごとにアクションを実行したいのですが、
一番長い(最長一致)ルールのアクションしか実行してくれません。

このような動作をさせるのはre2cでは不可能なのでしょうか。


re2c 0.13.5で現在、以下のコマンドラインで実行しています。
re2c -i -w -o "lexer2.cpp" "lexer2.re"

103
デフォルトの名無しさん[sage]   投稿日:2011/07/15 14:30:29
re2cには最短一致指定がないしねえ。

104
デフォルトの名無しさん[sage]   投稿日:2011/08/04 11:29:59
ウイルスが作成が犯罪になるからオートマトン全体を表すクラスの中にウイルスが存在するから
これからはウイルスを含むクラスとの差を取らないといけなくなるな。

105
デフォルトの名無しさん[sage]   投稿日:2011/08/04 12:34:27
ウイルスを含まないオートマトン全体の集合……パラドックス発生の臭い……!

106
デフォルトの名無しさん[sage]   投稿日:2011/08/04 13:39:08
セル・オートマトンじゃないんだから増殖しないでしょ。
受理するだけなんだから。

107
デフォルトの名無しさん[sage]   投稿日:2011/08/04 13:52:16
オートマトンの定義をみなおしてこい。

108
デフォルトの名無しさん[sage]   投稿日:2011/08/23 14:28:26
新しい言語を作りたいのだけど
関数型とか手続き型とかじゃなくて、既存にない新しい型の言語を作りたいけど
そんな型はもう発見できないのでしょうか?
コメント3件

109
デフォルトの名無しさん[sage]   投稿日:2011/08/23 15:39:00
設計したところで、実装しなければ絵に描いたモチなので、
まずは実装する腕力を付ける必要がある。
なのでまずは手続き型でも関数型でも、なんでもいいから簡単なものを実装してみること。

110
デフォルトの名無しさん[sage]   投稿日:2011/08/23 15:45:01
「関数型とか手続き型」ってくらい大きく枠組みを変える話なら、
新しい計算モデルを考えないといけないよねえ。

111
デフォルトの名無しさん[sage]   投稿日:2011/08/23 15:49:23
絵に描いた餅といえば、
Steele先生のConnection Machine Lispは面白かった。
立派な餅だった。
(*Lispの方じゃないよ)

112
デフォルトの名無しさん[sage]   投稿日:2011/08/23 16:11:23
>108
頑張って発明しろ

113
デフォルトの名無しさん[sage]   投稿日:2011/08/23 20:55:42

114
デフォルトの名無しさん[sage]   投稿日:2011/08/27 11:06:00
>108
キューマシンに特化したような言語はまだないと思うから、それ作ってみたらどうよ。
VMの実装も簡単な部類みたいだし。

キューマシンの研究そのものがマイナーだから、自分でいろいろ考えなきゃだけど、
それを楽しんだり発表したりしたいんだよな?

115
デフォルトの名無しさん[sage]   投稿日:2011/08/27 13:02:13
FIFOLか

116
デフォルトの名無しさん[sage]   投稿日:2011/08/27 13:32:50
結局キューじゃ順序に制約が多すぎて、
データフロー計算やることになる。
データフロー計算は昔流行ったので、特化言語も結構ある。
昔、九州大学でやってて、九大は関数型がメインだった。

117
デフォルトの名無しさん[sage]   投稿日:2011/08/28 09:13:50
ドラゴンブック2みたら
重要状態とはε遷移を含む状態である。
って訳してあるけど原著を見ると
重要状態とはε以外の遷移を持つ状態である。
の誤訳だな。
ドラゴンブックの翻訳、訳者は内容わかってなくて翻訳したんだろうな。

118
デフォルトの名無しさん[sage]   投稿日:2011/08/28 09:21:51
157ページに set alreadyOn[s] to TRUE
って書いてあるけど、これってnewStateの状態だから
TRUEにするっていうのは間違いですよね?
ドラゴンブック2の原著です。

119
デフォルトの名無しさん[sage]   投稿日:2011/08/28 10:03:31
誰も興味ないと思うけど訂正するよ
含む状態→含まない状態

120
デフォルトの名無しさん[sage]   投稿日:2011/09/17 00:56:25
http://www.geocities.co.jp/SiliconValley-Oakland/3432/man/bison/bison-ja...#SEC69

「最後のn個のトークンとグループが文法規則に当てはまる場合には、
それらは規則に従って組み合わされます。これを、還元(reduction)と呼びます。」
とあるのですが、最後のn個というのは複数通りの文法規則があてはまる場合
長い方と短いほうどちらになるのでしょうか?
コメント1件

121
デフォルトの名無しさん[sage]   投稿日:2011/09/17 09:05:52
還元/還元コンフリクト
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2011/09/17 17:05:32
>121
どうもです。
あとbisonの
a: /*空*/ |
...
っていうような
/*空*/ってどういうときマッチするんでしょうか?
一回以上の繰り返しとかを終わらせるとかくらいしかないです?

コメント1件

123
デフォルトの名無しさん[sage]   投稿日:2011/09/18 19:00:24
>122
例えばこういうのはどうです
f()
f(1)
f(1, 2)
関数呼び出し: 関数名 '(' 0個以上の引数 ')'
0個以上の引数: /*空*/ | 1個以上の引数
1個以上の引数: 引数 | 1個以上の引数 ',' 引数
コメント1件

124
デフォルトの名無しさん[]   投稿日:2011/09/18 20:02:42
>123
いまいち>120のリンクにある説明での動作との対応がとれないんですが、
a: /*空*/ |
hoge
;
ってあったとき
hogeって入力があったら,
hogeが先読みスタックへつまれて、
現在スタックには何も無いので/*空*/とマッチ,
シフト還元衝突でhogeが読み込まれるってことでいいんでしょうか?
それだと5.6の還元/還元衝突がよく分からないのですが。
5.6ではsequenceとmaybewordの還元/還元衝突が起こって
先にあるsequenceが選ばれると書かれているように見えるのですが
実際にマッチするのはmaybewordみたいです。

125
デフォルトの名無しさん[sage]   投稿日:2011/09/18 20:41:59
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つのシフトが衝突している
シフトと還元ではシフトが優先されるので最後のシフトの方法が選ばれる
コメント2件

126
デフォルトの名無しさん[sage]   投稿日:2011/09/18 21:26:23
ドラゴンブック2は原著も翻訳も間違いが多いの?

127
デフォルトの名無しさん[sage]   投稿日:2011/09/18 22:03:31
>125
どうもです。

128
デフォルトの名無しさん[sage]   投稿日:2011/09/19 13:35:51
「どうもです。」とは日本語おかしくありませんか。
正しい日本語をつかいましょうね。

129
デフォルトの名無しさん[sage]   投稿日:2011/09/19 13:59:37
>125
恐悦至極にございます。

130
デフォルトの名無しさん[sage]   投稿日:2011/09/19 22:38:31
いや、誰も誉めてないから

131
デフォルトの名無しさん[sage]   投稿日:2011/09/23 13:55:04
恐悦至極
意 味: 相手の厚意に大変喜び感謝すること。

132
デフォルトの名無しさん[]   投稿日:2011/10/01 14:26:37
C++をflex,bison等で構文解析するコードってありませんか?
#includeとかは全部無視してて良いのですが。
あってもおかしくなさそうな物なんですが見つかりません。

133
デフォルトの名無しさん[sage]   投稿日:2011/10/01 14:50:18
構文解析関係の本をamazonで探して買えば?

134
デフォルトの名無しさん[sage]   投稿日:2011/10/01 14:57:06
C++の仕様を、bisonで構文解析できると思わない方がいい。と言うかまず無理。

135
デフォルトの名無しさん[sage]   投稿日:2011/10/01 17:03:42
a * b; // 掛け算ですか? いいえ、変数宣言です
コメント1件

136
デフォルトの名無しさん[sage]   投稿日:2011/10/02 00:03:44
C++は複雑すぎてないらしい

137
デフォルトの名無しさん[sage]   投稿日:2011/10/02 00:09:49
昔のgccがそうじゃなかった?
Cのみかもしれないけど

138
デフォルトの名無しさん[sage]   投稿日:2011/10/02 02:10:09
今の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
デフォルトの名無しさん[sage]   投稿日:2011/10/11 12:50:32
「コンパイラの構成と最適化 第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)だと、
「抜け」が出てくるんじゃないかと思います。
コメント2件

140
デフォルトの名無しさん[sage]   投稿日:2011/10/11 15:19:34
そんな最後の方のページまで読んでるなんてすごいね。

141
デフォルトの名無しさん[sage]   投稿日:2011/10/11 21:10:47
え、みんな最後まで行かないで投げちゃうの?w

142
デフォルトの名無しさん[sage]   投稿日:2011/10/12 00:20:16
>139
succ() と child() の定義を確認してみ。
p.339 の最後の段落。IDOM() がポイント。

succ()にしたら同じブロックを二度以上処理しちゃうよ。
コメント1件

143
139[sage]   投稿日:2011/10/12 11:28:51
>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)を呼び出していけば、必ず全てのブロックを一回づつ巡る事に
成るんですね。

しかも、実際のプログラム実行時の実行順序と同じ順序関係を満たしている
んですね。
コメント1件

144
139[sage]   投稿日:2011/10/12 11:43:15
今回、勘違いしてしまった理由は、Y∈child(X) に対して SEARCH(Y)を
再帰的に呼び出して行くだけでは、全てのブロックを巡ることが出来ない
場合があるのではないか、と思ってしまったことです。

しかし、実際には、>143 に書いたとおり、child(X)に対応した構造で
ある「支配木」は、プログラム中の全てのブロックを必ず一回づつ含む
面白い構造をしているんですね。

145
142[sage]   投稿日:2011/10/12 23:24:56
そういうことです。根から順に一度ずつ辿れるんですね。
最適化って、うまく動くとすっごい楽しいです。

146
デフォルトの名無しさん[sage]   投稿日:2011/10/13 02:39:26
   ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
 <SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA! >
  ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
    、        、        、       、        、
  /っノ      /っノ      /っノ     /っノ      /っノ
 / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧
 \\(    )\\(    )\\(    )\\(    )\\(    )


ところで、C言語風の構文解析でBisonファイルを3つ書いて三層構造にしたんだが、こういうのって普通?
字句解析 → マクロ展開層 → プリプロセス命令解析層 → 普通の構文解析層 の順で、マクロ展開層はバッファに展開した文字列を字句解析器が読むように設定する。

コメント1件

147
デフォルトの名無しさん[!sage]   投稿日:2011/10/13 04:27:44
普通。

148
デフォルトの名無しさん[sage]   投稿日:2011/10/13 05:30:28
flexは?
コメント1件

149
デフォルトの名無しさん[sage]   投稿日:2011/10/13 12:33:03
>146
ありがちな話

150
146[sage]   投稿日:2011/10/13 15:42:43
やっぱそうなのか。ありがとう。

>148
字句解析は一層で大丈夫だった。

151
デフォルトの名無しさん[sage]   投稿日:2011/10/15 08:46:49
「コンパイラの構成と最適化 第2版」中田育男 朝倉書店
の15.レジスタ割付けのp.409の厚被覆アルゴリズムの部分で、
大体の方針は分かったのですが、細かい部分が分からないので
質問させてください。

アルゴリズムとしてi)〜iv)が書かれていますが、 特に iv)の部分が分か
りません。

ii) 循環区間グラフの左から右に向かって、厚被覆の要素の候補となりうる
生存区間を全てリストしていく.その際,どの生存区間との組み合わせで
候補となるかを記しておく.

iii) 最初に選んだ循環区間のループの最後の部分(のステップ)に到達
したとき,ii)で最後の厚点に対して選んだ生存区間に,その循環区間と
重ならないものがないときは,厚被覆は存在しない.そのようなものが
あったときは,その1つを選ぶ.

iv) iii)で選んだものから始めて、ii)とは逆向きに、ii)で作った候補
の中から厚被覆となる組み合わせを作っていく(それまで選んだものと
重なりの無いものを選んでいく).


【分からない理由】

iii)で既に最良のものが選ばれていると思えるのに、iv)ではいったい
何をしようとしているのか分かりません。既にいっぱいいっぱになっている
ように思えるのに、逆向きに選んだところで、隙間が無いのでどうしようも
ないように思えてしまいます。


ご親切な方のアドバイスをお願いします。
コメント1件

152
デフォルトの名無しさん[sage]   投稿日:2011/10/20 08:59:10
ドラゴンブックのアルゴリズム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
デフォルトの名無しさん[sage]   投稿日:2011/10/20 09:11:18
すみません、
[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
デフォルトの名無しさん[sage]   投稿日:2011/10/20 12:34:59
対象も手順も、根本的にアルゴリズムをちゃんと理解してないように見えるけど。
まず説明を読んで手でやってみたら?
その後に表つきで例として載ってるんだから答合わせも楽でしょう。

155
デフォルトの名無しさん[sage]   投稿日:2011/10/21 14:37:42
すみません。どうしても理解ができません。
アルゴリズム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が重複してうまく動作するようには思えません。
何度も何度も申し訳ありません。理解のある方、ご教示ください。
コメント1件

156
デフォルトの名無しさん[sage]   投稿日:2011/10/21 19:03:44
本の読み方と言うか学習の仕方は
各自身につけてないとねぇ…

157
デフォルトの名無しさん[sage ]   投稿日:2011/10/21 21:28:12
>155のような大先生に教示するなんておそれ多くてとてもとても……

158
デフォルトの名無しさん[sage]   投稿日:2011/10/22 13:39:47
大学生かな?もしかして院生?
コンパイラの勉強をされてる方に
今更自習の仕方をお教えするなんて大それたことを………

159
デフォルトの名無しさん[sage]   投稿日:2011/10/22 15:18:35
構文論の複雑な部分を見ると、「構文と動作が直結したForth最強」とか思うよな。

160
デフォルトの名無しさん[sage]   投稿日:2011/10/22 15:50:07
Forth はスタックマシン用の複数のアセンブラコードを
一行にまとめて書いた感じ

構文なんて有って無いようなモンだ

161
デフォルトの名無しさん[sage]   投稿日:2011/10/22 16:19:08
自己解決しました。
LR(1)のgotoを用いていたのが間違いだった様です。
文脈上、LR(0)の主要項集合を扱うのでLR(0)のgotoを使わなければいけませんでした。

162
151[sage]   投稿日:2011/10/23 08:12:05
>151 の質問にも回答をお待ちしておりますので、よろしくお願いします。

163
デフォルトの名無しさん[sage]   投稿日:2011/10/23 16:02:33
ここまで突っ込んだこと聞くなら先生に直撃の方がいいんじゃなかろか?
www.k.hosei.ac.jp/~nakata/
一番下にメアドあるし

164
デフォルトの名無しさん[sage]   投稿日:2011/10/23 22:44:20
それはダメだろ。
明確な間違いを指摘するなら結構だが、理解できないなんて理由でメールしてたら中田神に迷惑だ。
答えられる人がいなくたって仕方ないよ。
正誤表は確認しとくべきだが。
コメント2件

165
デフォルトの名無しさん[sage]   投稿日:2011/10/23 23:01:05
そうかなあ


166
デフォルトの名無しさん[sage]   投稿日:2011/10/23 23:01:42
俺は以前、瀬山士郎の数学の本について
本人に理解できないとメールで質問したら、
数回にわたって理解できるまでメールのやりとりをしてくれたよ

もちろん、どこまで理解できて、何が理解できないのか、
こういう理由でこういう事ではないかという
自分の考えを説明した上でのことだが

他にも、海外の著者にも拙い英語で質問したら、
皆さんちゃんとやりとりしてくれた

普通はこちらが真摯に質問すれば、相手も真摯に答えてくれるよ
ただ、相手も仕事や研究があって忙しいから返事に時間かかるかもしれんし、
クヌース先生みたいに秘書に任せているかもしれんが

167
デフォルトの名無しさん[sage]   投稿日:2011/10/24 08:59:59
迷惑な奴だ
コメント1件

168
デフォルトの名無しさん[sage]   投稿日:2011/10/24 09:34:03
企業と同じように、社会貢献は大学の義務だから、
まともな内容であれば問題ない。

169
デフォルトの名無しさん[sage]   投稿日:2011/10/24 09:48:04
金払って大学行けよ

170
デフォルトの名無しさん[sage]   投稿日:2011/10/24 12:44:01
>167
その考え方は勿体ないなぁ
せっかくメールアドレスが公開されてるんだから、
遠慮しないで、思い切って質問してみた方がいいよ

専門書は著者も金稼ぎや頼まれて書いてる分はほんの僅かで、
ほとんどは情報を発信したくてうずうずするから書いてる
俺の恩師もそうだったが、真面目な質問は大歓迎なんだよ

171
デフォルトの名無しさん[sage]   投稿日:2011/10/24 13:52:34
質問歓迎って書いてるならどんどん質問すればいいんじゃね?

ただ、メールアドレスが書いてるからとかどっかの恩師が大歓迎してたからとか
そんなアホな理屈で一般的に質問OKという風潮ができるのは恐ろしい
うっかりアドレスも書けなくなるな
コメント1件

172
デフォルトの名無しさん[sage]   投稿日:2011/10/24 14:01:44
所詮は他人事。

173
デフォルトの名無しさん[sage]   投稿日:2011/10/24 15:46:14
そういうフィードバックは改訂の時の参考になるだろうし、著者にとっても良いんじゃないかな?

174
デフォルトの名無しさん[sage]   投稿日:2011/10/24 19:12:06
むしろ、なぜ質問大歓迎の風潮になっていないのか不思議でならん

175
デフォルトの名無しさん[sage]   投稿日:2011/10/24 20:06:13
学術書じゃない書籍の執筆経験ならあるけど、
その編集プロダクションでは読者からの質問には
回答義務……まではいかないけどできるだけ回答すべき、
みたいな空気だったよ。
最終的には相手が判断することでいいんじゃない?
回答がおっくうなら無視するか断ればいいんだし。

>164 が勝手に思い込んでるだけだと思うけど

176
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:00:14
>164 >171

個人的な意見ですが、学者は、税金で色々と支援されているので、
少なくとも同じ国の人から教えを請うた時は、それに答える義務が
存在すると私は常日頃から思っています。

そうでなくては、自国で学者を支援する意味がありません。
コメント1件

177
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:31:29
回答を受ける人自身が「私には義務がある」というのは気にならないけど、
他人から「おまえには義務がある」と言われる人を見るのは少し抵抗があるなあ。
心情的にはわかるけど語感としてキツい印象を持った。
コメント1件

178
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:33:34
>177
ごめん、「回答を受ける人自身」は「質問を受ける人自身」の間違いです。

179
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:36:46
そんな事になったらセンセイは一切本を出せなくなっちまうな
こわいこわい
コメント1件

180
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:42:04
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

181
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:47:35
>180
自国民の役に立つ義務は必ずあるんですって。

税金で研究していますが、それだけだと、外国人でも研究成果は活用でき
てしまいますから、自国民にはせめて優先して成果が伝える義務があるん
です。

そこを勘違いしている教授が多くて感覚のズレに憤りを感じます。
コメント2件

182
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:48:47
>179
本も自分の利益のためではなく、国民への奉仕として出す義務があるんです。

それが嫌なら、国から研究費を貰わないで下さい。

183
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:51:26
日本を代表する企業である、Panasonicの創業者である松下幸之助も、
 「大学はろくな事を教えないから、教育し直さなくては成らない」
と言っています。

実際的でないセンスの悪い研究や教育が多いと言うことなんですよね。
コメント1件

184
デフォルトの名無しさん[sage]   投稿日:2011/10/24 21:58:53
NASAとかは国民の税金で宇宙開発やってるんだから、その成果は
無償で写真とかの著作権を放棄するとか立派だと思うけどな
コメント1件

185
デフォルトの名無しさん[sage]   投稿日:2011/10/24 22:35:45
>181
ないよ。そんな狭い考え方で本当に有意味な成果は生まれてこない。あなたの勘違いの方が甚だしいw

186
デフォルトの名無しさん[sage]   投稿日:2011/10/24 23:16:22
まあ本出した先生も
真面目な質問来たら嬉しいだろう
好意で答えてくれるのはありがたい
回答を義務とか言うのはお門違い

187
デフォルトの名無しさん[sage]   投稿日:2011/10/24 23:50:30
>184
米国民以外の人間も見放題だけどな

188
デフォルトの名無しさん[sage]   投稿日:2011/10/25 03:38:02
なんか俺がメアドあるから聞いてみたらって書いたせいで荒れているけど
自分は真摯に著書で理解できない場合割と質問するんだ、中田先生はどうかわからないけど、
学術書の場合自分の不理解を説明した上での質問は割と答えてもらえるし、
改訂版で不理解が多かった部分に手直し入れたよって教えてもらえてうれしかったりした経験があったから軽い気持ちで書いたんだ。
元の質問者の学習態度がよかったから勧めてみたけど、スレあれちゃってごめんな。

コメント1件

189
デフォルトの名無しさん[sage]   投稿日:2011/10/25 05:33:00
荒れたうちに入らないだろ。たまにはこんな話題もいいさ。
著者にもメリットあるし、いいかもね。

190
デフォルトの名無しさん[sage]   投稿日:2011/10/25 08:08:53
まぁ、変なことを主張した奴が一人いただけだ。
多分そいつは他人に迷惑を一切かけない、酸素を全く消費しないで生きてる奴なんだろう。

191
デフォルトの名無しさん[sage]   投稿日:2011/10/25 21:27:26
>188
いや、あなたは正しいでしょう。書いた方も、解答できる時間があるかは別にして、率直に嬉しく思うでしょ。

192
デフォルトの名無しさん[]   投稿日:2011/10/26 00:39:31
>181
自国民の役に立つ義務はあっても
お前の質問に答える義務はない

いちいち一人一人相手にしてたら仕事にならん
そのために本出したり、一般向けの講演会やったりしてんだよ

コメント1件

193
デフォルトの名無しさん[]   投稿日:2011/10/26 00:40:59
>183
そもそもpanaみたいなオワコン企業の役に立つ人間を育てようとしてないから
勘違い甚だしい
コメント1件

194
デフォルトの名無しさん[sage]   投稿日:2011/10/26 01:58:06
パナソニックは、ハイブリッド車のリチウム電池を供給してる

195
デフォルトの名無しさん[sage]   投稿日:2011/10/26 03:57:55
そろそろ他の板でやってくれ

196
デフォルトの名無しさん[sage]   投稿日:2011/10/26 07:51:02
>192 てめえの存在がこのスレの妨害だから消えろヴォケ

197
デフォルトの名無しさん[sage]   投稿日:2011/10/26 12:18:13
>193
Panasonicをオワコンというなら、日本企業でオワコンで無い物はどこなの?
コメント1件

198
デフォルトの名無しさん[sage]   投稿日:2011/10/26 12:25:38
続けるなアホが

199
デフォルトの名無しさん[]   投稿日:2011/10/26 19:04:23
え?

200
デフォルトの名無しさん[sage]   投稿日:2011/10/26 23:19:56
>197
いくらでもあるよ
もっとレベルの高い仕事をしてる会社、利益率の高い会社・・・いくらでもある
ざっと四季報にでも目を通してみたら?

実際、panaは儲かってもいないし、優秀な人も行ってないしね
一部優秀な人もいるけど、大半は作業員レベル。学歴も低い。
コメント1件

201
デフォルトの名無しさん[sage]   投稿日:2011/10/27 10:06:06
>200
具体的にどこ?
コメント1件

202
デフォルトの名無しさん[sage]   投稿日:2011/10/27 10:14:30
時代時代によってコロコロと事情は変わるけど、今の時代、大メーカーの
正社員で研究・開発、と言えば、そこそこ優秀な人はいってると思うけどね。
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2011/10/27 10:15:18
そろそろスレタイ見ようか (--##

204
デフォルトの名無しさん[sage]   投稿日:2011/10/27 10:23:49
大学教員自身が自分がセンスの悪い的はずれなことを研究していると自ら
気付くことはないんだろう。

馬鹿は自分が馬鹿なことに気付かないらしいから。
コメント1件

205
デフォルトの名無しさん[sage]   投稿日:2011/10/27 11:27:44
まさしく >204 自身のことだな

206
デフォルトの名無しさん[]   投稿日:2011/10/28 00:37:21
>202
panaの研究・開発がレベル低いなんて言ってないよ。
「一部優秀な人」と書いたのは研究開発の人たちのつもり。
でもね、panaは連結で30万以上の社員がいるけど、そのうちの大半は
低レベルな仕事しかしてないんだよ。低レベルな仕事というのは
工場の現場のこと。こういう低レベルな仕事を抱えこんでいるかぎり
どうしようもないよ

>201
ファナックとか、製薬全般とか、たくさんあるよ
東証一部だけでも1000以上の会社があるんだから、自分でいろんな会社調べてみたら?
低レベルな仕事をたくさん抱え込んでいる会社は図体がでかいから目立つけど、
そんなもんは日本を代表する会社じゃないよ。中身が伴ってない。でかいだけ。

テレビ作る仕事なんてもはや昔の繊維産業と同じ。オワコン。
韓国がライバルになった時点で負けたも同然。なぜなら韓国の
ほうが給料が安いから。韓国人と同レベルの仕事しかできないから
panaはオワコンなんだよ。
給料の安い韓国人と同じ仕事しかできないのに日本人の高い給料を
取るから、サムスンは黒字なのにpanaは赤字になるんだよ。

ファナックや製薬はどう?
ライバルはどこ?中国でも韓国でもないよ。
それがレベルの高い仕事をしてる証拠だよ。
こういう会社は給料は高いし、高い給料を出しても儲かってる。
コメント2件

207
デフォルトの名無しさん[sage]   投稿日:2011/10/28 08:23:52
>206
>ファナックとか、製薬全般とか、たくさんあるよ

現状、発展途上国が台頭してきてないとは言えるけど、ロボット作り
がPanasonicがやってることに比べてそんなに高度だとは思えないし、
製薬に関しては口に入れる物だから国内産に人気があることが大きく
影響している。
コメント1件

208
デフォルトの名無しさん[]   投稿日:2011/10/28 09:33:20
パナソニックは産業ロボットの先駆けだけどな。
俺が生涯で初めて見たロボットがパナソニックの5軸だった。
それは、博覧会で書道やってたやつだったな。
コメント1件

209
デフォルトの名無しさん[sage]   投稿日:2011/10/28 10:56:33
そろそろスレタイ見ようか (--###

210
デフォルトの名無しさん[sage]   投稿日:2011/10/28 11:36:08
自習で行き詰まった奴の次はスレチな話題かよ

211
デフォルトの名無しさん[sage]   投稿日:2011/10/28 22:43:23
>206
でおまえはどういう仕事してるの?、自宅警備?

212
デフォルトの名無しさん[]   投稿日:2011/10/28 23:43:02
>207
>ロボット作りがPanasonicがやってることに比べてそんなに高度だとは思えないし、

何の根拠もなく思うとだけ言われても困るけど・・・
現実の評価はではロボットのほうが高度なんだよ。
それだけのお金をみんな現実に払ってる。
それだけファナックは儲かってる。ほかにはできない、高度な仕事だから
みんな高いお金を払ってるんだよ。
あれだけ儲かってるのに、テレビ作りみたいに簡単に真似できることなら
すぐに韓国や中国に真似されるよ。できないんだよ。

>製薬に関しては口に入れる物だから国内産に人気があること

そんなことじゃないよ
日本国内の製薬売り上げランキングでもファイザーとか
ノバルティスはベスト10に入ってるんよ。
つまり日本人も外国産の薬をたくさん飲んでる。
でも中国や韓国の薬は飲んでない。なんでかわかる?
人気の問題じゃなくて、そもそも中国や韓国にまともな製薬企業がないんだよ。
世界の製薬企業の売り上げランキングを見てみたら?
中国や韓国じゃ薬は作れないから、彼らは外国産の薬ばかり飲んでるんだよ。

>208
そう
だからパナもテレビ作りなどというくだらない仕事を早く捨てて
高度なことだけをやったほうがいい。
ようやく捨て始めてるようだけどね。

213
デフォルトの名無しさん[sage]   投稿日:2011/10/28 23:48:27
とスレタイすら読めない馬鹿が喚いてます

214
デフォルトの名無しさん[sage]   投稿日:2011/10/30 11:12:35
panaはこのスレタイにそったテーマだと、
携帯向けのJVMは黎明期に結構頑張っていたよ。

215
デフォルトの名無しさん[sage]   投稿日:2011/10/30 15:26:36
IBMの東京基礎研が頑張ってるとか聞いたような >JVM

216
デフォルトの名無しさん[sage]   投稿日:2011/10/30 16:28:53
あそこは昔、所長がsmalltalkのVM屋だったことがある。
コメント1件

217
デフォルトの名無しさん[sage]   投稿日:2011/10/30 18:11:11
VisualSmalltalkとかあったねぇ
コメント1件

218
デフォルトの名無しさん[sage]   投稿日:2011/10/30 22:16:43
>217
あれの発展系がVisualAgeJavaなんだよね、今再開しても十分魅力的だとおもうんだがだいぶ前にVA*系はとだえちゃったな

IBMって言語開発系のプロダクト凄くいいのに長続きしないの悲しいな

コメント1件

219
デフォルトの名無しさん[sage]   投稿日:2011/10/30 23:29:33
>218
Eclipseに引き継がれてる。
元々どの言語向けもsmalltalkで書かれていたのを、
組み込みJava用VisualAgeでJavaで書き換えたのが始まり。

>216
http://www.bayspo.com/kurasu/kurasu8xx/kurasu807/807.html

220
デフォルトの名無しさん[]   投稿日:2011/11/04 21:23:54
質問させてください。
簡単な言語処理系のようなもの(基本的な制御構造・関数・ローカル変数がある程度)を作っています。
速度を追求する必要がないので、構文木を直接、再帰的に評価しています。
この評価器を
0. suspend/resume できるようにしたい。
1. ファイル入出力などを非同期に行いたい。
ため、自前でスタック相当のものを用意して非再帰的な形に書き換えられれば、と思っています。
単純な木のトラバースなら非再帰の形に書き換えられるのは理解しているのですが、
構文木の評価を非再帰的に行おうとすると、中間コードを吐く以外の方法が思いつきません。
用途的に中間コードを吐くのはちと大げさなので、もし構文木を非再帰的に評価する
良い方法がありましたら教えてください。

221
デフォルトの名無しさん[sage]   投稿日:2011/11/04 21:29:51
中田先生の本に、確かLLパーサを非再帰的に構成する手法の解説があったと思うけど
コメント1件

222
デフォルトの名無しさん[sage]   投稿日:2011/11/04 21:46:52
>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
デフォルトの名無しさん[sage]   投稿日:2011/11/04 21:57:38
再帰なんて自分でスタックフレーム作って地道に積むだけだろ?
中間コード吐けない事情があるなら同情するけど
コメント2件

224
デフォルトの名無しさん[sage]   投稿日:2011/11/04 22:11:47
諸々のLR法なら上向き解析の効率的な手法はかなり研究されているし、解析のための前準備の方法も効率的に行えるんだけど
LLはよく分からないっていうか>223が言っている通りなんじゃないかな。

225
デフォルトの名無しさん[sage]   投稿日:2011/11/04 22:16:59
>223
if 文とかがあって動的に評価されるかされないか決まる場合を考えてください。
条件の値を評価してからどっちを積むか決めなければいけないので、再帰しない条件だと、
stack.push( stmt.cond );
stack.push( new IfStmtEvaluator( stmt.then, stmt.elze ) ); // なんか if 文を実行する特殊な値を積む。
こんな感じにしないといけない。この「特殊な値」が増えてくると事実上中間コードを吐いているような状態
になってしまうのです。

226
デフォルトの名無しさん[sage]   投稿日:2011/11/04 22:19:37
あ、上のコード、スタックに積む順序が逆でした。すいません。

227
デフォルトの名無しさん[sage]   投稿日:2011/11/04 22:56:14
質問文が異常に分かりにくいですね…。ゆとりですいません。
単純に
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() );
  }
 }
}
こんな感じのコードしか思いつかないんです。
コメント1件

228
デフォルトの名無しさん[sage]   投稿日:2011/11/05 00:22:23
>この「特殊な値」が増えてくると事実上中間コードを吐いているような状態になってしまうのです。
はい。それしか方法はありません。

229
デフォルトの名無しさん[sage]   投稿日:2011/11/05 01:02:38
なぜ中間コードを使いたくないのか分からん
かえって大げさになるだけだと思うが

携帯か組み込み用途か?

230
デフォルトの名無しさん[sage]   投稿日:2011/11/05 02:08:31
再帰パーサをCPS変換してみたら幸せになれるかも

231
デフォルトの名無しさん[sage]   投稿日:2011/11/05 14:56:22
> はい。それしか方法はありません。
うーん。そうですか。もしかしたら何か賢いテクニックがあるかと思ったんですが。

> かえって大げさになるだけだと思うが
みたいですねえ。速度が全く問題にならないので、もし中間コード生成が必要なければ
そっちの方がシンプルでいいと思ったんです。現にステートの保存が必要なければ再帰的な評価器で
済んでいるわけで。

> 再帰パーサをCPS変換してみたら幸せになれるかも
CPS に変換して末尾関数呼び出しをループに置き換えると >227 と同じような感じになりませんか?
あとでもう少し考えてみます。

232
デフォルトの名無しさん[sage]   投稿日:2011/11/06 00:19:06
スタック毎保存したら?

233
デフォルトの名無しさん[sage]   投稿日:2011/11/06 02:19:42
スレッドにしちゃって、フラグを見たり一定時間経過でスリープに移行とかどうよ?

234
デフォルトの名無しさん[sage]   投稿日:2011/11/08 03:14:01

TXL の話題はここでいいのかな?

http://www.txl.ca/nabouttxl.html

235
デフォルトの名無しさん[sage]   投稿日:2011/11/09 08:41:25
面白いな

236
デフォルトの名無しさん[]   投稿日:2011/11/09 12:20:50
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
デフォルトの名無しさん[sage]   投稿日:2011/11/11 23:45:31
だれかxtextで簡単な言語を実装してみてよ

238
デフォルトの名無しさん[sage]   投稿日:2011/11/15 13:46:44
正規表現で*を連続で2回以上つけることは文法的に無意味だけれど
禁止してはいけませんよね?
コメント1件

239
デフォルトの名無しさん[sage]   投稿日:2011/11/15 14:02:02
アホなユーザーにも判るようにエラーにするべき
無意味なことを許してはいけない
コメント2件

240
デフォルトの名無しさん[sage]   投稿日:2011/11/15 14:51:00
>238
意味は全く無いが処理コストは食うね
>239
0回以上の繰り返しだから文法的にも間違ってはいないと思うが、エラー処理には賛成する

241
デフォルトの名無しさん[sage]   投稿日:2011/11/15 14:55:11
でも人間ならまだしも機械的に作られた正規文法にその形が無いことが保証されているんですか?

242
デフォルトの名無しさん[sage]   投稿日:2011/11/15 15:39:52
複数のパターンから合成する際に
(a*)* みたいになることはあるね

243
デフォルトの名無しさん[sage]   投稿日:2011/11/15 17:14:54
文法内で設計思想の整合性がないとおかしいよな
>239のノリでエラーにすると(((a)))も文法的に無意味だから禁止になっちゃう

効率と柔軟さのバランス次第だね
コメント1件

244
デフォルトの名無しさん[sage]   投稿日:2011/11/15 23:37:11
あのなあ、機械的に生成したなら正規化するだろ普通の頭なら
>243のようなアホがいるから仕事が増える

245
デフォルトの名無しさん[sage]   投稿日:2011/11/16 08:29:34
A = a*, AA = A* のような定義から機械的に生成してるとして、
どうやって機械的に正規化できるのかな?
ヒューリスティックでルールをいくつか適用することはできると思うが。

246
デフォルトの名無しさん[sage]   投稿日:2011/11/16 23:17:07
決定的にするんだろ
問題ない
出来ないなら適用する文法見直し

247
デフォルトの名無しさん[sage]   投稿日:2011/11/17 13:13:33
構文解析されるデータを作るのが人ならa**とか((a))は許した方がいい
構文解析されるデータを作るのがプログラムならa**とか((a))は許さなくてもいい

248
デフォルトの名無しさん[sage]   投稿日:2011/11/17 18:40:22
そうだな。

249
デフォルトの名無しさん[sage]   投稿日:2011/11/18 00:10:30
せやな

250
デフォルトの名無しさん[sage]   投稿日:2011/11/18 13:01:36
構文解析されるデータを作るのがプログラムなら
a**とか((a))はどう出力されるのか仕様を確認だな

251
デフォルトの名無しさん[sage]   投稿日:2011/11/18 15:11:51
LL(1)では((a))を許さない方が難しいな。
a**の場合はa**の形が出てこなければそう処理は変わらないな。
よってa**は許可した方がいいな。

252
デフォルトの名無しさん[sage]   投稿日:2011/11/18 16:31:10
構文論と意味論はごっちゃにしないほうがいいと思うんだけど

253
デフォルトの名無しさん[sage]   投稿日:2011/11/18 17:13:07
せやな

254
デフォルトの名無しさん[sage]   投稿日:2011/11/18 17:13:27
よいよいそれにしとけ

255
デフォルトの名無しさん[sage]   投稿日:2011/11/18 17:19:58
せやろうか?

256
デフォルトの名無しさん[sage]   投稿日:2011/11/19 01:14:12
そこは

  もち論

と返すところだべ

257
デフォルトの名無しさん[sage]   投稿日:2011/11/24 12:43:06
そういうこと書くとスレが止まるからヤメロ

258
デフォルトの名無しさん[sage]   投稿日:2011/12/21 22:29:20
なんかスレ立ってるけど、立てるならせめて「パーサジェネレータ」って名前で立てろよ。
というわけで一旦放置して落とせ。

259
デフォルトの名無しさん[sage]   投稿日:2011/12/22 23:18:26
http://www.oreilly.co.jp/books/9784873115320/

新宿の大型書店に大量に置かれていたので見てきた。
理論よりも具体例で話を進めている感じで入門者には良さそうな感じ。動物本にありがちな冗長さも少なめ。

でも買わなかった
コメント1件

260
デフォルトの名無しさん[sage]   投稿日:2011/12/23 11:15:26
中田 育男って
日本のコンパイラの本書いた有名なやつだな。
コメント1件

261
デフォルトの名無しさん[sage]   投稿日:2011/12/23 16:32:46
ヒエログリフか。動物ですら無いな
ってかオライリーの本って特定のプログラム言語を扱うときだけ動物表紙なんだな

262
デフォルトの名無しさん[sage]   投稿日:2011/12/23 17:22:52
もともと言語実装パターンの原書はオライリーではなくPragmatic Bookshelfから出てる
原書のヒエログリフはカラーなのに紫と黒の二色刷りにしてくるあたりやらしい
あとプログラミング言語でなくても動物表紙なのはいっぱいあるよ

263
デフォルトの名無しさん[]   投稿日:2011/12/28 01:09:25
>260
RubyのMatzは大学生のころ中田先生の研究室だったんでしょ。そのことが「推薦のことば」に
書いてある。

年末年始休みにこれ読んで1つくらいおれおれ言語つくってみっかな。

264
デフォルトの名無しさん[sage]   投稿日:2011/12/28 01:45:23
matzくすなんかどうでもいいよ

265
デフォルトの名無しさん[sage]   投稿日:2011/12/28 09:14:34
だれか言語実装バターンを試してみるブログ書かない?

266
デフォルトの名無しさん[sage]   投稿日:2011/12/28 11:38:03
言い出しっぺの法則

267
デフォルトの名無しさん[]   投稿日:2011/12/29 02:03:51
「じゃあ、俺やるよ」ノシ

268
デフォルトの名無しさん[]   投稿日:2011/12/29 08:20:42
「いやいや、俺が俺が」ノシ

269
デフォルトの名無しさん[sage]   投稿日:2011/12/29 12:54:44
「いやいやいや、俺が俺が俺が」ノシ

コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2011/12/29 13:06:51
「「どうぞどうぞ」」

271
デフォルトの名無しさん[sage]   投稿日:2011/12/29 13:58:21
>269
どうぞどうぞw

272
デフォルトの名無しさん[]   投稿日:2011/12/30 16:54:37
C++のコンパイラの場合、作る側すら、仕様の全貌を理解しきれていない
ようだ。

273
デフォルトの名無しさん[sage]   投稿日:2011/12/31 20:56:32
Cなどは実装が先で仕様というか規格が後から追っていた歴史もなくはない

274
デフォルトの名無しさん[sage]   投稿日:2011/12/31 21:12:00
>135
> a * b; // 掛け算ですか? いいえ、変数宣言です

名前空間の違いで判断できるから、
名前空間に対応したbison作ればいいんでは。
名前空間での切り分けってほとんどの言語で使ってるでしょ。
C言語でもtypedefで同じ式になるし。
コメント1件

275
デフォルトの名無しさん[sage]   投稿日:2011/12/31 21:12:17
実装が先で仕様が後という意味では、JavaScriptやRubyなんかも同じだね

276
デフォルトの名無しさん[sage]   投稿日:2011/12/31 21:29:09
いやいやいや、
実装して使う人が増えたから規格で仕様を統一したんでしょw
規格が先なんてありえないっての
コメント1件

277
デフォルトの名無しさん[sage]   投稿日:2011/12/31 21:34:45
その昔、Adaという言語があって .....

278
デフォルトの名無しさん[sage]   投稿日:2011/12/31 21:49:14
EiffeleとかModula-3とか
コメント1件

279
デフォルトの名無しさん[sage]   投稿日:2011/12/31 22:35:12
lispとかaplとかコンピュータプログラミング用じゃなかったし

280
デフォルトの名無しさん[sage]   投稿日:2012/01/01 05:46:44
それは嘘

281
デフォルトの名無しさん[sage]   投稿日:2012/01/03 12:44:39
>274
flexがやってます。
identifier, keyword, typenameをtable lookupで区別してる。

282
デフォルトの名無しさん[sage]   投稿日:2012/01/03 12:48:55
Adaと一緒で、PL/1も規格先行じゃなかったか。
Iswim, FPは実装は計画されてなかった。

>278
Eiffel

283
デフォルトの名無しさん[sage]   投稿日:2012/01/03 13:06:08
G-machineとかlamda式を日本語で説明してる書籍ってないですかね

284
デフォルトの名無しさん[sage]   投稿日:2012/01/03 14:48:57

285
デフォルトの名無しさん[sage]   投稿日:2012/01/03 15:33:53
>284
ありがと。でもそれはもう見たけど分かりづらいので別のを探してるんだわ
コメント1件

286
デフォルトの名無しさん[sage]   投稿日:2012/01/03 16:45:04
>285
君が既に見た分かりづらいのを列挙してくれないか?

287
デフォルトの名無しさん[sage]   投稿日:2012/01/03 16:54:15
こんな丁寧なのが分からないのだと、読む方に問題があると言わざるを得ない。
もっと基本的なところから勉強した方が良さそう。

288
デフォルトの名無しさん[sage]   投稿日:2012/01/03 16:55:39
>284を分かりづらいと感じて&技術系英語読解すらNGじゃ、まるでダメポ
背伸びする前に基本を勉強した方がいいと思われ

289
デフォルトの名無しさん[sage]   投稿日:2012/01/03 17:13:37
http://www.amazon.co.jp/dp/4320024931/
かなり古い本だけどこの辺から勉強するといいと思う。
G-machineは載ってないけど、この本の関数型言語処理系の仕組みを
基本的なところから解説している日本語の本は殆ど無いので。
理論寄りならλ計算の本はたくさんあるが。

290
デフォルトの名無しさん[]   投稿日:2012/01/03 19:43:46
>259
「言語実装パターン」(Laguage Implementation Patterns)はでたけど
「DSL in Action」と「Domain Specific Languages」(Martin Fowler)の翻訳ってでないのかなあ?

291
デフォルトの名無しさん[sage]   投稿日:2012/01/09 17:59:02
>276
多くのesolangは規格(というかネタ)先行な気もする

292
デフォルトの名無しさん[sage]   投稿日:2012/01/17 00:03:18
RPGを作るために、自作のスクリプト言語を
作ろうと思うんですけど、それほど大規模な物じゃなければ
yaccやlexを使わずに作っても、それほど大変じゃなく
作れそうですか?

それともやっぱり、yaccやlexを使わずに全部自前で
作るとなると、小規模の物でも大変ですかね?
コメント2件


293
デフォルトの名無しさん[sage]   投稿日:2012/01/17 00:14:24
>292
まあやってみればいいんじゃね?
あまり勧めはしないけど

294
デフォルトの名無しさん[sage]   投稿日:2012/01/17 00:19:23
>292
構文解析しない言語がお勧め。
LispとかForthとか。

295
デフォルトの名無しさん[sage]   投稿日:2012/01/17 00:29:56
小規模大規模ってのはなにのことを言ってるの?
構文と関係あることなの?

296
デフォルトの名無しさん[sage]   投稿日:2012/01/17 01:30:38
手書きパーサならLL(1)でいいんじゃね
LALR(1)なら小規模な文法入力であっても状態数がSLR(1)と同じになるからやってられんよ。
それでも正準LR(1)に比べると圧倒的に少ないけど。

297
デフォルトの名無しさん[sage]   投稿日:2012/01/17 22:06:07
クラッシュ・バンディクーのシナリオは
LISPで書かれてたとかネットで見たような気がする

298
デフォルトの名無しさん[sage]   投稿日:2012/01/17 23:10:04
マーク・サーニーだっけ?
俺はクラッシュバンディクー1はフルアセンブリだったって聞いたけど。

299
デフォルトの名無しさん[sage]   投稿日:2012/01/18 00:23:34
これのこと?
http://otsune.tumblr.com/post/72504819/naughty-dog-lisp
元サイトだとURL長すぎるのでTumblrからでスマン。

300
デフォルトの名無しさん[sage]   投稿日:2012/01/18 02:20:52
健全でない言葉が含まれているため表示しません 内容を確認する

301
デフォルトの名無しさん[sage]   投稿日:2012/01/18 04:11:09
はい。リダイレクト先を確認するならURLの末尾に+を付けてね。
http://bit.ly/wDhQVh

302
デフォルトの名無しさん[]   投稿日:2012/02/10 15:41:05
hoshu

303
デフォルトの名無しさん[]   投稿日:2012/02/11 20:49:13
1.「2週間でできる! スクリプト言語の作り方」 技術評論社
2.「明快入門 インタプリタ開発」 ソフトバンククリエイティブ
3.「言語実装パターン」 オライリージャパン

おまえらもう読んだ?
コメント1件

304
デフォルトの名無しさん[]   投稿日:2012/02/12 00:45:44
>292
PEGが楽。yaccとかlexとか分かりづらすぎconflictとか意味分からん
一方PEGは人間でも順を追って解析できるし、表現できる集合も大きい

自前で書いても結局PEGみたいなことをすることになる。
関数から関数を呼んでっていう

305
デフォルトの名無しさん[sage]   投稿日:2012/02/12 07:20:16
その説明だとLL(1)の再帰降下とPEGとの違いがわからんぞw

PEGはpackratで実装することで本領を発揮するんだから。

306
デフォルトの名無しさん[sage]   投稿日:2012/02/12 15:01:30
>303
本は雑食なんでなんでも買ったり図書館行ったりするけど3はともかく1,2はおもちゃだったぞ


307
デフォルトの名無しさん[]   投稿日:2012/02/15 03:17:06
delphi用のpegパーサ前に作ったのうpしよっかな

peg -> パースしてパーサ作る
パーサ使う -> 構文木 -> 自分で辿っていろいろ実装

っていう奴。本当はパーサをコンパイルしちゃうのも考えてたけどそのまま放置

あとPEGの記述自体がパーサーになるわけだけど、論理的に最適化の余地があったりするんだよな
そういうの考えたけどやってないな

308
デフォルトの名無しさん[]   投稿日:2012/02/15 03:18:50
そういえば、次の一文字を見て飛ぶ関数をテーブルで持っておくとか考えたな
思い出してきた

309
デフォルトの名無しさん[sage]   投稿日:2012/02/19 16:24:34
同じ会社のエンジンオイルで5W30と10W30があることがありますが、 
10W30を選ぶ利点は何かありますか?

310
デフォルトの名無しさん[sage]   投稿日:2012/02/21 13:29:34
スレタイ末尾の「エンジン」だけ見てここに決めたのか
コメント1件

311
デフォルトの名無しさん[sage]   投稿日:2012/02/21 17:08:28
>310
単なる誤爆かと思ったわ。

312
デフォルトの名無しさん[sage]   投稿日:2012/03/01 16:41:06
javacc使ってる人みないね。なんで?

313
デフォルトの名無しさん[sage]   投稿日:2012/03/04 10:30:27
コンパイラ系の良書はあるけど
インタプリタ系でそういうのってないのだろうか?
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2012/03/05 11:52:49
コンパイラの良書の参考文献でもみたら?

315
デフォルトの名無しさん[sage]   投稿日:2012/03/05 21:16:44
>313
機械語に落とさないで実行すりゃいいだけじゃないの?
コンパイラ系の良書って構文解析からオプティマイズまで入ってるから基本は網羅されてるし
モダンなインタプリタ処理系は内部がVMだったりするから見かけ上インタプリタに見えるだけでやってることはコンパイラ処理系とかわらんよ。

316
デフォルトの名無しさん[sage]   投稿日:2012/03/05 21:44:14
SICP

317
デフォルトの名無しさん[sage]   投稿日:2012/03/05 21:45:45
スレッデッドコードについてのちゃんとした説明とか
あんまり見かけないんだよな
コメント1件

318
デフォルトの名無しさん[sage]   投稿日:2012/03/05 22:25:56
>317
古いforthの本とかなら載ってると思う

319
デフォルトの名無しさん[sage]   投稿日:2012/03/05 23:56:53
スレデッドコードって C で書けないせいか、あまり使われないね。
GCC とかだったら

goto *ip++;

とかできるんだけど。

320
デフォルトの名無しさん[sage]   投稿日:2012/03/06 00:17:34
↑インダイレクト・スレデッドコードね。

ダイレクト・スレデッドコードなら、

void (*ip)();
....
*ip++;

でいいよね。

321
デフォルトの名無しさん[sage]   投稿日:2012/03/06 00:32:44
確かウェブページにあったんだが...
ダイレクト、インダイレクト、もう一種類なんだっけ。

322
デフォルトの名無しさん[sage]   投稿日:2012/03/06 00:47:41
サブルーチン・スレッディングかな?
単にサブルーチン呼び出しに展開する簡単な Forth コンパイラとかで使われてたね。

http://en.wikipedia.org/wiki/Threaded_code

323
デフォルトの名無しさん[sage]   投稿日:2012/03/06 09:07:56
void *なポインタは++できないから、void **とかにしてキャストするのが常道

324
デフォルトの名無しさん[sage]   投稿日:2012/03/08 17:22:33
Luaみたいな組み込み言語作ってる。
BNFも抽象構文木もわからず力押しでやってきたけど
なんとかトークン分割と文脈チェック・解析までできた。

でもバイトコードの生成・実行は難しそうだ。
たぶんこれができればあとはなんとかなるはず。
・メモリ管理(スタック、GC)
・goto(例外、if、switch、return)

無理だったら諦めて他言語のソース吐く。
コメント1件

325
デフォルトの名無しさん[sage]   投稿日:2012/03/08 17:25:53
>324
マイ言語作ってみたいと思ってる口だけど、そもそも入り口の言語仕様をどうやって考えたか聞かせて
コメント1件

326
デフォルトの名無しさん[sage]   投稿日:2012/03/08 17:34:01
昔の処理系はワンパス(ないし少ないパス数)で頑張ろうといろいろやったわけで、
教科書見るとそういう話がいろいろあるけど、今時ならデータ構造を持って、
何パスでも走らせてかまわないのが普通よね。

GCはとりあえず本もあるし、ウェブには情報がたくさんあるからそれを見る。
gotoの処理は、コードを吐きながら、今吐いてるコードのアドレスを数えておく。
飛び先の候補とかならそのアドレスを覚えておいて、あとでgotoする所でその
アドレスを書き込む。順番が逆の場合(先にgotoが出てきて、あとからその
飛び先の場所が決まる)場合は、gotoのある場所を覚えておいて、一旦ダミーの
アドレスを付けてgotoを出力してから、あとで書き直す。

と、一応書いてみたけど、BNFも抽象構文木もわからんとすると、
if (...) {
 if (...) {
 } else {
 }
} else {
 if (...) {
 } else {
 }
}
みたいなネストをちゃんと処理できてる?
コメント1件

327
デフォルトの名無しさん[sage]   投稿日:2012/03/08 18:54:58
>325
実用性とか考えてなくて、とりあえずなんでもいいから
Javaから文法削ったようなものが動けばいいと思ってる。

>326
ネストは速度とメモリ犠牲に段階分ければ簡単。
バイトコードは時間かけて作れなかったら嫌だから
BCELとかツールでjvmとか.netを生成してもらおうと思う。
コメント1件

328
デフォルトの名無しさん[sage]   投稿日:2012/03/08 18:58:39
peg方式はマジで分かりやすい。言語が設計しやすい

329
デフォルトの名無しさん[sage]   投稿日:2012/03/08 19:54:23
PEG難しくて理解できない

世界一簡単に説明してるサイトない?
もちろん日本語で
コメント1件

330
デフォルトの名無しさん[sage]   投稿日:2012/03/08 20:06:38
日本語で&世界一、てのはすごい注文だなw

331
デフォルトの名無しさん[sage]   投稿日:2012/03/08 22:52:31
>327
バイトコードはある物使ったほうがてっとり早いね。
遅くてもいいならフロントエンド程の手間も掛からないけれど。
jvm や .net のエンジンの性能はほとんど芸術品だよ。
コメント1件

332
デフォルトの名無しさん[sage]   投稿日:2012/03/09 00:02:15
LALR(1)一筋でやってきた老害の俺から言わせてみればPEGは敵性構文クラス。

333
デフォルトの名無しさん[sage]   投稿日:2012/03/09 01:13:11
>331
遅い、か。ゲームエンジンで使いたい人などは
LUAのように以下の条件を満たす必要があるもんね。

・Cとの連携にオーバーヘッドが小さい
・スクリプト・ランタイムの起動が早い
・JRE(一緒に配布できないようなランタイム)が必要ない

でも自分は動けばなんでもいいから、
簡単ツールに頼ってバイトコードの知識0で作る方法を選ぶよ。
コメント1件

334
デフォルトの名無しさん[sage]   投稿日:2012/03/09 01:48:17
>333
ちょうど >322 で出てるスレデッド・コードの wikipedia の解説には
インタプリタの核となる内部ループの実装が一通り載ってる。
後はスタック・マシンにするかレジスタ・マシンにするかだけれど
スタック・マシンなら半日で骨組みは書けるんじゃないかな。

335
デフォルトの名無しさん[sage]   投稿日:2012/03/09 01:49:34
あ、逆に自分で書かずに流用するって話か。

336
デフォルトの名無しさん[sage]   投稿日:2012/03/09 09:15:59
LALR(1)を積極的に選ぶ理由って、yaccがあるから、以外に特にないと思うけどな。

CFGとPEGの比較ということなら、CFGでは曖昧な文法ということになるようなものが、
PEGでは全部許されちゃうのが嫌ってのはあるかもしれないけど。

337
デフォルトの名無しさん[sage]   投稿日:2012/03/09 12:56:59
別にyaccでなくとも自力でLALR(1)パーサジェネレータ書ければいいと思うけど。
そこまで理解が及んでいれば、何も困る事はないしPEG使うのだったらCFGに対する正確な理解も必要。
PEGは確かに行き当たりばったりで小さな言語を作るのには向いているかもしれないけど左再帰ができないし、
「終端記号や非終端記号の集合」としての非終端記号を構築するに当たってCFGはそこが「素朴な」集合で論理的に整理されているのに対して
PEGは「順々にマッチするかを試す」辺りが「純粋な」集合ではない。
だから人間の記述ミスに起因する構文を書いてしまった時、CFGはちゃんとエラーを出してくれるのに対してPEGはacceptされてしまう。
構文は大きくなればなる程シビアになっていくから、機械的にエラーを吐いてくれた方が人間の側としては嬉しい。
よってPEGは最初から完璧に構文が出来上がっている場合(更にCFGでいう左再帰も人間の手で予め左再帰でない構文に直しておく必要がある)に採用するべきで、
それ以外の比較的規模の大きな言語はCFGを採用するべき。

338
デフォルトの名無しさん[sage]   投稿日:2012/03/09 13:13:07
>LALR(1)を積極的に選ぶ理由
ドラゴンブックに「SLRとオートマトン数が同じで表現能力がLRよりは低いけどLLよりは高いからお勧め」って書いてあったから

339
デフォルトの名無しさん[sage]   投稿日:2012/03/09 20:15:22
> 表現能力がLRよりは低いけどLLよりは高いから
当時は, LL から自動生成する理論的根拠が薄弱だっただけだと思う

340
デフォルトの名無しさん[sage]   投稿日:2012/03/09 21:48:23
LLは自動生成というより、簡単に表駆動できるから、特に理論とか広がらなかったんじゃない?
表駆動でなければ普通に再帰降下するだけだし、左再帰の除去とかはすぐに理論が確立しちゃったし。

341
デフォルトの名無しさん[sage]   投稿日:2012/03/12 00:16:33
アノテーション、複数の戻り値、例外とか
修飾子増えると一行にかなり詰め込む事になるよね。

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
デフォルトの名無しさん[sage]   投稿日:2012/03/24 11:22:52
構文解析器のようなもの作ってる人に聞きたいんだけど
データ構造って自分で作ってる?
それともライブラリーのやつ使ってる?
俺は全部作りたいからテンプレートで標準ライブラリーのやつを使ってはじめに作って
あとで自作に戻すつもりだったけれど、
インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
テンプレートを使わずに0からまた作ることに決定しました。
コメント2件

343
デフォルトの名無しさん[sage]   投稿日:2012/03/24 11:26:44
C++使ってるけどstdのvectorとかmapとかannoodaado_mapは使ってるな。
それ以外は特に使ってない。
STLと同じかそれ以上の速度で完璧に書けるなら車輪の再発明してもいいんじゃね。
コメント1件

344
デフォルトの名無しさん[sage]   投稿日:2012/03/24 13:21:28
自分の興味が何処にあるかによるんじゃね?
実装すること自体や性能に興味があるなら自作するだろうし、
とにかく言語をパーズして役立てたいなら有り物使うし。

345
デフォルトの名無しさん[sage]   投稿日:2012/03/24 14:00:24
>インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
まずC++の規格書を読んでポリシーを頭に叩き込まないとな。

346
デフォルトの名無しさん[sage]   投稿日:2012/03/24 14:42:52
>342の言ってるテンプレートって、
C++のtemplateなのか?

347
デフォルトの名無しさん[sage]   投稿日:2012/03/24 14:46:27
STL のことだと思われ

348
デフォルトの名無しさん[sage]   投稿日:2012/03/24 14:47:46
>342が何をやりたいのかよくわからんけど、
既にあるものを使わないのは効率が悪いと思う

349
デフォルトの名無しさん[sage]   投稿日:2012/03/24 15:09:17
template<typename Set=std::set<int>>
としておいて後から変えるということだろう。

350
デフォルトの名無しさん[sage]   投稿日:2012/03/24 15:37:43
そこまで動作効率気にするならアセンブリで書けと

351
デフォルトの名無しさん[sage]   投稿日:2012/03/24 19:18:33
いまどきアセンブリで書くよりコンパイラ様に最適化任せてしまったほうが巨大なプログラムでも高速化できるし。

352
デフォルトの名無しさん[]   投稿日:2012/03/24 19:23:00
STLに合わせるコストと、自前で用意するコストを比較して
少ないほうを取るだけやな
趣味なら好きなほうでいいけど、こっちは仕事で書いてんねん

353
デフォルトの名無しさん[]   投稿日:2012/03/24 19:24:46
Visual C++とかIntel C++の吐くアセンブラ見てみ
適わないって思うわ
特に浮動小数点をやらせたら、fadd fxch fmul・・・・って人間技では無理やからwww

局所的なやつとか、アルゴリズム的に特別な命令使うと速くなるやつとかは別な

354
デフォルトの名無しさん[sage]   投稿日:2012/03/24 19:33:50
>343
unorderedな。

355
デフォルトの名無しさん[sage]   投稿日:2012/03/24 19:39:03
浮動小数点まわりの設計は元々ちょっと無理があっただけに、かえって芸術品になるのかw

356
デフォルトの名無しさん[sage]   投稿日:2012/03/25 01:25:28
人間が優位になりうるのは、ソースコードから読み取れる以上の
情報をプログラマが持ってる場合
別名とかが絡むとコンパイラは最適化を保守的にやらざるを得ない

357
片山博文MZボット ◆0lBZNi.Q7evd []   投稿日:2012/04/01 15:34:29
RubyスクリプトをC言語に翻訳することできますか?

358
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/01 15:38:43
Rubyってevalあったっけ?
無理そう。

359
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/01 15:39:09
なんだこの名前欄ww

360
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/01 15:44:37
Shed Skin(Python to C++)とかあるよね。制限つきらしいけど

361
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/01 19:08:16
C++にevalを実装する変態もいるくらいだからどうにかなるんじゃないか?

362
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/01 21:10:22
新しい言語を作るのとほとんど同じくらいの手間がかかるんじゃね?

363
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/02 07:49:42

364
片山博文MZボット ◆0lBZNi.Q7evd []   投稿日:2012/04/02 14:26:30
Ruby拡張ライブラリを作るような感じかな。。。
IRBにRubyLexがあるから、それを利用してできるかも。

365
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/02 16:25:16
pythonはpypyみたいなよく維持されているメタ処理系の参照実装があるから、
そういう実験もしやすいだろうね。Shed Skinはまったくpypy使ってないとはいえ。

366
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/03 14:24:47

367
営利利用に関するLR審議中@詳細は自治スレへ[]   投稿日:2012/04/05 17:58:39
lexとyaccは、自作しなくとも、フリーで転がっているので助かるな。

368
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/05 18:31:05
>363
なかなか素晴らしいサイトだが、すまんけどもっと分かりやすく
説明してるサイト無いか?w

いや、そのサイトも凄い分かりやすいけどねコードとか
コメント1件

369
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/05 18:47:04
正規表現に似たパターンとその適用順序を定義して
順々にマッチングしていくだけ

370
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 11:49:43

371
営利利用に関するLR審議中@詳細は自治スレへ[]   投稿日:2012/04/07 12:02:14
pdos.csail.mit.edu/papers/parsing%3Apopl04.pdf

原文読むのが一番楽。英語の壁はあるんだけど

372
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 15:18:31
Bryan Fordさんの論文で、MITの修士論文の奴が、ボリュームがすごくあるので一見して
尻込みしがちだが、実は丁寧に書いてあって、一番すらすら読めると思う。

373
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 18:50:21
ちょっとスレ違いと言うかスレずれな気がするけど、自分で新しい言語を生み出すにはどんな本かサイトを見て勉強すればよいのか、お勧めない?
それとも「えい・やっ」で、これまでに知ってる言語からあとは思いつきでやるものなのかな?
OSの一般理論みたいに、プログラミング言語とはこういうものだ、みたいな考え方を知りたい。

374
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 19:28:12
今だとドラゴンブックかタイガーブック(ML)で各構文クラスを学習するのが一般論なんじゃない?
少なくとも自分はそういう道筋を辿っている。
あと最適化だったら中田本を当たった。

375
営利利用に関するLR審議中@詳細は自治スレへ[]   投稿日:2012/04/07 19:46:54
ちゃんとやるなら数学の話になってくるな
工学部って消費者。数学者からすればザコ

376
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 20:01:07
チューリングマシンで終了だな。

377
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 20:43:12
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系

378
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 20:53:55
数学は物理学の端女

379
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/07 20:59:11
mather

380
373[sage]   投稿日:2012/04/07 21:34:11
なんかあらぬ方向に飛んで行ってるけどw
とりあえずタイガーブックってのを見ようと思って尼に行ったら★2つだったorz
ドラゴンブックいっとくかw

381
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/08 00:17:02
どんな言語を設計するかと、
それを言語処理系として実装する方法は違うんじゃないの

プログラミング言語のパラダイムの整理という点では
CTMCPが面白かった

382
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/08 19:43:01
うん。ドラゴンブックで良いと思うよ。タイガーブックの日本語版誤植多いし、中身薄いし、ドラゴンブックなら二版が出てるし。
ただ、ドラゴンブックに出てる最適化を本腰を入れてしたいなら、中田本の二版を買ったほうが良いと思う。
力不足だから。

383
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/08 21:39:02
シンプルなコードが欲しい人はタイガーがいいんじゃないか?

384
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/09 00:00:32
お師匠様には2つを組み合わせると良いと教わった
フロントエンドはドラゴンで、最適化部分はタイガーで

385
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/09 14:43:47
タイガーブックについてる★2は気にしないでいい
ただあの評価コメントも完全にハズレってわけでもなくて
1冊目に読む本じゃなかったってだけの話だ

386
営利利用に関するLR審議中@詳細は自治スレへ[sage]   投稿日:2012/04/10 08:53:47
pegとLL(∞)と同じだよな。

387
片山博文MZボット ◆0lBZNi.Q7evd [sage]   投稿日:2012/04/12 17:01:24
Rubyコンパイルまだ?

388
デフォルトの名無しさん[]   投稿日:2012/04/12 17:15:15
コンパイルって需要あんの?
スクリプト系が遅いのはライブラリを実行時に毎回読み込むから
でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理
コメント2件

389
片山博文MZボット ◆0lBZNi.Q7evd [sage]   投稿日:2012/04/12 17:28:27
>388
少なくとも私にある。字句解析と構文解析をすっ飛ばせば
それなりに早くなると思うんだけどね。

390
デフォルトの名無しさん[sage]   投稿日:2012/04/12 19:09:11
ついでに意味解析もすっ飛ばしちまえ

391
デフォルトの名無しさん[sage]   投稿日:2012/04/12 22:49:19
>388
> でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理

具体的にどういうこと?

392
デフォルトの名無しさん[sage]   投稿日:2012/04/13 00:17:14
ダイナミックリンクライブラリ:「…」

393
デフォルトの名無しさん[]   投稿日:2012/04/13 08:45:43
クラス定義と、実行するコードの区別が無いってこと
クラス定義も"実行"しないといけない。コンパイルで速くなるかもしれんが
C++とかはクラス定義をプリ実行できちゃってるから、そこには大きい差があるなって

394
デフォルトの名無しさん[]   投稿日:2012/04/13 08:56:48
まあ工夫すれば結構早くなるとは思うけどな
でもプロトタイプってどう最適化できるかな

395
デフォルトの名無しさん[]   投稿日:2012/04/13 09:02:38
あれかCopy on writeをうまくやれば、"ほとんど"のケースでC++並みに早くできるか
Ruby好きだからちょっと考えてみよっかな

クラス定義のプリ実行だけは本質的に無理だろうけど

396
デフォルトの名無しさん[sage]   投稿日:2012/04/13 09:03:30
それは動的な定義を許してるってだけの話。
オブジェクト志向とは直行してるし、
実行時構文解析も必要じゃない。

397
デフォルトの名無しさん[]   投稿日:2012/04/13 09:15:32
確かに実行時構文解析は無駄。Ruby作ってる人が速くしようと思ってるなら
糞プログラマだな。多分そもそも速くする必要が無いと判断してるんだろうけど

398
デフォルトの名無しさん[]   投稿日:2012/04/13 09:21:22
完全にトランスペアレントにできるならまだしも、コンパイル後をどこかにキャッシュしといて
それで"変な"バグが出たりするとストレス溜まるもんな
代償もでかい

399
デフォルトの名無しさん[]   投稿日:2012/04/13 09:49:41
調べたらだいたいJRubyが考えてることやってるような気が
萎えた

こういうの見る限り、Javaに協力したほうが汎用性があって良さそう。
p.tl/K7Ld
invokedynamicの速い実装方法を考える
コメント1件

400
デフォルトの名無しさん[sage]   投稿日:2012/04/13 09:57:21
その辺はJITなら問題ないんじゃないか。
それにLispは動的な言語なのに、昔からネィティブにコンパイルした
ライブラリのコードをプリロードした実行ファイルにしていたし。

401
デフォルトの名無しさん[sage]   投稿日:2012/04/13 09:59:25
>399
JavaやJavascriptは人的リソースが豊富だからねえ。
JVMもproper tail callをサポートすればもっと言語屋の利用が増えるだろうに。

402
デフォルトの名無しさん[]   投稿日:2012/04/13 20:27:03
爆速で実装する方法思いついた。LLVMで作ってみよっと
perlだのphpだのぶっつぶしてRubyを主流にしたいってのもあるし

403
デフォルトの名無しさん[sage]   投稿日:2012/04/13 21:07:19
有言実行

404
デフォルトの名無しさん[sage]   投稿日:2012/04/13 23:23:15
三姉妹
コメント1件

405
デフォルトの名無しさん[]   投稿日:2012/04/14 00:43:06
調べたらまっさらから書くのはつらそうだわ。本家の拡張でやる

"メソッドを動的にインラインバージョンにすりかえる"ってのをまずやってみる
vm_call0ってところを書き換えればいいらしい

406
デフォルトの名無しさん[sage]   投稿日:2012/04/14 01:28:36
う〜ん、JNI?

407
デフォルトの名無しさん[]   投稿日:2012/04/14 01:49:23
火が着いた

アイデアの詳細
bugs.ruby-lang.org/issues/6289

調べたところ古くはYARVってのが高速Rubyで、Ruby1.9で本家にマージされたらしいが
最適化ぬるいわwww。だから俺がここらで締めてやる
コメント1件

408
デフォルトの名無しさん[sage]   投稿日:2012/04/14 08:38:18
最適化とか曖昧な話しは捨てて
関数のβ変換エイリアスを作ってくれや

409
デフォルトの名無しさん[sage]   投稿日:2012/04/14 11:41:10
>404
どんだけおっさんだよ

410
デフォルトの名無しさん[sage]   投稿日:2012/04/14 18:24:15
>407
Closedおつ

411
デフォルトの名無しさん[sage]   投稿日:2012/04/14 18:30:40
閉めてやる

412
デフォルトの名無しさん[sage]   投稿日:2012/04/15 06:22:26
ドラゴン本が届いたんだけど、これなんでこんな装丁なんだろうね。
小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
と思ったけど、英語版もこんななのか。
コメント1件

413
デフォルトの名無しさん[sage]   投稿日:2012/04/15 10:07:07
着くなり製本に対する文句書き込みかよw
コメント1件

414
デフォルトの名無しさん[sage]   投稿日:2012/04/15 10:09:16
>413
そういうのは無視

415
デフォルトの名無しさん[sage]   投稿日:2012/04/15 10:48:05
>412
> 小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
英語版はそうなっている。

416
デフォルトの名無しさん[]   投稿日:2012/04/30 17:38:37
hoshu

417
片山博文MZボット ◆0lBZNi.Q7evd [sage]   投稿日:2012/05/03 17:26:35
Rubyスクリプトコンパイラまだ?

418
デフォルトの名無しさん[]   投稿日:2012/05/08 07:13:58
コンパイラ作るのによく使われる代数学の分野はなんですか?

419
デフォルトの名無しさん[sage]   投稿日:2012/05/08 09:20:59
代数というか、従来(ドラゴン本とか)の定番ではオートマトン理論の解説に
力を入れるのが定番だったけど、ぶっちゃけコンパイラ作りというのは、
理学というより工学なので、代数学というのはそんなに大事じゃない。

420
デフォルトの名無しさん[sage]   投稿日:2012/05/08 13:22:58
中田本「コンパイラの構成と最適化」が亜麻で「出品者からお求めいただけます。」になってたんだけど、もしかして絶版?

421
デフォルトの名無しさん[sage]   投稿日:2012/05/08 13:36:23
新しい方?

新版が出たのに、旧版も刷られ続ける本というのは相当珍しいと思うけど。

422
デフォルトの名無しさん[sage]   投稿日:2012/05/08 13:43:33
紫と白っぽい表紙の第2版の方だよ

423
デフォルトの名無しさん[sage]   投稿日:2012/05/08 15:59:33
林晴比古のシリーズの本どうよ?
コメント1件

424
デフォルトの名無しさん[sage]   投稿日:2012/05/08 16:05:06
林晴比古の本、としか言いようがない

425
デフォルトの名無しさん[sage]   投稿日:2012/05/08 17:00:18
>423
本屋でチラ見した程度ではそこそこ良かった

426
デフォルトの名無しさん[sage]   投稿日:2012/05/10 18:06:27

427
片山博文MZボット ◆0lBZNi.Q7evd [sage]   投稿日:2012/05/14 14:18:53
>426 ちっ、有料かよ。

428
デフォルトの名無しさん[sage]   投稿日:2012/05/19 21:52:56
自分自身を返す関数の型が書ける静的型言語ってあります?

ググってみたところ、Cでダメなのは有名な話らしく真っ先に出てきました。
OCamlもちょいと試した感じではなんかダメそう。
コメント2件

429
デフォルトの名無しさん[sage]   投稿日:2012/05/19 22:28:18
>428
自分自身とは何を指しますか?

430
デフォルトの名無しさん[sage]   投稿日:2012/05/19 22:47:08
関数自身です。
Cで書くと(戻り値の型を書けないので仮にvoid*で代用したとして)
void *foo(int x) { return foo; }
みたいな。
OCamlで試したのは
let rec f x = f;;
とかです(エラーになりました)。

431
デフォルトの名無しさん[sage]   投稿日:2012/05/19 23:19:57
関数自身を返す関数の戻り値の型は静的に決められるのかって話になるのかな。

432
デフォルトの名無しさん[sage]   投稿日:2012/05/19 23:24:29
typedefを使わないのは何故?

433
デフォルトの名無しさん[sage]   投稿日:2012/05/19 23:28:34
typedefでもできないからでは

434
デフォルトの名無しさん[sage]   投稿日:2012/05/19 23:32:07
typedef foo (*foo)(int); とか書けてもいいと思うけど、通らないみたいね

435
デフォルトの名無しさん[sage]   投稿日:2012/05/20 01:49:57
こういうこと?(自信無し)
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
デフォルトの名無しさん[sage]   投稿日:2012/05/20 17:15:57
それじゃダメ

437
デフォルトの名無しさん[sage]   投稿日:2012/05/22 12:59:33
>428-430
無理だと思う。仮にできたとしても、返された関数は循環するだけで使い道がない。

438
デフォルトの名無しさん[sage]   投稿日:2012/05/22 13:36:13
Any型使えば万事OK

439
デフォルトの名無しさん[sage]   投稿日:2012/05/22 22:14:58
使い道の有無と出来る出来ないは独立した話だろ

440
デフォルトの名無しさん[]   投稿日:2012/05/22 22:17:46
意味的にどうかってことを考えないと
その関数の型と、返ってくる関数の型
これらは意味の上で同じなのかどうか

たまたま同じ形になってるだけじゃないのか

441
デフォルトの名無しさん[sage]   投稿日:2012/05/22 22:29:53
なんかおかしなのが涌いてきた

442
デフォルトの名無しさん[sage]   投稿日:2012/05/22 22:33:36
ある写像 f があって、f の定義域は {{}}、f の値域は {fのグラフ}。
ここで fのグラフは集合なん?
コメント1件

443
デフォルトの名無しさん[sage]   投稿日:2012/05/22 22:44:44
唐突にグラフと言い出した当人が考えればよろし

444
デフォルトの名無しさん[sage]   投稿日:2012/05/22 22:47:19
ここはプログラミングの中でも、コンパイラのスレ
そういう話出てきてしかるべきだろ

445
デフォルトの名無しさん[sage]   投稿日:2012/05/23 22:25:09
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>
コメント1件

446
片山博文MZボット ◆0lBZNi.Q7evd []   投稿日:2012/05/30 10:49:57
>442
ここでグラフというのは、関数を特徴付ける集合であるから、集合。
http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95_(%E9%96%A2%E6%95%B0)

447
デフォルトの名無しさん[sage]   投稿日:2012/06/02 18:56:09
>6 のコンパイラ構成法のソース・正誤表のリンクが切れてるけど
ダウンロードできる場所しりませんか?

コメント1件

448
デフォルトの名無しさん[sage]   投稿日:2012/06/02 19:11:47
webarchiveに残ってるんじゃね?

449
デフォルトの名無しさん[sage]   投稿日:2012/06/02 19:31:49

450
デフォルトの名無しさん[sage]   投稿日:2012/06/02 19:36:38
>449
入手できました、ありがとうございました。

451
デフォルトの名無しさん[sage]   投稿日:2012/06/03 00:16:39
>445
この型推論ってどうやって解決してるんですか?

452
デフォルトの名無しさん[sage]   投稿日:2012/06/05 15:00:21
出現検査ってなにをすることですか?
無限に再帰するのを発見するものですか?

453
デフォルトの名無しさん[sage]   投稿日:2012/06/05 15:05:32
はい。
コメント1件

454
デフォルトの名無しさん[sage]   投稿日:2012/06/05 15:08:27
>453
どのようにやるかなんてことは教えてくれませんか?

455
デフォルトの名無しさん[]   投稿日:2012/06/14 19:49:29
hoshu

456
デフォルトの名無しさん[sage]   投稿日:2012/06/14 19:51:56
保守お疲れ様です (`・ω・´)ゞ

457
デフォルトの名無しさん[sage]   投稿日:2012/06/29 10:45:27
LL(1)の構文木が右結合になってしまうんですけど
どうしたらいいですか?
たとえばa+b+cがa+(b+c)になるということです。
最後の文字から入力することを思いついたけど、
文字の長さが決まってないとき困ります。

458
デフォルトの名無しさん[sage]   投稿日:2012/06/29 11:07:34
パーザが手書きなら自分でそう書けばいいし、
パーザジェネレータなら右結合に自然になるように文法を書けばいい。

459
デフォルトの名無しさん[sage]   投稿日:2012/06/29 11:12:59
ありがとうございます。
終端記号ってアスキー文字が一文字無駄になるんで無くしたいんですけど、
アスキー文字に使われていない数とか使えばいいですか?

460
デフォルトの名無しさん[sage]   投稿日:2012/06/29 13:20:50
そもそも曖昧性がなければ、
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
デフォルトの名無しさん[sage]   投稿日:2012/06/29 18:54:39
yaccだとBNFとは別に結合規則指定だ。

462
デフォルトの名無しさん[sage]   投稿日:2012/06/29 19:07:11
昔ここで話題になってたcaperっていうC++のLALR(1)パーサが吐けるパーサジェネレータを改良して
演算子の結合規則を指定する事によって曖昧さと衝突を避けられるようにしたんだけど
需要ある?
コメント2件

463
デフォルトの名無しさん[sage]   投稿日:2012/06/29 20:50:02
caperの使い方から教えてもらえるなら需要あるorz

464
デフォルトの名無しさん[sage]   投稿日:2012/06/29 21:03:01
残念ながら入力ファイルはcaperと互換ではありません。
ドキュメントがないので必要ならば今から書き始めますが…。

465
デフォルトの名無しさん[sage]   投稿日:2012/06/29 21:41:23
ドキュメントが整ってないようじゃ流行らない

最近はPEG?が流行ってるんだっけ?
誰か教えてくれw

466
デフォルトの名無しさん[sage]   投稿日:2012/06/29 22:15:40
caperはC#も吐けるから個人的に良いなと思ってるんだけど
ドキュメントにもサンプルにも、定義ファイル内でのコメントの書き方が載ってなくて
(結局//でいけたけど)
そういうあたりが色々惜しいなぁって感じるわ

467
デフォルトの名無しさん[sage]   投稿日:2012/06/29 22:36:11
しょうがないから今からドキュメント書きますね。
githubのマークダウン形式になるのですぐに終わると思いますが如何せん眠いのでどうだか分かりません。

468
デフォルトの名無しさん[sage]   投稿日:2012/06/30 00:04:15
眠くて変な文章になってるけど許して。
https://github.com/uwanosora/kp19pp

boostの使える環境でmain.cppをコンパイルすると実行ファイルができあがる。
とりあえず書式の導入だけでも書き上げたけど、生成されたhppファイルの使い方はcaperとほとんど同じだから
そっちも見て脳内補間してくれるとありがたいです。
最後に、構文を受理させる場合は「token_0」をpostしてね。
暇があったらまた書きなおすよ。

469
デフォルトの名無しさん[sage]   投稿日:2012/06/30 00:21:02
外人が書いた日本語みたいだな

470
デフォルトの名無しさん[sage]   投稿日:2012/06/30 03:06:31
caperから派生したんなら、caperと何が違うか書かなきゃダメじゃね?

471
デフォルトの名無しさん[sage]   投稿日:2012/06/30 03:12:00
何が違うかは>462に書いてある通りだよ。
後は若干の高速化(漸近的には同じオーダー)。
それともリポジトリに何が違うかを書かないとダメってこと?

472
デフォルトの名無しさん[sage]   投稿日:2012/06/30 03:21:32
うん、リポジトリに書いてあるほうがいいと思うの。
あなたと同じようにcaperに不満を持った人が、これを見つけられるように。

473
デフォルトの名無しさん[sage]   投稿日:2012/06/30 08:33:22
PEGは、もうすでにいくつも実装がある、という段階なんだから、
なんでもいいから使ってみれ。
探せばたぶん、一般的なたいていの言語に実装があるから。

474
デフォルトの名無しさん[sage]   投稿日:2012/07/11 20:49:45
PEGいいな
個人的にBNFより好きかも
コメント1件

475
デフォルトの名無しさん[sage]   投稿日:2012/07/12 00:16:31
C++アプリケーションにスクリプトを搭載する際
C++のオブジェクトアクセスが楽なスクリプトエンジンってある?
その際スクリプトとして使う言語はJavascriptやPHPの様な
スクリプト用言語よりPerlやPython、Rubyみたいな汎用言語がよかです。
コメント3件

476
デフォルトの名無しさん[]   投稿日:2012/07/12 00:24:32
>475
Luaとか、今ならmrubyの人柱になるとか。

477
デフォルトの名無しさん[sage]   投稿日:2012/07/12 09:51:01
オブジェクト指向はluaよりsquirrelのほうが、とか聞くけど

478
デフォルトの名無しさん[sage]   投稿日:2012/07/12 17:33:47
>474
PEGをBNFと比較するのは間違いです。
コメント1件

479
デフォルトの名無しさん[sage]   投稿日:2012/07/12 18:07:56
PEGは不完全

480
デフォルトの名無しさん[sage]   投稿日:2012/07/12 18:28:28
あなたの言う「完全」の定義は?

481
デフォルトの名無しさん[sage]   投稿日:2012/07/12 22:19:12
C++のオブジェクトアクセスは、
スクリプトのランタイムもC++でないとまずい。
だから、LuaをC++でコンパイルしたものがおすすめ。
ちなみに、ビルド済みのバイナリでIDEに対応したやつは
たいていCでコンパイルしてるから要リビルド。

mrubyはC++でコンパイルできるのかな?
開発者はC++嫌いだからね。

Cのランタイム上で動作するスクリプトなら
直接オブジェクトの参照でなく
IPC機能を使わないと互換性で難儀する。
コメント1件

482
デフォルトの名無しさん[sage]   投稿日:2012/07/12 23:05:36
>475
Krossどうよ?
en.wikipedia.org/wiki/Kross_(KDE)

483
デフォルトの名無しさん[sage]   投稿日:2012/07/13 02:05:36
>481
kwsk
いまいちC++でコンパイルし直さなければならない理由がわからない。

484
デフォルトの名無しさん[sage]   投稿日:2012/07/13 02:19:39
>478
Bryan FordさんのPOPLの論文でも
文脈自由文法との差異について頻繁に論じられていた気がするけど
コメント1件

485
デフォルトの名無しさん[sage]   投稿日:2012/07/13 04:19:15
>C++のオブジェクトアクセスが楽なスクリプトエンジンってある?

言っては駄目なんだろうが、C++のオブジェクトにアクセスしたいなら、
C++からアクセスするのが一番楽だわ。
GCC系とVC系の間でもアレなのに、スクリプト言語から呼び出しとか、果てしなくはまりそう。
ヘッダファイルに直接実装されてるインラインメソッド持ったクラスとか、どうするんだって感じだし。

>スクリプト用言語よりPerlやPython、Rubyみたいな汎用言語がよかです。

汎用言語でバリバリ制御したいなら、なおのことC++でプラグイン形式にした方が良いだろう。
汎用言語の上に別の汎用言語を載せて、
上位層から下位層にフレキシブルにアクセスしたいってのは、いろいろ不毛に思える。
そもそもが意味無いっつーか。その割りに技術的に難題だらけっていう。
コメント1件

486
デフォルトの名無しさん[sage]   投稿日:2012/07/13 06:56:14
そうか?boost::python使えばオブジェクト操作できるようだけど。

http://d.hatena.ne.jp/moriyoshi/20091214/1260779899

487
デフォルトの名無しさん[sage]   投稿日:2012/07/13 07:08:26
>485
既にCOMってものが実現してるかならぁ
メンバー関数のポインターをラップしてテーブル化してアクセスしたり
仮想関数テーブル経由で操作するんなら処理系の壁はないぞ

488
デフォルトの名無しさん[sage]   投稿日:2012/07/13 16:17:12
>仮想関数テーブル経由で操作するんなら処理系の壁はないぞ

実際には仮想関数テーブルの何番目の関数ポインタが、どういった
・名前になっているか
・戻り値と引数の型は何か
を、スクリプト言語側が知る必要がある。
ここが大きな壁。

489
デフォルトの名無しさん[sage]   投稿日:2012/07/13 17:04:15
>484
BNFと文脈自由文法は別のものです。
かたや記法、かたや文法。

490
デフォルトの名無しさん[sage]   投稿日:2012/07/13 17:06:04
boost::pythonはすごくいいよ。Krossも。
>475の質問の趣旨を全く理解してない人がいるね。

491
デフォルトの名無しさん[sage]   投稿日:2012/07/13 18:08:21
COMみたいなメンドイもので時間浪費するより
スクリプトのソースがC++でビルドできるものを選んで
一緒にmakeするのがベストじゃん。
組み込み関数の作成にもboostとか使いたいしね。

492
デフォルトの名無しさん[sage]   投稿日:2012/07/13 20:22:17
http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
これのどこが便利なんだか。
クラスのメソッドを全て手動で登録とか・・・。
C++からC++を呼び出すなら、全く必要のない手間だよ。
PythonからC++で作ったパーツを呼び出したいって需要なら分かるが、
その逆に、C++で作ったフレームワークをPythonから制御したいってのは
果たしてメリットあるのかねぇ。
C++もPythonも汎用言語だから同程度には複雑だし、
手動でコンバートを書かなくちゃならなかったり、速度面で不利だったり、
コンパイラの静的型チェックが死んだり、と、
何も良いことないように思えるが。

493
デフォルトの名無しさん[sage]   投稿日:2012/07/13 20:47:38
webkitpyとかすでに使えるようになってるのがあるよん。

494
デフォルトの名無しさん[sage]   投稿日:2012/07/13 22:19:01
PEGってどこが凄いのか分からん
だれか上手に教えてくれ orz
コメント1件

495
475[sage]   投稿日:2012/07/13 22:31:17
皆さん有り難うございました。
Krossとboost::pythonが気に入りました。
どの方法も直接C++のオブジェクトを操作ってのは難しそうですが
C++アプリの制御する分にはそれなりに楽に行けそうですね

496
デフォルトの名無しさん[sage]   投稿日:2012/07/15 22:32:38
SWIG は?
Lua は C でコンパイルしてあっても extern "C" でヘッダを読み込めば問題ないよ。

497
デフォルトの名無しさん[sage]   投稿日:2012/07/15 23:26:35
PL/SQLとかって文法的にどうなの?
データベースの使い方の事じゃなくて、プログラミング言語の文法として

498
デフォルトの名無しさん[sage]   投稿日:2012/07/16 02:01:54
制約が大きすぎてカタコトすぎるw
その制約で最適化が効くわけだけどね。

んでも
互換性の問題がないのなら新規設計で
もっと素晴らしいものが作れるように思う。

499
デフォルトの名無しさん[sage]   投稿日:2012/07/16 02:30:24
>494
こういう言い方をすると怒られそうだが、
実用上はすげー強力な正規表現だと思っていい気がする
大きく違うのは非終端記号が使えることで、
例えば括弧対応の認識のような、正規表現じゃ書けないようなものも表現できる

e <- "(" e ")" / ε

理論的にはLR(k)より強力らしいから、人工言語を扱う限りは
非力さを感じることはそうそう無いはず

その他いろいろあるけど
・選択オペレータ/が優先度付きなので、曖昧な文法が生じない
 文法をいじってたらいつの間にかシフト-還元競合みたいな事は起きない
・先読みが使える
・*は貪欲マッチを行う
コメント1件

500
デフォルトの名無しさん[sage]   投稿日:2012/07/16 02:40:31
(" e ")

501
デフォルトの名無しさん[sage]   投稿日:2012/07/17 02:56:59
組み込み用だと思っていた言語がどんどん汎用的になっていく流れについていけません!

502
デフォルトの名無しさん[sage]   投稿日:2012/07/17 08:36:09
まさしくまさしく。汎用言語ならC++で間に合ってるわけで。
わざわざ組み込むのなら、出来ることに制限をかけたスクリプト的な物でなければ意味がない。

503
デフォルトの名無しさん[sage]   投稿日:2012/07/17 20:54:44
VIMScript・PostScript・各種シェルスクリプト。確かに最初から
スクリプト前提に作られた言語は便利じゃあるが、
Blenderみたいに汎用言語でも十分な場合は多い。
わざわざ新しい言語エンジン作るだけ無駄だよ。

それから、わざわざ作業を自動化したいだけなのに
メモリーやら最適化やら気にしながら書くのも煩わしい。
ましてや、ホビーグラマー程度のユーザーに使わせるものに
聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。

504
デフォルトの名無しさん[sage]   投稿日:2012/07/17 22:22:49
>499
ありがとうございます
あとは処理形が安定してるかどうか、ですねぇ

どっかに言語処理形作るような仕事、ありませんかねぇ…

505
デフォルトの名無しさん[sage]   投稿日:2012/07/18 09:54:43
>聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。

まさに組み込み用と思われてた言語がどんどん汎用化して、
ほとんどCやC++やJavaやC#と変わらなくなってきてるのが問題なわけだが。
汎用用途じゃC++とかJavaに勝てるわけ無いし、
そっちの方向を追い求めても空しいっつーか。

506
デフォルトの名無しさん[sage]   投稿日:2012/07/18 20:06:21
汎用言語である必要はないけど、新たに言語エンジン作るのが手間だから
出来合いの汎用言語をスクリプトに使うんだろ。頭かてぇなぁ。

507
デフォルトの名無しさん[sage]   投稿日:2012/07/18 21:14:47
汎用言語を組み込むぐらいなら、
元がC++ならC++のDLLを、元がJavaならjarを、
プラグイン的に読み込めるようにすれば良いだろ。
スクリプト言語側へクラスや関数を公開したり型変換を提供するための、特別なコードも必要ないし、
標準的な言語と環境だから利用者の幅も広いし枯れてるし、
開発環境もデバッガも強力だし、実行速度も速いし、良い事尽くめじゃないか。
「出来合いの汎用言語をスクリプトに使う」というところまで思考が及んでいるのに、
どうして、お手元の出来合いの汎用言語(C++やJava)で十分な事を見落としてしまうのか不思議だ

508
デフォルトの名無しさん[sage]   投稿日:2012/07/18 22:04:14
もう、ユーザ自身にアプリ作らせろよwww

509
デフォルトの名無しさん[sage]   投稿日:2012/07/18 23:16:59
イラストレーターやらモデラーやらDTPやってるやつに
開発環境の使用を求めるのかよ。
描画エフェクトの順番制御のためだけにEclipseやらVSインスコしろとかw

510
デフォルトの名無しさん[sage]   投稿日:2012/07/18 23:35:26
範囲選択してスクリプト実行が指示されたら、
選択範囲の90度方向から40%の範囲にハイライト。
ハイライト完了後選択範囲全体にlog_[10]( 閾値 )でガウシアンぼかし。
数行で書けるコードのためにコンパイルとかパッケージ化とかやっとられんわ。

511
デフォルトの名無しさん[sage]   投稿日:2012/07/18 23:52:37
それは違うな。
VSやEclipseを自分のソフトに組み込んで配布することが出来るなら、
それがベストのはずだ。
イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
本来必要なのは、C++やJavaのフリーライセンスでアプリから呼び出し可能な統合開発環境。
ブラウザで言うところのIEコンポーネントに相当するもの。
そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。
コメント2件

512
デフォルトの名無しさん[sage]   投稿日:2012/07/19 07:31:55
Smalltalkか?

どう考えても大昔からあるものを、
「そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。(キリッ)」とかw

513
デフォルトの名無しさん[sage]   投稿日:2012/07/19 12:46:52
昔C++のインタプリタなるものを見たことがあるが
誰か使ってるのだろうか
コメント1件

514
デフォルトの名無しさん[sage]   投稿日:2012/07/19 14:54:50
>511
>イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
そもそも絵描きの人たちがプログラムを書きたがるとは思えないんだが。
うちでもXSIのスクリプトは絵の人じゃなくてプログラマの人が書いてるよ。

コメント1件

515
デフォルトの名無しさん[sage]   投稿日:2012/07/19 21:12:11
Objective Cのインタプリタは少し使ったことある。
まだNeXT健在の頃の話ね

516
デフォルトの名無しさん[sage]   投稿日:2012/07/20 10:39:59


517
デフォルトの名無しさん[sage]   投稿日:2012/07/20 16:56:59
>511
大は小を兼ねるってのは迷信
無駄な機能を切り捨てないのは悪
一生使わない機能のために
セキュリティホールやリスクやアップデートの手間を増やすのは罪
コメント1件

518
デフォルトの名無しさん[sage]   投稿日:2012/07/21 01:09:18
実務でどれだけ便利かってことより、○○で3Dゲームが作れるようになったとか、JITを搭載したとか、そういう話題の方が人気あるよね。
ブランド大好きだなって冷ややかな目で見てる。
コメント1件

519
デフォルトの名無しさん[sage]   投稿日:2012/07/21 01:11:35
実務っつったらVBA最強…いや何でもない

520
デフォルトの名無しさん[sage]   投稿日:2012/07/21 01:42:03
別に人気が出ることが
単純に悪いわけではないでしょ

521
デフォルトの名無しさん[sage]   投稿日:2012/07/21 13:31:50
>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
デフォルトの名無しさん[sage]   投稿日:2012/07/21 13:39:27
凄いな。胸がときめいた

523
デフォルトの名無しさん[sage]   投稿日:2012/07/21 16:14:19
>517
うん、だから、組み込み用言語がどんどん汎用言語化していく方向に難色しめしているんだよ。
汎用系はC++やJavaに任せていれば良い。

524
デフォルトの名無しさん[sage]   投稿日:2012/07/21 16:21:44
>514
そうだね。
プログラマが書くんなら、プラグイン形式にしておいて、
VSとかでコード書けたほうが良いね。
強力なデバッガやインテリセンスがあって便利。
コメント1件

525
デフォルトの名無しさん[sage]   投稿日:2012/07/21 16:26:02
>518
そうそう。DirectXで3Dゲームを作りたいなら、C++やC#を使えばよいだけなのにね。
マイクロソフトがヘッダを用意してくれてるから超楽チン。
わざわざ移植する必要ないよね。

526
デフォルトの名無しさん[sage]   投稿日:2012/07/21 16:37:29
汎用系の組み込み言語でも、Officeのマクロほどの開発環境が用意できるなら別だがなぁ。
でも、君らはそれがとても出来ないからって、どっかのフリーの組み込み用の汎用言語の処理系を
借りてくるっていうんだろ。そんな中途半端なこと。しないほうがマシ。
お互い無駄なことに時間を使う羽目になる。
プラグインの仕様とヘッダだけ公開しておけば、それで良いんだよ。
アプリ書く人も拡張する人もコンピュータも、皆が楽。

527
デフォルトの名無しさん[sage]   投稿日:2012/07/21 16:59:54
汎用系組み込み言語っておかしくないか?
特に、「組み込み用汎用スクリプト言語」とか書かれると気持ち悪くて仕方ない
このスレの流れで言うと、こういう感じだろ表現を統一してくれ。

スクリプト用言語 = ( 組み込み用言語 or 制御用言語 )
汎用言語 = スクリプト用言語以外
汎用言語を組み込む = 汎用言語をスクリプト用途で使う

528
デフォルトの名無しさん[sage]   投稿日:2012/07/21 17:05:32
>524
所詮プラグインはプラグインで、スクリプトはスクリプトだよ。
エンドユーザーで実際にコード書ける人はいるし需要があるから
スクリプト搭載したソフトが出回ってる。特に、ここ数年は、
OOナニそれレベルだけどJavascriptで小細工できるって人が非常に増えた。
高機能なソフトだとスクリプトの需要は増えてる。

529
デフォルトの名無しさん[sage]   投稿日:2012/07/21 17:23:49
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

530
デフォルトの名無しさん[sage]   投稿日:2012/07/21 17:33:11
>載っかるのはC++やJavaとそう変わりないほど複雑な汎用スクリプト言語。
そんなヤベー言語があるのか、…知らなかったぜ
メモリアライアメントがどうとかADLとか右辺値参照みたいなことを要求してくるのか、こりゃ地獄だな!
コメント1件

531
デフォルトの名無しさん[sage]   投稿日:2012/07/21 17:36:52
>529
なんで希望・願望を垂れ流してんの?
スクリプトエンジン組み込んだソフトリリースして一度でもユーザーから
統合開発環境が欲しいとか要望あったか?
コメント1件

532
デフォルトの名無しさん[sage]   投稿日:2012/07/21 17:57:48
>530
どう考えてもマトモなデバッガが無いほうが地獄だし、
大抵が動的型言語だったりするので、バグ取りはC++よりも複雑。
動的にしか型が決まらないのに、デバッガで追えないって最悪な組み合わせだな。

>531
欲しいに決まってるだろJK。特にデバッガ。
スクリプト言語処理系を組み込むよりも、
まともな開発環境を提供するほうが余程大変だし、
しかも、開発効率は、言語仕様よりも開発環境によるところが
大きいわけだから、その辺よく考えないと。
コメント3件

533
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:14:29
だからそんな事言うユーザーがいたのかよ。
あくまでライトユーザー向けの機能でプラグインの代用品じゃないんだぞ。

534
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:19:36
>532
そもそもバグで困るような数十行も書く用途じゃねぇんだよ

535
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:22:35
ライトユーザ向けってのはOfficeのマクロ開発環境のようなものの事を言うのであってだね。

536
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:39:44
>532
「複雑な言語はやだね」 → 「まともなデバッガがない方が地獄」 んんん?
ステップ実行と変数内容の表示とかって実装しちゃいけないの?
あれ?存在しないプログラミングコンポーネントに対して存在しないデバッグコンポーネントを引き合いに出すのはOKなんだよね?

537
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:40:34
簡単なエディタが付いてて外部のファイルでも食わせられるようにしとけば十分。
そもそもユーザーは、できるだけ書かかないで済む方法さがすし、スクリプト機能の存在自体に
不満を言ってきたやつなんて見たことないわ。多少複雑な機能なら要望に応じてこっちが対応する。

538
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:43:16
ライトユーザー向けの
「コピペ改変がしやすいスクリプト言語」
という電波を受信した

539
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:51:22
>「コピペ改変がしやすいスクリプト言語」
保守するわけでもないに何か悪いのか?

540
デフォルトの名無しさん[sage]   投稿日:2012/07/21 18:59:55
>532
>大抵が動的型言語だったりする
別に型推論ベースの静的型付けでいいんだが何かこだわる必要あんのか?

541
デフォルトの名無しさん[sage]   投稿日:2012/07/21 19:08:16
ユーザーがクラスなんか使ったらある意味奇跡
関数定義するだけでもよっぽど
引数に渡す型は、ほぼ文字か数値

そんな状態で型がどうのこうのとか・・・
コメント1件

542
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:15:28
>541
ではやはり組み込み向けのスクリプト言語が汎用系に向かうのは間違いですよね。
コメント1件

543
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:18:32
お前の言う組み込み向けスクリプト言語ってなんだよ
スクリプト言語と何が違うんだ

544
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:25:02
>542
スクリプト用言語を用意できるならそれに越したことはない。
既存の汎用言語エンジンをスクリプト用に使ったほうが現実的だから
大体の人はそうしてるだけ。

545
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:38:15
必ずしも汎用言語が多いわけでもないな
Javascriptの様にモジュールリンケージがなく
拡張しなきゃ単体で使えないスクリプト用言語を使う
ケースも増えてきてる

546
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:40:32
>既存の汎用言語エンジンをスクリプト用に

それがどんどん複雑化してきてるけど、その方向性どうなのって話なのだが。

547
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:43:17
だからどうしたとしか言いようがねぇだろ
自分のソフトは汎用言語エンジン使わず気に入るように作ればええがな
好きにしろよ

548
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:48:15
あれか、俺らに工数や経費、需要を無視してスクリプトに専用言語を使えといいたいのか。
他人に押し付けんなよ馬鹿馬鹿しい。
コメント1件

549
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:48:56
>だからどうしたとしか言いようがねぇだろ

シンプルって言う、スクリプト言語のメリットがなくなってきてるし、
かといって汎用ではC++やJavaに勝てるわけも無く。
どこへ向かっているんだろうね。

550
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:54:52
>548
C++やJavaを使えばよいよ。
今時のスクリプト言語は機能豊富で煩雑さはC++やJavaと大差ないし、
そのくせ開発環境は貧弱だから、これなら、
VSやEclipseが使えるC++やJavaのほうがマシだよ。
コメント1件

551
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:54:53
使う側・実装する側が楽できて適度に妥協できる方向にむかうだけだろ

552
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:57:16
>550
だから他人に自分の希望を押し付けんな。
コメント1件

553
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:57:33
C++やJavaを使うのが一番らくだね。
使う側はVSやEclipseが使えるし、
実装する側はヘッダファイル用意するだけ。

554
デフォルトの名無しさん[sage]   投稿日:2012/07/21 20:58:32
>552
何でそんなに怒ってるの?当たり前のことを言っているだけなのに。

555
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:00:26
他人に意見を押し付けるのが当たり前とかどんな教育うけてきたんだ・・・
あれか名前がDQNネームだったりするのか

556
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:03:16
俺が何か言ったら、君はそのとおりにしなければならないのかい?
それとも既に後ろめたい気持ちにあって、事実を言われると気づかずにはおれないから困る人?

557
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:06:18
話が不毛なんだよ

558
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:26:08
スクリプト言語を組み込むことが不毛になりつつあるんだよ。

559
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:32:46
むしろどんどん使われてるが?
ミドルウェアは相変わらずC++, Javaが多いとはいえ。

560
デフォルトの名無しさん[sage]   投稿日:2012/07/21 21:47:58
たぶんそういう話じゃない

561
デフォルトの名無しさん[]   投稿日:2012/07/21 23:10:22
なんか複数の話題を一緒くたにしつつ、
各人がそれぞれの前提や想定に基づいて相手をやり込めようとしてる感じ。
そろそろ勝ち負け言い出すんじゃないの?

562
デフォルトの名無しさん[sage]   投稿日:2012/07/21 23:44:04
まあ全員で前提条件の合意が取れたら、でてくる結論はみんな同じこと言ってると思うよ。

563
デフォルトの名無しさん[sage]   投稿日:2012/07/22 00:32:43
>1通り汎用言語使わずに、自前で処理系用意してる人いる?
自前の処理系使った時のメリットってどんなのがあった?
出来れば動機も教えてください。やっぱ組み込み機器向け?

564
デフォルトの名無しさん[sage]   投稿日:2012/07/23 00:37:22
>C++やJavaを使うのが一番らくだね。

わかりやすい例として

・ブラウザをActiveX通してC++で拡張
・ブラウザをJavaScriptで拡張

前者は淘汰されつつある方式です。

565
デフォルトの名無しさん[sage]   投稿日:2012/07/23 02:25:18
ブラウザは基本プラグインじゃなくてアドオン拡張だもんな
AutoCADとかあの辺もプラグインじゃなくてlispやvbaのスクリプト拡張だ
Photoshopも昔からプラグインが使えたが要望が多くて結局javascriptをスクリプトとして導入したし

566
デフォルトの名無しさん[sage]   投稿日:2012/07/23 02:33:13
用途・目的が違うからな。
スクリプトはプラグインにならんし
プラグインはスクリプトにゃならん。

567
デフォルトの名無しさん[sage]   投稿日:2012/07/23 07:44:29
ブラウザはセキュリティーの問題があるからな。
セキュリティー気にしないのなら、開発自体はActiveXの方が楽だ。
コメント1件

568
デフォルトの名無しさん[sage]   投稿日:2012/07/23 17:54:38
ランタイムの問題もある。
SRAのパワーグレスの関数がVCで書けるようになっていたが、
コンパイルオプションが/MTじゃダメだったなあ。
本体をバージョンアップしていなかったら
古いコンパイラを今でも用意しておかないとメンテできない。

569
デフォルトの名無しさん[sage]   投稿日:2012/07/23 20:29:58
>567
NaCLやJavaAppletはまだしもActiveXは無いだろ。
本質的にどうでもいいことに掛ける作業量が多すぎる。
特にCOM周辺が糞めんどい。

570
デフォルトの名無しさん[sage]   投稿日:2012/07/26 21:09:39
みなさいどんな狙いで作ってます?
私はポストPHPを目指してます。

571
デフォルトの名無しさん[sage]   投稿日:2012/07/27 20:40:26
PostPHPかぐぐったけど見当たらなかった
俺も時代に取り残されてるなぁ

572
デフォルトの名無しさん[sage]   投稿日:2012/07/29 16:09:13
Web専用って意味だろ?

言語仕様とフレームワークが一体なら特化した強みもでるかもな

573
デフォルトの名無しさん[sage]   投稿日:2012/07/31 00:17:05
そんなんブログやWikiとかオンライショップ構築用のアレとかの方が良くね

574
デフォルトの名無しさん[sage]   投稿日:2012/07/31 00:18:45
単に言語仕様と環境が一体化してるならVisualWorksやPharoという前例があってな

575
デフォルトの名無しさん[sage]   投稿日:2012/07/31 01:00:57
言語処理系といいたかったのかな。
仕様と環境の一体化は無理だろ。

576
デフォルトの名無しさん[sage]   投稿日:2012/08/01 15:40:37
>575
つsmalltal...

577
デフォルトの名無しさん[sage]   投稿日:2012/08/01 17:49:53
統合環境が最高って言うのは、
付属のフレームワーク上で作業しているからであって、
そこから外れたら重いだけの糞環境って事になる。

VisualC++だってサードパーティーの
ライブラリで使うときはメリットを感じない。
というかviで作業したほうがラクw
コメント1件

578
デフォルトの名無しさん[sage]   投稿日:2012/08/01 19:50:34
viですか。へぇ

579
デフォルトの名無しさん[sage]   投稿日:2012/08/01 20:14:57
nanoがないと今日の日記も書けませんorz

580
デフォルトの名無しさん[sage]   投稿日:2012/08/01 22:13:16
>577
Visual C++にフレームワークなんて付いてないだろATL/WTL/MFCってな
ファンデーションライブラリと、.Net Frameworkのクラスライブラリを間借りできるだけ。
必要な分だけ自分で書くようなのを目指すならQtとかまともなサードのツールキットが必要だ。

581
デフォルトの名無しさん[sage]   投稿日:2012/08/01 22:15:19
GoogleのV8エンジンっていいな。
だれか本格的にV8でスクリプト実装してる人いる?
コメント1件

582
デフォルトの名無しさん[sage]   投稿日:2012/08/11 17:50:18
V8を使った組み込みとかってどうしてやる必要あるの?
沢山の人に使われているプログラム以外、やる必要ないと思うけど

583
デフォルトの名無しさん[sage]   投稿日:2012/08/11 19:48:39
沢山の人に使われていないから、なるたけ利用者が多くて学習コストの低いJSにするのだ。

584
デフォルトの名無しさん[sage]   投稿日:2012/08/11 20:37:53
JSなどのメジャーな言語を使う理由でなく、
スクリプト自体をアプリに組み込む理由を聞いてるんだろ

585
デフォルトの名無しさん[sage]   投稿日:2012/08/11 21:18:50
>581の言っているのは、Javascript以外の言語の実装に使う例なんじゃないの?

586
デフォルトの名無しさん[sage]   投稿日:2012/09/05 03:03:33
保守

587
デフォルトの名無しさん[sage]   投稿日:2012/10/11 08:17:22
2重書き込みのため表示しません 内容を確認する

588
デフォルトの名無しさん[]   投稿日:2012/10/29 01:56:01
こんな感じのどう?


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
デフォルトの名無しさん[sage]   投稿日:2012/10/29 02:03:15
訂正 数値が抜けてた
match(/(\/\*|\*\/|\/\/.+|"[^"]*"|'[^']*'|((\+\+|\-\-|)[_a-zA-Z][_a-zA-Z0-9]*(\+\+|\-\-|))|[\+\-\*\/\=\|\>\<\!&%]\=|([0-9]+(\.[0-9]+|))|\<\<\<?|\>\>\>?|\|\||&&|[\+\*\/\=\-\.\[\]\(\)\|\?!\>\<\^\$~#&%{},;:'"]| +)/g);

590
デフォルトの名無しさん[sage]   投稿日:2012/10/29 08:18:19
それぞれのトークンの種類も判別できるようにしよう

591
デフォルトの名無しさん[sage]   投稿日:2012/11/05 19:57:39
人がいないな

592
デフォルトの名無しさん[sage]   投稿日:2012/11/05 20:03:22
なにこれ?正規表現でトークン切り分けようとしてるの?
最初見たとき、構文解析してるのかと思って
「だからオートマトンで構文解析はできないとあれ程」とだけ書き込もうと思った。
どちらにしろ汚い。

593
デフォルトの名無しさん[sage]   投稿日:2012/11/05 20:36:29
何でもかんでも正規表現でやるのは気持ち悪いわ。

594
デフォルトの名無しさん[sage]   投稿日:2012/11/05 21:52:30
とりあえず可読性が悲惨なのは不味いんじゃないの
エスケープ一つとっても多すぎる

595
デフォルトの名無しさん[]   投稿日:2012/11/07 02:43:30
JavaScriptなのか

596
デフォルトの名無しさん[sage]   投稿日:2012/11/14 23:19:57
メンテしたくねえ

597
デフォルトの名無しさん[sage]   投稿日:2013/01/19 22:11:16
俺Lispコンパイラを作ろうと思うんだが、
コンパイルした後にeva相当のことを行うことはしたくない。

マクロってどういう場合にコンパイル時に解決できない場合があるか、
調べたいんだけど、その辺の議論ってどうやって調べればいいんだろう、

ゴーグルのでキーワードだけでもおしえてちょんまげ。

598
デフォルトの名無しさん[sage]   投稿日:2013/01/19 22:43:11
とりあえずcommon lispのdefine-compiler-macroを理解しといたほうがいいと思うけど。
コメント1件

599
597[sage]   投稿日:2013/01/21 02:19:03
>598
ありがと、勉強する

600
デフォルトの名無しさん[sage]   投稿日:2013/01/21 11:35:26
後はhttps://engineering.purdue.edu/~qobi/software.htmlのstarlinやpartialとか

601
デフォルトの名無しさん[]   投稿日:2013/03/05 23:32:24
CでCのコンパイラを作ることに、メリットはあるかな。
車輪の再発明か、それとも、ハードの理解を深めるメリットがあると
見るべきか。

602
デフォルトの名無しさん[sage]   投稿日:2013/03/05 23:34:46
CでCのコンパイラを作るとか普通じゃん

603
デフォルトの名無しさん[]   投稿日:2013/03/05 23:39:55
既存のCコンパイラってCで作ってるんじゃないの?

604
デフォルトの名無しさん[sage]   投稿日:2013/03/05 23:55:26
VCはVCで作られましたってメッセージが出てたよな

605
デフォルトの名無しさん[sage]   投稿日:2013/03/05 23:58:20
新VCは旧VCで作られたって意味じゃないの?

606
デフォルトの名無しさん[sage]   投稿日:2013/03/06 00:02:41
IDEはVC#メインっぽい雰囲気だが
コンパイラは今でも当然VCだろうね

607
デフォルトの名無しさん[sage]   投稿日:2013/03/06 01:54:55
コンパイラの実用を目指すなら再発明だわな
目的次第

608
デフォルトの名無しさん[sage]   投稿日:2013/03/06 02:05:06
Cコンパイラでもどこが作ったコンパイラかでバイナリの性能やサイズが違うって言うし

609
デフォルトの名無しさん[sage]   投稿日:2013/03/06 02:22:10
まあでもこのスレに来てる大半はそのへんのところ
既存のバックエンドに投げるだけじゃないか

610
デフォルトの名無しさん[sage]   投稿日:2013/03/06 12:50:03
バックエンドは人海戦術

611
デフォルトの名無しさん[sage]   投稿日:2013/03/06 17:30:38
>バックエンドは人海戦術
雲海戦術なら昨今のcloud事情的にありそう

612
デフォルトの名無しさん[]   投稿日:2013/03/08 20:25:20
MS製のC関連品では、悲惨な目にあった奴もいるみたいだ。
C++の「仕様通りに動かない」とか...。
コメント1件

613
デフォルトの名無しさん[sage]   投稿日:2013/03/08 21:04:30
>612
具体的に書かないとただの悪口だぞ。すべて伝聞体だしどの仕様だかわからない

614
デフォルトの名無しさん[sage]   投稿日:2013/03/08 21:42:16
むしろ仕様通りで、仕様が酷いことの方が多かったがw
WinsockでOSのバージョンごとに仕様が違う標準的な関数があるとか。

615
デフォルトの名無しさん[sage]   投稿日:2013/03/09 14:36:18
仕様を決めた奴が最後まで尻拭いしてくれる訳でもない

616
デフォルトの名無しさん[]   投稿日:2013/03/10 23:47:37
「BASICのコンパイラを作りたい!」
と述べたら、
「おまいは、高級レストランで、カップめんを注文するような奴かw」
と笑われてしまった(泣)...。

617
デフォルトの名無しさん[sage]   投稿日:2013/03/11 00:01:19
BASICコンパイラとか普通にあったと思うけど
笑うような事ではない

618
デフォルトの名無しさん[sage]   投稿日:2013/03/11 00:25:46
レストランの例えは、ちょっとずれてるよな
HDの8mmビデオ機を作りたいと言ってるような話。
しかもBASICは8mmビデオよりずっと古い。

619
デフォルトの名無しさん[sage]   投稿日:2013/03/11 00:28:51
うーん、どっちもどっち。
いずれにせよ現時点でBASICは仕様上すごいアイデアでもない限りありえない。

620
デフォルトの名無しさん[sage]   投稿日:2013/03/11 01:28:54
作るのが目的であって実用しないんでしょ

621
デフォルトの名無しさん[sage]   投稿日:2013/03/11 01:51:41

622
片山博文MZパンク ◆0lBZNi.Q7evd [sage]   投稿日:2013/03/11 02:07:57
D言語の闇の力を借りれば、COBOLだって高速実行できる処理系ができそう。

623
片山博文MZパンク ◆0lBZNi.Q7evd [sage]   投稿日:2013/03/11 02:47:16
D言語でCOBOLのランタイムを作ってさらにコンパイルタイムも作っちゃう。

624
デフォルトの名無しさん[sage]   投稿日:2013/03/11 03:37:23
そりゃ例えばバックエンドにLLVMとかを使えば
高速なコードは吐けるだろうけど

625
デフォルトの名無しさん[sage]   投稿日:2013/03/12 03:37:33
LLVMって仕組み上、CPUアーキテクチャ特化の最適化に勝てそうにないから
実際上、微妙なところがあるよね
コメント2件

626
デフォルトの名無しさん[sage]   投稿日:2013/03/12 03:40:22
COINSよりはまし

627
デフォルトの名無しさん[sage]   投稿日:2013/03/12 08:45:13
>625
というと?

628
デフォルトの名無しさん[sage]   投稿日:2013/03/12 15:09:26
Low Level Virtual Machine - Wikipedia
http://ja.wikipedia.org/wiki/Low_Level_Virtual_Machine

これは面白いな
コメント1件

629
デフォルトの名無しさん[sage]   投稿日:2013/03/13 05:49:26
AutoHotKey のようなスクリプト言語、またはAutoHotKeyの移植版を
Linux 用に書こうかと思うんですが
どの言語で書けば協力者があらわれやすいと思いますか?
今頭にある候補はJava, C# , Python, C, C++ です

630
デフォルトの名無しさん[sage]   投稿日:2013/03/13 08:13:26
>625
iccくらいにしか負けてないでしょ?

631
デフォルトの名無しさん[sage]   投稿日:2013/03/13 10:00:16
>628
専用スレあるよ

632
デフォルトの名無しさん[sage]   投稿日:2013/03/13 15:13:23

633
デフォルトの名無しさん[sage]   投稿日:2013/03/15 06:56:14
このスレの住民でLLVMを知らん人がいたのか

634
デフォルトの名無しさん[]   投稿日:2013/03/16 09:53:11
そりゃあ、ピンキリの世界だからな。

635
デフォルトの名無しさん[sage]   投稿日:2013/04/10 17:58:03
リフレクションの代わりにアノテーション・プロセッサで
クラスをバイナリ・XML・RDBに変換する言語つくりたいけど
考えただけで気が遠くなった。

636
片山博文MZパンク ◆0lBZNi.Q7evd [sage]   投稿日:2013/04/18 01:14:25
君の周りでPEGって流行ってる?

637
デフォルトの名無しさん[sage]   投稿日:2013/04/23 23:54:07
"Mastering PEG" "PEG Cookbook" はまだか?

638
デフォルトの名無しさん[sage]   投稿日:2013/04/24 00:33:55
めもめも

639
デフォルトの名無しさん[sage]   投稿日:2013/04/29 09:37:01
java または jython にシンタックスシュガーを加えた言語? を作りたいです

(自作構文を含んだコード) → [自作変換ソフト] →(変換済みコード) → [既成コンパイラ]

という構造にしたいんですが
この自作変換ソフトを書くためにはML系と Haskellってどっちが簡単でしょうか?
MLはわかります。 パターンマッチの関係で他の言語は考えてませんが問題はないでしょうか?

640
デフォルトの名無しさん[sage]   投稿日:2013/05/03 02:17:59
小さくて読みやすい正規表現処理の実装ないですか……
できればC、C++、Javaあたりで
コメント1件

641
デフォルトの名無しさん[sage]   投稿日:2013/05/03 05:54:18
>640
DFAエンジンで良ければ↓の19章はどう?
http://www.context.co.jp/~cond/books/algo/
コメント1件

642
デフォルトの名無しさん[sage]   投稿日:2013/05/03 06:15:15
>641
802行、短い! 見てみます。ありがとうございます。

643
片山博文MZパンク ◆0lBZNi.Q7evd [sage]   投稿日:2013/06/04 23:16:44
逆コンパイラ作ってる人、居ますか?

644
デフォルトの名無しさん[sage]   投稿日:2013/06/04 23:19:01
はい。
コメント1件

645
片山博文MZパンク ◆0lBZNi.Q7evd []   投稿日:2013/06/09 03:15:28
>644
逆汗を逆コンパにするのに必要な知識を教えて下さい。

646
デフォルトの名無しさん[sage]   投稿日:2013/06/09 12:53:11
つ [インラインアセンブラ]

647
デフォルトの名無しさん[sage]   投稿日:2013/06/09 13:36:39
パッと思いつくのは
・アドレスにラベルを割り付ける
・関数を切り分ける
・スタックフレームから関数引数・ローカル変数・戻り値を切り出す
・if/for/switchを抽出して構文化する
・DLLからロードされるシンボルを置き換える

解説しているサイトとかあるかは調べてないので知らん

どうせ defineされた定数をマクロ名に戻せないとか
構造体復元が難しいとかあるから大したことはできん

648
デフォルトの名無しさん[]   投稿日:2013/06/23 20:48:35
MinCaml(min-caml.sourceforge.net/)ってGC入ってる?

陽にGC入ってるって書いてないだけでGCのコード入ってる?
コメント1件

649
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
lua.vm.js
Scala.js
なんかJavascriptが中間言語として凄いことになってきた。

650
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
>648
fdpe05.pptの18ページに実装してないリストがある。
GCも実装してないリストに含まれてる。

651
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
>649
最近のはやりはJSをネイティブとして扱ってJSコードをはき出す処理系ってのがあるのでその一環じゃないかと思う。
これとgoogle closureの組み合わせで効率的なJavascriptを生成する感じ
コメント1件

652
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
>651
> 最近のはやりはJSをネイティブとして扱って

いやいやw
コメント1件

653
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
>652
割とマジなんだけどなー
JSをプラットフォームとして扱う傾向にあるの

654
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
ネイティブじゃなくてターゲットと言いたいのか?
コメント1件

655
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
>654
それでも違わないけど、Webブラウザ上のネイティブ言語としてのJSっていう扱いなんだよね。
様々なパーティがいろんな言語->JSへのコンパイルみたいな事してる。
コメント1件

656
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
なんだかなあ

657
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
寧ろ、生JS嫌われすぎだろ?とw

658
デフォルトの名無しさん[sage]   投稿日:2013/07/02 00:00:00
仕様が柔軟すぎてカオス

659
デフォルトの名無しさん[sage]   投稿日:2013/07/03 00:00:00
JS向けに最適化されたチップが安く売りだされたら考えてやる

660
デフォルトの名無しさん[sage]   投稿日:2013/07/03 00:00:00
>655
このスレ的に正しい用語は
「Webブラウザ上の中間言語としての」
「いろんな言語->jsへのトランスレートみたいな事してる」
かな

661
デフォルトの名無しさん[sage]   投稿日:2013/07/04 00:00:00
コンパイルはまあいいと思うけどね。ネイティブはちょっとおかしい。

662
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
たぶんJSを目的言語として捉えてるからネイティブって書いたんだろうけど、
まあ気持ちは分からなくもないが……
コメント1件

663
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
名前付けを疎かにするとこのように問題がやまないのである

664
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
jsにトランスコードとかがこんなに流行るなら、いっそWebVMみたいなのを作ればいいのに

665
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
>662
その通りなんじゃないの?
ブラウザ上で動かすプログラムだとJS以外ないし。(他にあったっけ?)
ClojureScriptのサイトとか読んでもそんな感じだし、Google closureとか通す処理系みてもなんかそんなニュアンスだし。

666
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
それをネイティブと表現するのは、わかりやすいようでかえってわかりにくい
Node.jsやWindows Script Hostだってあるし
そもそもネイティブって何だ?って話に

667
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
ChromeはNaCLあるしね。
ブラウザ限定でも分かりにくい用法。

668
デフォルトの名無しさん[sage]   投稿日:2013/07/05 00:00:00
> そもそもネイティブって何だ?って話に

いまどきだとx86プロセッサでもx86コードを直接実行してるわけじゃなかったりするしな

669
デフォルトの名無しさん[sage]   投稿日:2013/07/10 00:00:00
むしろなんでJSでやりたがるんだよ
いい加減捨てようぜアレ

670
デフォルトの名無しさん[sage]   投稿日:2013/07/11 00:00:00
Javascriptはブラウザ実装がフォークして混沌としてたけど、
言語自体はそれほど悪くない設計だから流行るのは当然。
人が集中して処理系実装も非常に優れたものが多い。

671
デフォルトの名無しさん[sage]   投稿日:2013/07/11 00:00:00
あれだけ処理系が進化しちゃうと
今更別の言語に変えるとかもう無理だからな…
別言語からの変換をするか、asm.jsみたいなアプローチをするか
コメント1件

672
デフォルトの名無しさん[sage]   投稿日:2013/07/12 00:00:00
>671
別言語からの変換だけでも結構数でてるからもうしばらくは消えないんじゃないの?
というか2.0仕様だっけ?型導入されたやつとかすら出てきそうにないのが嫌な感じ。

673
デフォルトの名無しさん[sage]   投稿日:2013/08/14 00:00:00
EasyUOからOpenEUOへの変換プログラム作ったら
思いのほかうまく動いてしまったのだけど
これって論文にしたら怒られます?
どんな雑誌に投稿すればいいのかもわからないけど

674
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
コンパイラ作ってるんだけど、
字句解析器作ってる間に人生終わりそうなんですけど。
lexつかったほうが良いですか?
コメント5件

675
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
さすがにそんなにかかるはずはない
力技でも1週間もあれば作れると思うけど

676
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
本に乗ってる奴ならね・・・

677
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
>674
字句なんて1〜2日でできるだろう。
できないとしたら、プログラミングの技能か字句解析アルゴの知識か他の何か、進め方のどこかに問題があるのだろう。そっちを明らかにした方がいい

678
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
はいはい、凄いね凄いね。
言って貰いたいんだろ・・・・
コメント1件

679
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
じゃあ、1つ質問して良い?
正規表現の構文解析木の段階で状態数を最小にする方法
知ってるか?

680
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
>678
お前みたいな発想だから日本はダメなんだよ

681
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
字句解析器を手書きで作るなら正規表現とか使わないんじゃないの?

682
デフォルトの名無しさん[]   投稿日:2013/08/22 00:00:00
>674
lexくらい、フリーで転がっているのがあるんじゃないの。
それとも、何か、特別なこだわりがあるとか。

自作できないなら、フリーで転がっているのを使うか、
周りの経験者に聞いた方が、早いと思うよ。
字句解析の次は、構文解析が待っている。

さらに、もっと面倒なファイル作りとか、最適化も必要なのだし。
「最適化のために、頭を使う」というレベルでないと、先は長いよ。
ファイルサイズを、極限まで小さくすることにこだわるか、あるいは、
ともかく、完成させることを目指して、最適化は、後の研究課題にするとか、
コンパイラ作りをする連中は、主に、その辺で頭をひねったり、悩んだり
しているのではないかと推測されるから。

683
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
>674
自作言語なの?
・識別子・キーワード
・数値
・文字列
・コメント
・その他記号・演算子
※必要に応じて改行処理

こんだけじゃないの?

684
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
面倒くさければもう、一文字ずつかえして、
パーサで解析させちゃおうyo

685
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
そっちの方が大変だねぇ

686
デフォルトの名無しさん[sage]   投稿日:2013/08/22 00:00:00
>674
どんな文法なのかでまるで苦労が違うぞ
字句解析と構文解析とが綺麗に切り分けできない言語だったりしてないか?
IF IF=THEN THEN THEN=IF ELSE ELSE=THEN END IF
だっけ?PL/Iで悪名高い文は

687
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
インラインアセンブラみたいに
文脈によってキーワードが変わったりするのか


688
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
なんか勘違いしている人多いけど
作っているのは字句解析器じゃなくて
字句解析器生成系っすよ

689
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
そうなのか?
>674 には字句解析器作ってるって書いてあるから
言葉通りに字句解析器作ってるんだと思った

690
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
コンパイラーじゃなくて自分のアプリのマクロ機能の為に
スクリプトコンパイラーを作る位なんだけど
本格的な言語コンパイラー作ろうと思ったら
lexみたいな解析器生成プログラムとか自作するのが普通?

いまは言語仕様が小さいこともあって、オートマトンみたいなの
力業で手書き
言語仕様はJavaScriptもどきなんだけど、生成プログラムの作り方が
良く分かってないのと、ECMAScriptの仕様の範囲くらいなら
いまのまま力業で実装ってのもありかもって思ってるんだけど
コメント1件

691
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
規模よりも変更頻度とかだと思うよ
一度書けば終わりでもう二度と変更しないってんなら、どれだけ大きくてどれだけメンテしづらくても、まぁ、どうってことない
仕様変更がよくあるなら、なるべく変更しやすい形、そうするとlexみたいなのが一番手軽に変えられるから、そうなるんじゃない

692
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
字句系なんてそうそう変わるもんじゃない
エディタの構文?ハイライトに対応できる範囲で小さく作ればいい

693
690[sage]   投稿日:2013/08/23 00:00:00
thx
一応使わないかもだけどlex系の作り方みたいなのは
少し勉強しておきたいな
コンパイラー系は中田育男氏の本斜め読みしただけなんだけど
lex系の処理とかはやっぱりソース読むしか無いのかな?
細かい解説なしに理解出来る気がしない

694
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
まずはただの正規表現マッチの実装からやってみたら。
それがわかれば後は混ぜて炒めて塩ふるだけってぐらいに思えるだろう。
コメント1件

695
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
>690
言語は素のJavaScriptにしておいて
どうしてもやりたいことだけJSとのインターフェースクラス作るのが
それを扱う第三者にとっては一番便利だよ

「スクリプトエンジン」って言葉の意味、よく噛み締めてみると
そういう結論になると思う

696
デフォルトの名無しさん[sage]   投稿日:2013/08/23 00:00:00
ちなみにJavaScriptエンジンはどれがおすすめ?

697
デフォルトの名無しさん[sage]   投稿日:2013/08/24 00:00:00
>694
意外とできあがりに差がつきそうな工程だなw

698
デフォルトの名無しさん[sage]   投稿日:2013/08/24 00:00:00
字句解析を忘れていっそPEGで書いちゃうとか

699
デフォルトの名無しさん[sage]   投稿日:2013/08/24 00:00:00
lexの作り方はドラゴンに乗ってる。
ドラゴンのままじゃ遅くて使い物にならないから
改良してるけど。

700
デフォルトの名無しさん[sage]   投稿日:2013/08/24 00:00:00
Lexerは「言語実装パターン」とか参考になったような

701
デフォルトの名無しさん[sage]   投稿日:2013/08/24 00:00:00
参考になります
言語実装パターンは目次読んだらなんだかよさそうでした
電子版もあるし、翻訳技術書としてはかなり安めだし
これ読んでみようかな
ドラゴンは定番みたいだけど難しそうな印象、出版も少し古め?

702
デフォルトの名無しさん[sage]   投稿日:2013/08/25 00:00:00
ドラゴンは難しくないよ、むしろ分かりやすい

ろくにコメントの入ってない「ソース丸ごと掲載」ってのが
苦手な俺には特にありがたい

703
デフォルトの名無しさん[sage]   投稿日:2013/09/01 23:05:37
http://piumarta.com/software/peg/
このpeg/legっての触ったことある人いますか?
ちょっとだけ遊んでみたんだけど、トークンの位置を扱う方法が分からないんで教えて欲しいです
とりあえずアクションの中でyytextと一緒に行番号と列番号を表示したい

704
デフォルトの名無しさん[sage]   投稿日:2013/09/04 16:30:46
lex+yacc の仕組みを丸パクリしてるっぽいから
そっちの説明を探せばたくさん出てくるはず
flex+bisonでもいい

705
デフォルトの名無しさん[sage]   投稿日:2013/09/04 19:00:06
2年くらい前に見た時はポシャったプロジェクトと思っていたけど
しぶとく続いてたんだな

706
デフォルトの名無しさん[]   投稿日:2013/09/12 19:48:08
ドラゴンブック見て字句解析器生成プログラムを書いてみたんだけど、サイズが大きく
なりすぎる傾向があるので、手書きしたほうがいいような気がした。
もちろんいろいろ工夫する余地はあるんだけど、手書きする手間をかけても良い部分と感じる。
逆に構文解析器は自動生成でもいいかなと思う。

707
デフォルトの名無しさん[]   投稿日:2013/09/25 16:18:58
JavaScriptのV8エンジンの文字列処理の最適化について教えてください
例えば、
var s = "";
for(var i=0; i<1000; i++) {
s = "s" + s + i + "e";
}
のようなコードをCやほかの言語で実行しても
V8エンジンほど速くはならないのですが、
V8エンジンは内部でどういう最適化をしているのでしょうか?
コメント2件

708
デフォルトの名無しさん[]   投稿日:2013/09/25 16:39:07
文字列処理の最適化より
配列処理の最適化した方が良い

709
デフォルトの名無しさん[sage]   投稿日:2013/09/25 17:40:52
つーかスレ違い

710
デフォルトの名無しさん[sage]   投稿日:2013/09/25 21:02:34
V8はがべこれしてない

711
デフォルトの名無しさん[sage]   投稿日:2013/10/12 02:00:43
>707
関係無けど、こういう原理的にはコンパイル時に決定できる最適化関係はV8エンジンは異様に強いよね

712
デフォルトの名無しさん[sage]   投稿日:2013/10/12 19:19:47
>707
Cでどんなコード書いたのか気になるところ

713
707[sage]   投稿日:2013/10/12 23:34:43
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
デフォルトの名無しさん[sage]   投稿日:2013/10/12 23:35:36
続き
int main()
{
int i;
for(i=0; i<2000; i++) {
printf("%s\n", bench(i));
}
return 0;
}

715
デフォルトの名無しさん[sage]   投稿日:2013/10/12 23:36:21
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
デフォルトの名無しさん[sage]   投稿日:2013/10/12 23:40:38
環境
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
デフォルトの名無しさん[sage]   投稿日:2013/10/13 01:07:39
関数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
コメント2件

718
デフォルトの名無しさん[sage]   投稿日:2013/10/13 08:14:54
Cがbench(i)で
JSがbench(10)なのはここに書き込む際のミス?
bench()内のループの実効回数が100倍くらい違ってくるんだけど。

719
デフォルトの名無しさん[sage]   投稿日:2013/10/13 12:45:35
というか、sprintf() 使っている時点で勝負ありだろ

720
デフォルトの名無しさん[sage]   投稿日:2013/10/13 14:54:29
Cのsprintfもprintfも外部ライブラリの関数なので
インライン展開が効かない
2000回のループをひとまとめにすることは出来ないしdenchの
呼び出しのsprintfの引数に与える変数をコンパイル時に決定することも出来ない
対して、JavaScpiptのコードは組み込み関数なので
実質的に全てを展開可能で、最大限に最適化した場合に
print("s0e\ns1e\n......
のような一行だけ実行するかも知れない
Cで最適化が効くように書く事は可能かもしれない
ただ、言語に組み込まれた組み込み関数がある事は
最適化にとって有利なのは間違いないだろう
少なくとも例示された書き方は、Cの速度を評価するには
余りに不適切な書き方ではあるし、Cで意図した処理を
JavaScriptより高速に書くことは常に可能ではある
(手動最適化を含める必要がある場合はあるかも知れない)
コメント1件

721
デフォルトの名無しさん[sage]   投稿日:2013/10/13 15:29:41
>720
>Cで意図した処理をJavaScriptより高速に書くことは常に可能ではある

Rubyにはクロージャとしてのブロックがあるので、
>717で示したようにメモ化を用いた高速化は容易に実装できる

Cの場合にはクロージャが無いからRuby同様なメモ化は実装できないが、
代わりに「遅延データ構造」という手法を用いれば実装できる

ただし、遅延データ構造による実装が「常に可能である」か否かは知らない
おそらく対象が何らかの代数構造を満たす必要があるだろう
少なくとも今回のお題の(対象としての)文字列はモノイドなので、これを満たす

722
デフォルトの名無しさん[sage]   投稿日:2013/10/13 20:14:13
>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
デフォルトの名無しさん[sage]   投稿日:2013/10/14 06:59:38
717じゃなくて悪いけど、逆順から呼び出してみ。
for(var i = 2000; i-- < 2000; ) { print(bench(i)); }
これで実行時間が変わらないなら事前計算された文字列をハッシュテーブルから
引いてるんじゃない?
大幅に遅くなるなら、実行結果をキャッシュして次の計算に使用してるんでしょ。
bench(10)の結果はbench(9)の結果を使って計算できるんだしさ。
そういう風にCで作ったら、bench()呼ぶ毎にmallocでメモリ確保しても
ゴミCPU(C-50)で853msだったし。

724
デフォルトの名無しさん[sage]   投稿日:2013/10/14 08:13:36
あ、ごめん。i-- < 2000 じゃなくて i-- != 0 で。
コメント1件

725
デフォルトの名無しさん[sage]   投稿日:2013/10/14 08:53:14
>724
0.168sでした
事前計算というのはどういう手法なんでしょうか?
コメント1件

726
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:06:49
これで
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

こうだった
コメント1件

727
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:23:47
あぁ、ちょっと勘違いしてた
http://codepad.org/hiJz0zt5
こうだな
real 0m0.063s
user 0m0.061s
sys 0m0.001s
printf呼び出しが冗長だから、それを少なくするように書けば
いくらでも速くなると思う。(メモリーとの兼ね合い)
多分処理時間の大部分はIOで食ってると思う
これを取り除くとCPU時間はほとんど0に近くなるんじゃ無いかな
コメント1件

728
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:26:01
>726
それ実行結果違わね?

>725
むしろ速くなってるね。
コンパイル時に引数に対応した文字列のテーブルを作っておいて
bench内ではテーブル引いて返すだけって意味で事前計算って言った。
たぶん717のやってることだと思うんだけど、こういう言語
触ったことないからわからん。

729
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:38:24
>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);
コメント1件

730
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:39:37
ごめん。これじゃだめだ。

731
デフォルトの名無しさん[sage]   投稿日:2013/10/14 09:40:37
あ、だめじゃなかった。ほんとごめん。

732
727[sage]   投稿日:2013/10/14 09:59:49
>729
thx
40行目のnullターミネィトだけ必要ですね
putsの方が速いか

733
デフォルトの名無しさん[sage]   投稿日:2013/10/14 10:04:40
>729
人間が処理を理解して工夫すれば、
このようにとても早いアルゴリズムに直せると思うのですが、
V8のスクリプトエンジンなどは's'の並びがbufからbuf+nまで連続することに
あらかじめ気づくのでしょうか?

734
デフォルトの名無しさん[sage]   投稿日:2013/10/14 10:21:59
何とか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';
}
とかやってみたけどさ、全然遅いのよね。
速いアルゴリズムに代えられることに気付いているとしか思えない速さだと思うよ。
この分野さっぱりだからさ、アドバイスはできないんだけどね。ごめんね。
コメント1件

735
727[sage]   投稿日:2013/10/14 11:04:15
あぁこう言うことか
http://codepad.org/rSzsp8sE

これで良いんだよね?

736
デフォルトの名無しさん[sage]   投稿日:2013/10/14 11:17:50
V8 Engineはバッファの基点をbuf[0]にしないことで
for(...) {
s = S + s + E;
}
という文字列処理の最適化を行っているんでしょうか

737
デフォルトの名無しさん[sage]   投稿日:2013/10/14 11:46:20
V8エンジンってのはそんなに凄い物なの?
ちょっと聞いたことが無いんだけど
この程度の最適化を自慢してるくらい何だから
作ってる奴らは
どうせ口ばっかりでたいしたことない奴なんだよ
おれなら10倍高速に書けるのに
コメント1件

738
デフォルトの名無しさん[sage]   投稿日:2013/10/14 19:57:51
>737
針デカ過ぎです

739
デフォルトの名無しさん[sage]   投稿日:2013/10/14 20:38:14
コピペかと思ったら違った

740
デフォルトの名無しさん[sage]   投稿日:2013/10/14 22:41:11
まぁ、そもそもコンパイラーなんて書く気も無い
ワナビーはそろそろ場違いなんでお引き取り願った方が良いのでは

741
デフォルトの名無しさん[sage]   投稿日:2013/10/14 23:07:41
ごく普通のBASIC的なスクリプトを作って実行するとHSPぐらいは行ってるな。べんちとると。

742
デフォルトの名無しさん[sage]   投稿日:2013/10/17 19:41:19
ポジショントークだよな。
>734とか速いわけがないコード出して遅いっていう意味がわからないもの

743
sage[]   投稿日:2013/12/16 21:40:57
あああ

744
片山博文MZ無能 ◆T6xkBnTXz7B0 []   投稿日:2014/02/02 14:49:49
http://katahiromz.web.fc2.com/mathai/mzcalc1.zip

これをC++のプログラムにしたいんだけど、どうすればいいかな?

745
デフォルトの名無しさん[sage]   投稿日:2014/02/03 02:10:20
lexとyacc通してcにすればいいんじゃないかな
そういう意味じゃないってんならlexはともかくyaccの方はコンパイラコンパイラでC++に落ちる奴使えばええんでないの?
あるいは文法規則をc++のtemplateで生成する奴使うとか

746
デフォルトの名無しさん[sage]   投稿日:2014/02/03 10:33:27
そこで具体的なツールの名前が出てくるのがこのスレなんじゃないの
コメント1件

747
デフォルトの名無しさん[sage]   投稿日:2014/02/03 15:37:14
>746
前スレだか前々スレにcaparってのが紹介されてた
このスレでも>462でちょろっと名前が出る
ただ文法規則は違うんだよね、移植は必須

748
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/08 16:18:00
やはりBison++は互換性に問題があるようだ。さらにWin32では新しいバージョンが用意されていない。

結論:Bison++は使えない

749
デフォルトの名無しさん[sage]   投稿日:2014/02/08 16:47:27
どのみちそんなもんラップして使うだろ
C++のライブラリに拘る意味がわからない

750
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/08 16:59:45
一つのプログラムでパーサーが2つ以上必要なときや、再入可能じゃないといけないときは、困るだろう
コメント1件

751
デフォルトの名無しさん[sage]   投稿日:2014/02/08 17:06:44
ドキュメントくらいしっかり読めよ
YYPARSE_PARAMなんて基本中の基本だぞ

その用途で解決策が乏しくて不満が出るのは普通はFlexの方だ

752
デフォルトの名無しさん[sage]   投稿日:2014/02/08 17:17:51
>750
お題程度ならC++でゴリゴリ書いても良いじゃんよ
元の目的がはっきりしてないから質問の答えだって迷走すらぁね

753
デフォルトの名無しさん[sage]   投稿日:2014/02/08 20:57:24
staticにするなり、defineで別名にするなり、手で別名にするなり、どうとでもすればいい気が…
そのまんまC++に持ってって動くコードなら適当な名前空間などで括るとかどうにでもすればいい

754
デフォルトの名無しさん[sage]   投稿日:2014/02/09 00:45:47
lexer と parser の協調動作(parser 側から lexer のステートを切り替えるとか)が
必要な場合、何かお薦めの方法ある?
yacc とかが生成したパーザだと、先読みの可能性を考えながら文法書くのが辛すぎる。

755
デフォルトの名無しさん[sage]   投稿日:2014/02/09 02:10:59
先読みが問題になるって事はreduce以外のタイミングでlexer側のステートを切り替えたい要件?
それをyacc系でやるのは茨の道かな…切替タイミングをreduce時に絞れるなら何とでもなるけど
それ以外はケースバイケースでアクロバティックになる事も割と多かった気がする
コメント1件

756
デフォルトの名無しさん[sage]   投稿日:2014/02/09 03:49:23
LRパーサをやめてANTLRとかに走ってみるとか
コメント1件

757
デフォルトの名無しさん[sage]   投稿日:2014/02/09 10:09:24
keyword_or_identifierみたいなトークンに織り込んでしまえ
汚くなるけど一貫した方法で処理できるからスキャナの状態触るよりはマシ
コメント1件

758
デフォルトの名無しさん[sage]   投稿日:2014/02/09 15:09:09
>755
LR パーザの動作をちゃんと理解している自信がないのだけど、
LR(0) でない限り、 reduce のタイミングでも次のトークンが
食われてる可能性はあるような。
先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
綱渡り感がすごい。

>756
LL 系パーザでも、パーザジェネレータを使うと先読みのコントロールが
利用者から奪われるのは変わらない気がする。

>757
過去、二回くらい試して挫折した。たぶん一番正しい方法なんだけど、
スキャナが余分なトークンを生成する(空白文字の取り扱いが変わるため)ことで、
文法が LR(1) に収まらなくなるという…。

759
デフォルトの名無しさん[sage]   投稿日:2014/02/09 15:23:34
> 先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
ごめん。これ嘘。
もちろん実装依存ではあるのだけど、現実的には常に先読みされていると
思っていいのかもしれない。

760
片山博文MZ無能 ◆T6xkBnTXz7B0 []   投稿日:2014/02/09 16:12:54
http://katahiromz.web.fc2.com/mathai/mzcalc2.zip
Boost.Spiritを使ってみた。変数への代入ができないよお。
助けてよお。

761
デフォルトの名無しさん[sage]   投稿日:2014/02/09 16:32:52
終端記号にトークンを必要としない文法ならreduceのタイミングでは先読みはないよ
Bisonなら吐かれた制御ロジックや表を理解しなくても詳細ファイルを出力させるだけで大体そこは読み取れる
ただし先読みを行う行儀の悪い実装が無いとは言えないし、
parser上の先読みは無くともlexer上の先読みの話は残るので文法によってはyyunput()等での調整は必須になる

終端記号にトークンを必要とする文法ではlexerへの干渉内容次第でyacc系での実装が無理筋なのはその通り
一応色々対策はあるけどそこまで来たら文法と手段の見直しが先決

762
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/09 17:02:38
Boost.Spiritは難易度高いよな。。。
コメント1件

763
デフォルトの名無しさん[sage]   投稿日:2014/02/10 20:25:51
スキャナアクセスが考慮されてるパーサジェネレータもあった気がする

764
デフォルトの名無しさん[sage]   投稿日:2014/02/10 20:53:09
%option reentrant と %pure-parser(再入)と
%glr-parser(LALRじゃなくGLRによる衝突遅延)と
%x (スキャナの状態)

Flex+Bison で何が不足か

765
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/10 21:24:12
Boost.Spirit V2は難解すぎ。アクションメソッドがconstで何ができるっつーんだよ。
BisonはGPLに汚染されていてC++への対応が悪い。
消去法でANTLRが良さそうなので使ってみるか

766
デフォルトの名無しさん[sage]   投稿日:2014/02/10 22:47:16
Bisonは大して不満ないけどFlexの足回りはやや進化が遅い気がする
前使った時に泥臭いなと思ったのは入力ストリームを一度割り当てて読み切った後に
他の入力ストリームに交換してクリーンリセットする正規の手段がない事と翻訳単位変数依存がある事

あの時は.l側にyy_init=1やyy_start=0等を実行する小さな関数を作って%initial-action他から
実行させて凌いだけど、最近のバージョンは正規の手段準備されたんかね
コメント1件

767
デフォルトの名無しさん[sage]   投稿日:2014/02/10 23:08:31
>762
Caper使えよもう

768
デフォルトの名無しさん[sage]   投稿日:2014/02/11 03:22:57
Bisonが吐いたコードまでGPLに感染するわけじゃないだろ
C++はわからんな・・・結局Bisonが吐いたコードをC++のコンパイラが処理できれば足りるはず
アクションにどこまでC++を書けるかはやってみたこと無いからわからん

まあANTLRなら戦えるだろう

769
デフォルトの名無しさん[]   投稿日:2014/02/11 09:05:54
シェルを作ってみたい

770
デフォルトの名無しさん[]   投稿日:2014/02/11 10:23:11
一瞬で作れる

771
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/11 17:34:29
ANTLRWorks 1.5.2ゲットだぜ!

772
デフォルトの名無しさん[sage]   投稿日:2014/02/12 00:37:42
>766
re2c 使うべし。

773
デフォルトの名無しさん[sage]   投稿日:2014/02/12 23:43:50
サンクス、こんな流れがあったのか、それも結構前から
個人的には近年のツールなのにきちんとCをサポートしてる所がいいな
Flex同様ドライバの一部にも多種の組み込みにも使える余地を残してると

Flexの長所と短所を踏まえて作られた流れみたいだしその内試してみる

774
デフォルトの名無しさん[sage]   投稿日:2014/02/22 20:36:37
ANTLRv3で!ってどういう意味?
v4でどう書けばいいのかわからん

775
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/22 23:32:18
ANTLR3でbacktrackが必要な文法だとFOLLOW_set_in_問題が
発生して死ぬ可能性あり。詳しくはFOLLOW_set_in_でググれ。

776
片山博文MZ無能 ◆T6xkBnTXz7B0 []   投稿日:2014/02/25 14:05:33
Cパーサーを作成中。

識別子の解析でreduce/reduce conflictが起こってしまうよ。助けて偉い人

777
デフォルトの名無しさん[sage]   投稿日:2014/02/25 14:25:55
とりあえず関数の中を全部捨てて一通りパースを通すのがいいんじゃまいか
関数の中はむずかしいw

778
デフォルトの名無しさん[sage]   投稿日:2014/02/25 14:27:58
あるいは typedefを捨てればチョー簡単になる

779
片山博文MZ無能 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/02/25 15:19:58
わかった。typedefにある識別子は型名と見なしていいんだな。

780
デフォルトの名無しさん[sage]   投稿日:2014/02/25 16:36:10
ああ、typedefがあるおかげで、識別子が型名に化けるという問題か。
Cだと確かアドホックにやるしかないんじゃなかった?

Javaの場合確か文脈によって区別できたと思うけど。

781
デフォルトの名無しさん[sage]   投稿日:2014/02/25 17:49:26
Javaにはポインタがないというさりげない工夫

782
デフォルトの名無しさん[sage]   投稿日:2014/02/25 18:14:37
それ、この話とどう関係が?

783
デフォルトの名無しさん[sage]   投稿日:2014/02/26 09:02:57
Javaは関係ないだろといいたいのか
何でポインタが出てくるのかわかんねーといいたいのか
コンフリクトが解消できません

784
デフォルトの名無しさん[sage]   投稿日:2014/02/26 11:06:38
識別子が型名に化けるので、文法がLALR(1)のようなシンプルな範囲に
厳密には収まっていない、ということと、Javaにはポインタがない、ということに
関連はありますか、ということ。

785
デフォルトの名無しさん[sage]   投稿日:2014/02/26 16:40:29
よくわからん話題だな。俺はchar[]を1文字ごと解析してる。

javaアプリに組み込むインタプリタを作りたいのだが、
それは諦めて、スクリプトを自作パーサでjavaソースに変換し、
javassistで実行中のjavaアプリに動的ロード&実行しようと
計画を立てたものの、一向に進まないやw
コメント3件

786
片山博文MZ無能 ◆T6xkBnTXz7B0 []   投稿日:2014/02/26 16:59:45
>785
LuaJava
luaj
コメント1件

787
デフォルトの名無しさん[sage]   投稿日:2014/02/26 17:27:01
>785
思い切って機能を端折って、とにかく動くものをエイヤで作らないと、いつまでも進まないと思う。
ひとつめは捨てることになろうとも、とにかく作れ。
コメント1件

788
デフォルトの名無しさん[sage]   投稿日:2014/02/26 20:04:22
>786
javascriptとかPHPみたいにcharも触れない言語は糞なの。

>787
まずはクラスとか捨てて関数とプリミティブ型と文字列でコンソールにhello worldやな。

789
デフォルトの名無しさん[sage]   投稿日:2014/02/27 19:33:32
LispやForthみたいなParserなにそれ?みたいなのからAlgol系みたいなパーサが楽なのからやらないでいきなりC++みたいなキ印パーサとか正気とはおもえない。。

790
デフォルトの名無しさん[sage]   投稿日:2014/02/27 21:18:27
お前の書き込みは如何なるパーサーでも解析できない

791
デフォルトの名無しさん[sage]   投稿日:2014/02/27 21:41:54
C系は構文解析と意味解析が綺麗には分離出来ず、パーサからレキサへのフィードバックが
必ず必要になる(寿命管理のおまけつき)から目的を問わず最低開発コストは高いよ
原始的なC構文だけでもエラーや回復、構造体や共用体、ポインタの咀嚼までgdgdにならず完走するのは一仕事

でもこの辺一通り実装出来なきゃCパーサとしては使い物にならない

792
デフォルトの名無しさん[]   投稿日:2014/02/28 00:10:08
つかみんなCの新しい実装をつくりたいの?

793
デフォルトの名無しさん[sage]   投稿日:2014/02/28 01:44:45
楽しいよ?
C90ぐらいだとけっこう手ごろな規模だし

794
デフォルトの名無しさん[sage]   投稿日:2014/02/28 12:48:03
トークンを区切るところまでできた。
まずは関数単位でブロックに分けてみる。

795
デフォルトの名無しさん[sage]   投稿日:2014/02/28 14:57:32
関数の中から先にやるといっているのだろうか

796
デフォルトの名無しさん[sage]   投稿日:2014/02/28 15:14:24
>785 の続きか。すまないわすれてくれ
コメント1件

797
片山博文MZ無能 ◆T6xkBnTXz7B0 []   投稿日:2014/02/28 16:56:06
Cパーサのプロトタイプができたよ!!!!
http://katahiromz.web.fc2.com/mathai/cparser2.zip

暇だったら見てやって下さい

798
デフォルトの名無しさん[sage]   投稿日:2014/02/28 20:56:29
>796
うん。関数の中以外を分けてブロック化した。

do main : int {
return 0;
}

class A
{
do hello(){}
var i : int;
class B { enum C { a, b, c} }
}

こんな感じのものから、ソースファイル内にある
クラス名・メンバ関数名・メンバ変数名を全部抽出する。
冗長になるけど、関数宣言はdo, 変数宣言はvarを付けて分割しやすくした。

799
デフォルトの名無しさん[sage]   投稿日:2014/03/01 03:19:13
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
__attribute__のパースに失敗する。reduce/reduce conflictが大量に発生する。大変難しい。

801
片山博文MZジェバンニ ◆T6xkBnTXz7B0 [sage]   投稿日:2014/03/06 17:27:27
__attribute__を文法から除外することで解決した。

802
デフォルトの名無しさん[]   投稿日:2014/03/10 21:18:01
SLR文法であるような現実的なプログラミング言語って何か例ある?

803
デフォルトの名無しさん[sage]   投稿日:2014/03/10 21:38:02
なんでわざわざSLRにこだわるんだ?
SLRと状態数がほぼ同じで、より広い範囲の文法を扱えるLALRがあるのに

804
デフォルトの名無しさん[]   投稿日:2014/03/10 21:54:58
じゃあGLRの教科書教えてください。

805
デフォルトの名無しさん[sage]   投稿日:2014/03/10 21:56:16
GLRはamazonで検索すると出てくるよ

806
デフォルトの名無しさん[]   投稿日:2014/03/10 22:01:27
あんがとあんがと。

807
デフォルトの名無しさん[]   投稿日:2014/03/10 22:03:37
CD GLR385760 ハイドン弦楽四重奏曲選集/スコア&パートセット (2003/2/25)
現在お取り扱いできません

こんなのしかない・・・

808
デフォルトの名無しさん[sage]   投稿日:2014/03/10 22:08:46
「コンパイラ」とかで検索かけて商品説明で自然言語とか扱ってるのを買えばいいんじゃね

809
デフォルトの名無しさん[sage]   投稿日:2014/03/10 22:15:16
やあみんな、Scala開発者のための新しいopen-sourceのPEGパーサライブラリ−
"parboiled for Scala"を紹介しよう。Scalaのパーサコンビネータに似た内部DSLで
PEGパーサを作ることができ、以下の優位点を持つ。
 ・パーサ規則作成と、入力の解析とがきれいに分かれているので、速度が速い
 ・親切なエラー報告機能がある
 ・シンタックスエラーがあってもエラーリカバリして、最後までパースできる

810
デフォルトの名無しさん[]   投稿日:2014/03/10 22:25:38
GLRって日本人が考えたんでしょ?
なんで日本語の本が無いの?

811
デフォルトの名無しさん[sage]   投稿日:2014/03/10 22:49:40
すげえ!まるでbisonだ!

812
デフォルトの名無しさん[]   投稿日:2014/03/11 00:10:35
PEGはメモリーを使いすぎることと、構文規則を書くときに左再帰が
許されないのが弱点だって。
左再帰は自動除去も考えられるけど、メモリーはどうなんだろな。

813
デフォルトの名無しさん[sage]   投稿日:2014/03/11 10:55:35
何百メガもあるようなソースを処理するのでなければ今時問題ない。

814
片山博文MZジェバンニ ◆T6xkBnTXz7B0 []   投稿日:2014/03/11 11:32:31
@jonigataさんのCaperが劇的に高速化されたらしいぞ!!!
github.com/jonigata/caper
コメント1件

815
デフォルトの名無しさん[]   投稿日:2014/03/11 11:37:22
PEG/Packratのメモリ使用量ってソース規模の関数?そうだっけ?

816
デフォルトの名無しさん[sage]   投稿日:2014/03/11 12:08:58
バックトラックで数百メガ使うことはないだろ
右再帰だと関数とかの単位でけつまで抱え込むみたいだが

817
デフォルトの名無しさん[sage]   投稿日:2014/03/11 22:47:14
メモ化で大量のメモリを消費する

818
デフォルトの名無しさん[sage]   投稿日:2014/03/11 23:09:48
テキストの長さに比例しただけのメモリの消費を、今時「大量」とか言う奴は、
物事の感覚がおかしい。

819
デフォルトの名無しさん[sage]   投稿日:2014/03/11 23:40:28  ID:k/rF32la
Packratはもちろん空間計算量O(n)ではあるんだけど
文法によっては入力テキストの100倍とかメモリを消費するので……
たかが比例する程度だから問題ないと言えるほどでもないと思う

820
デフォルトの名無しさん[]   投稿日:2014/03/12 22:24:28  ID:MqlPltvC(2)
このスレがワードの文字カウントで108881文字ある。
てことは、仮にUTF-8だった場合、300KB位じゃないの?
sjisだよとかそういう話じゃなくて。
PEGで書かれたHTMLパーサがCGIで使われていて、同時に100人がアクセスしてきたら
とか考え始めると、やっぱりメモリーも大事なんじゃないのかな。

あと、PEGの本紹介してください。
ドラゴンブックは読んで、自分でLALRパーサジェネレータまでは書いた。
100年かかった。
10年で出来るPEGの本があったら教えて!
メモリーを心配してるのは、字句解析器が吐くコードがやたら大きくなるので、
こりゃまずいと思ったから。

821
デフォルトの名無しさん[]   投稿日:2014/03/12 22:52:28  ID:MqlPltvC(2)
IDの所為か人がいなくなった。
地球には自分一人しかいないような気がしてきた。
みんなどこ行ったんだ。

822
デフォルトの名無しさん[sage]   投稿日:2014/03/12 23:15:34  ID:9eCKiTHh
元から人口はこんなもんだった気がする

823
デフォルトの名無しさん[]   投稿日:2014/03/13 00:08:05  ID:nrkT8+wK
2月3月の書き込み多いやん。このスレ的には。

824
デフォルトの名無しさん[sage]   投稿日:2014/03/13 19:02:35  ID:q1sfF2Hs
>814
ブログとgoogle codeしか見てなかったthx

825
デフォルトの名無しさん[sage]   投稿日:2014/03/13 19:26:13  ID:hR60BOrR
GitHubのCaperって今の時点で2つしかwatch無いのね
watch入れてない自分が言うのもなんだけど。(だって入れなくてもcloneできるしー)

826
片山博文MZジェバンニ ◆T6xkBnTXz7B0 [sage]   投稿日:2014/03/13 20:18:49  ID:AgM9wxep
注視しているならwatchをonにした方がいい。作者にも情報が伝わるし気合いが入ると思うから
コメント1件

827
デフォルトの名無しさん[sage]   投稿日:2014/03/14 18:00:27  ID:I0jjMatv
>826
Pull request出してるのみたお
応援するお

828
デフォルトの名無しさん[sage]   投稿日:2014/03/14 19:54:21  ID:aEjAmidr
何で突然設定変更?と思ったら勢い5以上のスレ限定で告知とかやってたのか
何かお前は板の住人じゃないって言われてるみたいでちょっともやっとするなー

全スレに貼る労力を考えたら仕方ないのかも知れんが

829
デフォルトの名無しさん[sage]   投稿日:2014/03/15 09:28:42  ID:nEK2Wa8J
Caperって、コメントアウトしてあるけどLR文法を受理するパーサーも出力できるんだね。
ちょっとソースコードいじってみようかな。
いまどきLALRにこだわる理由もないし。
コメント1件

830
jonigata[]   投稿日:2014/03/16 19:19:16  ID:TnbKjXG7
>829

ごめん、そのアルゴリズム考えた人に「うまく動かないんだけど」って
連絡したら、「そのアルゴリズムバグってる」って言われたんで
潰した。手元のバージョンでは消してあります。
コメント1件

831
デフォルトの名無しさん[sage]   投稿日:2014/03/16 21:16:59  ID:lTEgNzO7
おお、お久しぶり、っていうかCaperを自己紹介した時以来?
あのときから時々ではありますが、パーサが必要なときにいつも使っているので感謝してます。
コメント1件

832
デフォルトの名無しさん[]   投稿日:2014/03/16 21:54:41  ID:iSg2y7I0
LRを考えた人って言ったらKnuthか!
コメント1件

833
デフォルトの名無しさん[]   投稿日:2014/03/18 03:58:52  ID:uwWTDmYY
結局、LispやForthのような構文解析が簡単な言語には
BASICのようなインタプリタは速度面で勝てないのだろうか。
コメント1件

834
デフォルトの名無しさん[sage]   投稿日:2014/03/18 04:17:09  ID:AJd0B3pW
>833
構文解析なんか最初の一回きりだろう?
構文解析が原因で実行速度で追いつけてないのはインタプリタの設計で毎回パースするようなアホな事してるかじゃないの?

835
デフォルトの名無しさん[]   投稿日:2014/03/18 07:51:12  ID:6VY9d7pb
BASICは解析結果を別ファイルに保存しておく機能がよくあったじゃん。

836
jonigata[]   投稿日:2014/03/18 09:23:22  ID:7A7zada1
>831
ありがとう、使いづらいところがあったら教えて下さい!
今なら対応できるかもしれません。
(最近片山さんに煽られてエラーリカバリ実装するために
ソースほとんど全部読みなおしたところなので、把握出来てる)

>832
david.tribble.com/text/honalee.html
これです! うまく動かなかった!

837
デフォルトの名無しさん[sage]   投稿日:2014/03/18 14:35:25  ID:5bt/pR7P
>830
返信と現状の情報ありがとうございます。
ドラゴンブック読んだら自分でもLRくらいなら実装できそうなのでがんばってみます。

838
デフォルトの名無しさん[sage]   投稿日:2014/03/19 17:26:05  ID:OMDJGFgM(2)
Caper の FUTURE WORKS の項目に EBNF の対応が課題としてありますが、
kp19pp では (group) / ? / * / + による修飾に伴って型とセマンティックアクションを指定し、
内部処理ではそれらを一種の Lambda 的な扱いで解決しています。
これらを参考として Caper 組み込んで下さるといろんな方達が助かります。
コメント1件

839
片山博文MZジェバンニ ◆T6xkBnTXz7B0 []   投稿日:2014/03/19 18:11:31  ID:aM34prOC(2)
>838
じゃあ何でkp19ppを使わないの?

840
デフォルトの名無しさん[sage]   投稿日:2014/03/19 18:34:07  ID:OMDJGFgM(2)
kp19pp を作った人が死亡したからです。

841
デフォルトの名無しさん[sage]   投稿日:2014/03/19 19:04:08  ID:aM34prOC(2)
勝手にシンデレラ

死んでても使えませんか?

842
jonigata[]   投稿日:2014/03/19 21:37:10  ID:tn/Loswd(3)
ちょっと良く覚えてないですが、
EBNFに対応するにはstd::vectorとか特定のデータ構造が必要になるなと思って、
セマンティックアクション側に特定の構造を期待しないcaperとしては
実現不可能だなと思ってやめた気がします。

今だったら、variadic template使えばいいかな?

843
jonigata[]   投稿日:2014/03/19 21:39:03  ID:tn/Loswd(3)
いやvariadic template使っても難しいかな……
SemanticAction側の条件を厳しくする以外に
いい仕様が思いつかない

844
jonigata[]   投稿日:2014/03/19 21:55:41  ID:tn/Loswd(3)
あ、次の引数を受け取る関数をセマンティックアクションに渡して、
セマンティックアクション側はテンプレートで受け取ればいいのか。

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  ID:2RkNjYZf(3)
質問っす。

インタプリタのVMについてです。
明快入門 コンパイラ・インタプリタ開発を読み終えましたが、
バイトコード生成から命令実行のスイッチまでのあたりで、
あれよりいい方法はありませんか
また典型的にはどの様に実装されますか
コメント1件

846
デフォルトの名無しさん[sage]   投稿日:2014/03/20 04:38:07  ID:QFA+fydK(2)
規模と寿命と使われ方、他にもターゲットマシンの性格によって使い分けるんでその質問に的確に答えるのは難しいんじゃないかな?

847
デフォルトの名無しさん[sage]   投稿日:2014/03/20 04:46:25  ID:2RkNjYZf(3)
>845ですです。

プラットフォームは当分x86ですが、
場合によっては移植できるよう機種依存コードはできるだけ書きたくありません。

目的は、インタプリタの実装の学習とテストです。

「いい方法」とは具体的には、速度と拡張性のことです。
まだ、有名どころのコードを読むまでのスキルがなく、参考にすることができません。

参考書籍の紹介だけども助かるのでお願いします。
コメント1件

848
デフォルトの名無しさん[]   投稿日:2014/03/20 04:47:26  ID:2RkNjYZf(3)
だけども->だけでも
です。

849
デフォルトの名無しさん[]   投稿日:2014/03/20 23:35:41  ID:5JoitLb0
LR系のテーブル/オートマトン作成方法って調べれば調べるほど出てくるな。

850
デフォルトの名無しさん[sage]   投稿日:2014/03/20 23:59:31  ID:QFA+fydK(2)
>847
VMの高速化技法っつってもJITもあれば言語が動的オブジェクトへのメッセージ送りもってれば辞書キャッシュとかVM命令の粒度変更とかいろいろある
学習が主題かつ他人のコードを読みこなせないのであれば数こなすとか、出てる本片っ端から(外れもあるんだけど)読むとかから手つけておくのが一番の近道だと思うぞ

851
jonigata[]   投稿日:2014/03/25 00:03:25  ID:GAMZ9k7g(3)
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
デフォルトの名無しさん[sage]   投稿日:2014/03/25 00:08:50  ID:dHbpAKvO
EBNFってCaperみたいな強い静的型付け言語の機能を利用したものだとYaccみたいに全てを諦めるしか実装方法ない様に思えるんだけどどうなの?

853
jonigata[]   投稿日:2014/03/25 22:09:52  ID:GAMZ9k7g(3)
とりあえずイテレータ対とか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  ID:GAMZ9k7g(3)
あ、気のせいだった。普通に使えた。

template <class S>
int Document(const S& x) {
for (const auto& y: x) {
}
return 42;
}

これで受けれる。

855
デフォルトの名無しさん[]   投稿日:2014/03/26 17:47:48  ID:pT8ZOuEm
マイクロソフトが、MS-DOSとWordのソースコードを一般公開したらしい。
サイズはなんと、300kb未満。(2014年3月26日)

「MS-DOS ソース公開」で検索。これは参考になるかな?

856
デフォルトの名無しさん[sage]   投稿日:2014/03/26 21:14:23  ID:Q9zmlY8C
アセンブラ読む気あるの?

857
デフォルトの名無しさん[sage]   投稿日:2014/03/26 22:51:21  ID:gTzKvy2/
アセンブリ

858
デフォルトの名無しさん[sage]   投稿日:2014/03/26 23:00:27  ID:FbuvqMDP
アセンブル

859
デフォルトの名無しさん[sage]   投稿日:2014/03/26 23:43:33  ID:14kSAhy1

860
デフォルトの名無しさん[]   投稿日:2014/03/27 13:32:33  ID:rBkYuYzY
確かに、公開しても、あるいは昔のCPUで簡単としても、
解読する暇はないな。意外な盲点だった。

861
デフォルトの名無しさん[sage]   投稿日:2014/03/27 21:04:41  ID:I9aZwzrL
MS-DOSの頃なら大半はC記述じゃないか?
前身のMSX-DOSの頃ですらM80/L80/Cと一連の移植ツールセットを売ってたし、
いかにもCP/Mベタ移植っぽい効率の悪い動きしてたからな

862
デフォルトの名無しさん[sage]   投稿日:2014/03/27 21:19:26  ID:8HxvNny/
> 前身のMSX-DOSの頃

単に事実誤認。
MS-DOS 2.0 のリリースと MSX の誕生が 1983 年。

863
デフォルトの名無しさん[sage]   投稿日:2014/03/27 21:26:21  ID:d2Tv2Evk
関係ないけどjonigata氏を今まで20代後半くらいかなと思ってたら全然違った

864
デフォルトの名無しさん[sage]   投稿日:2014/03/27 21:39:43  ID:zmWcMUxs
>861
MSX-DOS出たときにMSDOSはとっくに存在しとるじゃないか。
PC98でMSDOS上のCross AssemblerとかカノープスのZ80ボード経由でMSXのソフトとか開発するの普通じゃん。

>859
むせる方か、東芝の12ビットチップの方かどっちだ?
コメント1件

865
デフォルトの名無しさん[sage]   投稿日:2014/03/28 03:58:36  ID:NMpBVu7e(2)
>864の言ってるソフトの括りは偏ってる気がする

I/O直叩きや高速性が求められるゲームなんかは当時はほぼ機械語でゴリゴリ書くしかなかったが
DOS系コード(チップ制御以外)は違いますがな、性能より開発コスト重視で割と酷い動きしてたじゃん
システムコールのレコード長周りとか
コメント1件

866
デフォルトの名無しさん[sage]   投稿日:2014/03/28 07:38:02  ID:PUotWYu6
MSXDOS.SYSやCOMMAND.COMのレジスタの使い方はコンパイラの匂いしてた記憶あるな。
MS-DOSもそうなってるかまでは知らんけど。

867
デフォルトの名無しさん[sage]   投稿日:2014/03/28 13:09:02  ID:konPatBX
省メモリ最優先なんじゃないの?
COMMAND.COMは所詮オプションだからCで書けるかも知れんな

868
デフォルトの名無しさん[sage]   投稿日:2014/03/28 13:17:21  ID:beMC8OFd(2)
主要部分は640Kの最後のほうに置いて、下位アドレスに常に常駐するメモリ量は
最小限にするとか、COMMAND.COM だってけっこうエグいトリック使ってるよ。
コメント1件

869
デフォルトの名無しさん[sage]   投稿日:2014/03/28 14:34:01  ID:AwRMv83+
>865
そうなのか?,あの頃ってMSX単体開発するのにMSXDOS出るまでって相当厳しかったんじゃ?
ASCII編のアセンブラとかもMSXDOS前提な書籍とかあったし。
おいらは若松のCP/Mマシンに9918AとPSGつないでMSXのソフト作ってた
タイトル言うと即バレするので書かないけど2つ程ROMカセットで売って貰った、98でクロスアセムでもROMエミュ持ってたらそっちの方が楽かもしれないと思った。

っていうかこれスレ違いだなぁ orz
コメント2件

870
デフォルトの名無しさん[sage]   投稿日:2014/03/28 14:52:40  ID:lxVw5nnh
いらん話題持ち込んで糞スレと化したw

871
デフォルトの名無しさん[sage]   投稿日:2014/03/28 18:56:26  ID:s2VWqUv5
>868
その手のCで書き辛い部分はDOSに関しちゃごく一部だから、そこだけ別ルーチンで書いてリンクすれば終わるよ
容量制限の厳しいROMBIOSなんかはMSも涙ぐましい努力してたけど、DOSにそこまでの対効果を見込んだかどうか…

まあここでゴチャゴチャ言うより誰かDLして確認すれば正確に分かると思う

872
デフォルトの名無しさん[sage]   投稿日:2014/03/28 23:34:37  ID:NMpBVu7e(2)
>869
ここで言ってるDOS系コードはDOSの構成要素である各種コード群や
その上で動くソフトの事で、それらはCを排除する絶対的な要件って無かったよなって話
単体開発とかMSX限定とかそういう話じゃないよ、それらで大半を機械語で書く必然性の話

873
デフォルトの名無しさん[sage]   投稿日:2014/03/28 23:49:20  ID:beMC8OFd(2)
ダウンロードして展開してみたけども、
msdos\v11source\ の中は *.ASM が7個と Tim_Paterson_16Dec2013_email.txt というテキストファイルが 1個。
msdos\v20source\ の中はファイル118個中 *.ASM が丁度100個、Cで書かれたソースコードは無し。
以上
コメント1件

874
デフォルトの名無しさん[]   投稿日:2014/03/29 00:11:29  ID:G9+QHheZ
>873
今の時代でも、参考になりそうなテクニックは網羅されていたかな?

875
デフォルトの名無しさん[sage]   投稿日:2014/03/29 00:16:37  ID:dWnwe2uv
>869
御冗談を
MSXでMSX-DOSのシステムコールが必要なソフトなんて
グラフサウルスくらいしかしらないんだが

MSX-DOSのシステムコールどころかBIOSすらほとんど使ってないはず
市販ソフトはほぼ自前で実装でしょ
MSX-DOSが無いと厳しいという話は聞いたことが無いなあ

876
デフォルトの名無しさん[sage]   投稿日:2014/03/29 00:35:43  ID:M4O/iXzM
ソフトの実行じゃなくて開発の事を言ってるんだと思う
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
デフォルトの名無しさん[sage]   投稿日:2014/03/29 00:40:35  ID:7AalbuHZ
いい加減にスレ違いと気づいて呉

878
デフォルトの名無しさん[sage]   投稿日:2014/03/29 00:45:02  ID:EN1l+2Rh
まぁこういった話は正確なことを残しておかないと間違いが後に残る

879
デフォルトの名無しさん[sage]   投稿日:2014/03/29 01:34:52  ID:GY0iNuGM
残しておく価値もない

880
デフォルトの名無しさん[sage]   投稿日:2014/03/29 09:45:57  ID:E1gpfH0G
残すべきスレはここじゃない

881
デフォルトの名無しさん[]   投稿日:2014/03/30 00:07:47  ID:fOfAZgZI(2)
シリコンコンパイラ作れる猛者はこんな所に居るかい???
居る訳ないよね? とっくにカメラメーカーの研究所とかに就職してるよね?

882
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:16:03  ID:9JDD3652
つらそう

883
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:20:42  ID:ftWH2ajM
PEGとパックラットについて知りたいのですが、
オライリーの言語実装パターンっておすすめですか?
記述が少しあるようなのですが。

884
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:22:50  ID:fOfAZgZI(2)
LLVMこそ至高
ならば全人類のためにLLVMのシリコンコンパイラを作ろうではないか

885
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:26:39  ID:tuvM7udc
はい

886
デフォルトの名無しさん[sage]   投稿日:2014/03/30 02:02:51  ID:fKxQVEZv
シリコンコンパイラ、何かと思ったら…研究費ふんだくってくるためのネタみたいなやつやな

887
デフォルトの名無しさん[sage]   投稿日:2014/03/30 20:42:52  ID:szVVotNM
ハードウェア記述言語の言語処理系のことを昔はそう呼んでたと思うけど、
それとはまた違うものを最近はそう呼んでるの?

888
デフォルトの名無しさん[]   投稿日:2014/04/01 22:32:32  ID:28c8XDsv
Caper更新キターーーー!!!

889
デフォルトの名無しさん[]   投稿日:2014/04/01 22:43:42  ID:yGT6IIrw
test

890
デフォルトの名無しさん[sage]   投稿日:2014/04/04 13:43:25  ID:FR4h37Hv
[速報]米マイクロソフト、C#/Visual Basic次世代コンパイラ「Roslyn」を
オープンソースで公開。独自言語など開発可能に。Build 2014
http://www.publickey1.jp/blog/14/cvisual_basicroslynbuild_2014.html
コメント2件

891
デフォルトの名無しさん[sage]   投稿日:2014/04/05 22:42:43  ID:YvEBV2Nh
MZたんがんがってるなぁ
mergeしてるjonigataさんも大変かも

892
デフォルトの名無しさん[sage]   投稿日:2014/04/06 09:14:01  ID:6fUxN2Jx
シリカコンパイラ

893
デフォルトの名無しさん[sage]   投稿日:2014/04/07 00:43:08  ID:JdSV9wAR
>890
開発部隊がバラバラだから、JavascriptもC++(/CLI)も含まれてないw
だせえ

894
デフォルトの名無しさん[sage]   投稿日:2014/04/07 07:14:43  ID:aChPVlpJ
アホか
Roslynは現在C++で書かれているC#とVBのコンパイラをブートストラップで書き直すことで
メタプログラミングに使いやすくするプロジェクトだ

895
デフォルトの名無しさん[sage]   投稿日:2014/04/07 10:37:36  ID:H5+AU72d(2)
何のために公開すると思ってんだという話

896
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:10:26  ID:phll1q+x
社内にはC++やJavascriptのプロジェクトはないんだろうな。
C#とVBとその二つへの埋め込みDSL以外はドキュメントでも触れてないから。
コメント2件

897
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:17:28  ID:ajgX5Rf9(2)
つうかc#もjavascriptもまだ未完成で
perl6とかmozilla tamarinとかdehydra gccとか
ウヤムヤプロジェクトになってもおかしくないレベル。
コメント2件

898
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:27:51  ID:2P7F2w5n(2)
>896-897
とりあえず完結した入力文法持ってる言語ってFORTHとLISP以外ないんじゃないの?

899
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:47:17  ID:ajgX5Rf9(2)
>897
間違えた。
javascript→VB

900
デフォルトの名無しさん[sage]   投稿日:2014/04/07 18:01:09  ID:H5+AU72d(2)
未完成ってのは仕様が固まってないじゃなくて
実装が不十分ってことかい

901
デフォルトの名無しさん[sage]   投稿日:2014/04/07 19:10:55  ID:GBBuIuYe
仕様もないけど。
実装=仕様の状態だから。
AST, APIが不完全。

902
デフォルトの名無しさん[sage]   投稿日:2014/04/07 20:30:45  ID:2P7F2w5n(2)
rubyでつね

903
デフォルトの名無しさん[sage]   投稿日:2014/04/08 12:29:52  ID:8RVw5/Dj
roselyn APIのことね。
C#とVBのbindingがあってそれぞれの言語が対象になってる。

904
就職してるよね? []   投稿日:0000/00/00 00:00:00

905
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:16:03  ID:9JDD3652.net
つらそう

906
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:20:42  ID:ftWH2ajM.net
PEGとパックラットについて知りたいのですが、
オライリーの言語実装パターンっておすすめですか?
記述が少しあるようなのですが。

907
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:22:50  ID:fOfAZgZI.net
LLVMこそ至高
ならば全人類のためにLLVMのシリコンコンパイラを作ろうではないか

908
デフォルトの名無しさん[sage]   投稿日:2014/03/30 00:26:39  ID:tuvM7udc.net
はい

909
デフォルトの名無しさん[sage]   投稿日:2014/03/30 02:02:51  ID:fKxQVEZv.net
シリコンコンパイラ、何かと思ったら…研究費ふんだくってくるためのネタみたいなやつやな

910
デフォルトの名無しさん[sage]   投稿日:2014/03/30 20:42:52  ID:szVVotNM.net
ハードウェア記述言語の言語処理系のことを昔はそう呼んでたと思うけど、
それとはまた違うものを最近はそう呼んでるの?
コメント1件

911
デフォルトの名無しさん[]   投稿日:2014/04/01 22:32:32  ID:28c8XDsv.net
Caper更新キターーーー!!!

912
デフォルトの名無しさん[]   投稿日:2014/04/01 22:43:42  ID:yGT6IIrw.net

913
デフォルトの名無しさん[sage]   投稿日:2014/04/04 13:43:25  ID:FR4h37Hv.net
[速報]米マイクロソフト、C#/Visual Basic次世代コンパイラ「Roslyn」を
オープンソースで公開。独自言語など開発可能に。Build 2014
http://www.publickey1.jp/blog/14/cvisual_basicroslynbuild_2014.html
コメント1件

914
デフォルトの名無しさん[sage]   投稿日:2014/04/05 22:42:43  ID:YvEBV2Nh.net
MZたんがんがってるなぁ
mergeしてるjonigataさんも大変かも

915
デフォルトの名無しさん[sage]   投稿日:2014/04/06 09:14:01  ID:6fUxN2Jx.net
シリカコンパイラ

916
デフォルトの名無しさん[sage]   投稿日:2014/04/07 00:43:08  ID:JdSV9wAR.net
>890
開発部隊がバラバラだから、JavascriptもC++(/CLI)も含まれてないw
だせえ

917
デフォルトの名無しさん[sage]   投稿日:2014/04/07 07:14:43  ID:aChPVlpJ.net
アホか
Roslynは現在C++で書かれているC#とVBのコンパイラをブートストラップで書き直すことで
メタプログラミングに使いやすくするプロジェクトだ

918
デフォルトの名無しさん[sage]   投稿日:2014/04/07 10:37:36  ID:H5+AU72d.net(2)
何のために公開すると思ってんだという話

919
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:10:26  ID:phll1q+x.net
社内にはC++やJavascriptのプロジェクトはないんだろうな。
C#とVBとその二つへの埋め込みDSL以外はドキュメントでも触れてないから。

920
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:17:28  ID:ajgX5Rf9.net(2)
つうかc#もjavascriptもまだ未完成で
perl6とかmozilla tamarinとかdehydra gccとか
ウヤムヤプロジェクトになってもおかしくないレベル。

921
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:27:51  ID:2P7F2w5n.net(2)
>896-897
とりあえず完結した入力文法持ってる言語ってFORTHとLISP以外ないんじゃないの?

922
デフォルトの名無しさん[sage]   投稿日:2014/04/07 14:47:17  ID:ajgX5Rf9.net(2)
>897
間違えた。
javascript→VB

923
デフォルトの名無しさん[sage]   投稿日:2014/04/07 18:01:09  ID:H5+AU72d.net(2)
未完成ってのは仕様が固まってないじゃなくて
実装が不十分ってことかい

924
デフォルトの名無しさん[sage]   投稿日:2014/04/07 19:10:55  ID:GBBuIuYe.net
仕様もないけど。
実装=仕様の状態だから。
AST, APIが不完全。

925
デフォルトの名無しさん[sage]   投稿日:2014/04/07 20:30:45  ID:2P7F2w5n.net(2)
rubyでつね

926
デフォルトの名無しさん[sage]   投稿日:2014/04/08 12:29:52  ID:8RVw5/Dj.net
roselyn APIのことね。
C#とVBのbindingがあってそれぞれの言語が対象になってる。

927
デフォルトの名無しさん[sage]   投稿日:2014/05/14 20:41:05  ID:z3LIcL30.net
この辺かい?

アセンブリ命令
http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology...

Intrinsic
https://software.intel.com/sites/products/documentation/doclib/iss/2013/...#GUID-28F49E4A-615D-4373-A36E-C8A92E913325.htm

928
片山博文MZバグロボ ◆T6xkBnTXz7B0 [sage]   投稿日:2014/05/15 14:20:11  ID:/BROOYqI.net
>904
ありがとう。助かった。

929
片山博文MZバグロボ ◆T6xkBnTXz7B0 []   投稿日:2014/05/17 22:18:34  ID:MhKuGNEw.net
CaperにちょっとしたC言語ソースのパーサのサンプルを追加しました。
興味があったらご覧下さい。
https://github.com/jonigata/caper

930
デフォルトの名無しさん[sage]   投稿日:2014/05/18 01:05:27  ID:8NF5w4j9.net
lexerの自動生成って必要?
ANTLRみたいなタイプならともかく、flexみたいなのって
よほど単純な言語でない限りは余計に複雑になるしデバッグもしづらくなる気がする

931
デフォルトの名無しさん[sage]   投稿日:2014/05/18 01:14:44  ID:VbYhl7s+.net
必要ないものは使わなければいい。
parser generatorも同様。

932
デフォルトの名無しさん[sage]   投稿日:2014/05/18 04:01:55  ID:EpNTbyyn.net
そらまあ慣れてればパーサも手書きで十分だろうけど

933
デフォルトの名無しさん[sage]   投稿日:2014/05/18 05:18:01  ID:km1NGPSj.net
LALR手書きできるスキルがあれば…orz

934
片山博文MZバグロボ ◆T6xkBnTXz7B0 [sage]   投稿日:2014/05/18 13:38:13  ID:wTsBQBni.net(2)
Caperにスマートポインタサポートを追加しました。

935
デフォルトの名無しさん[]   投稿日:2014/05/18 19:32:32  ID:3lmx3bd8.net(2)
はいはいはいはーい質問でーす

処理系のVMについてですが
オペコードはスイッチ文(switch, if)で一つずつ分岐するのと
命令一つ一つを関数でつくりそれを実行するのではどちらが早いですか?
ちなみに処理系はCでできています

おながいします!
コメント1件

936
デフォルトの名無しさん[sage]   投稿日:2014/05/18 19:43:06  ID:wTsBQBni.net(2)
>912
実測値を信じろ

937
デフォルトの名無しさん[sage]   投稿日:2014/05/18 19:45:19  ID:VLKMweCv.net
名前どうしたw

938
デフォルトの名無しさん[]   投稿日:2014/05/18 20:07:20  ID:3lmx3bd8.net(2)
>913
大手スクリプト言語どっちなんじゃ?

939
デフォルトの名無しさん[sage]   投稿日:2014/05/19 01:58:06  ID:Si0coWpv.net
>912
タイトなとこだけ展開。
昔のJITじゃないVMの読むと結構出てくる。
https://sites.google.com/site/io/dalvik-vm-internals
ちょこまかとした書き換えがすごく効く。
gotoとかloadとか小さい命令で。

940
デフォルトの名無しさん[sage]   投稿日:2014/05/19 13:46:34  ID:Bh2YKOjV.net
>910
LALR(1) も変形すれば LL(2) くらいにはなるので
あとは再起下降でもなんでも好きなようにすればいい

941
デフォルトの名無しさん[sage]   投稿日:2014/05/19 16:15:14  ID:rN3m2Poq.net
(1)じゃないたいていの言語でも、たいていは(2)ぐらい、というのは真だが、
変形すればLL(2)ってことはない。

942
デフォルトの名無しさん[sage]   投稿日:2014/05/19 20:46:03  ID:utepvwi4.net
手書きするなら左再帰に注意してLL(1)で十分だと思うよ。

943
デフォルトの名無しさん[sage]   投稿日:2014/05/20 00:22:32  ID:WYH9CLBB.net(2)
ていうか手書きなら自然にループとか書けるから、再帰使わなくても
<X> = a (b c)* d
みたいな拡張BNFをそのままプログラムにすると思えばいい。

944
デフォルトの名無しさん[sage]   投稿日:2014/05/20 01:02:13  ID:ezmBCAPL.net
文法が再帰的なのにか。

945
デフォルトの名無しさん[sage]   投稿日:2014/05/20 07:35:25  ID:wdE7nCB8.net
本質的に再帰的なのと実装の都合で再起を使ってるのは区別しようね

946
デフォルトの名無しさん[sage]   投稿日:2014/05/20 10:40:44  ID:fbMM1sIr.net
LL (1) で足りるかどうかの方が問題なんじゃね
コメント4件

947
デフォルトの名無しさん[sage]   投稿日:2014/05/20 11:38:51  ID:3nq9aFUp.net
パーザは本質的に再帰。

948
デフォルトの名無しさん[sage]   投稿日:2014/05/20 13:53:02  ID:WYH9CLBB.net(2)
入力の読み取りを後戻りさせたくないとか、mallocとかしたくないという昔の事情が (1) を欲しただけで、
部分的にちょっと (2) になってる、とかなら今時のマシンと言語とライブラリならたいして問題ない。

本質的に再帰になってるものとしては、式の構文とかがあるけど、普通にループで書ける。

<EXPR> : <TERM> (('+'|'-') <TERM>)*
<TERM> : <FACTOR> (('*'|'/') <FACTOR>)*
<FACTOR> : num | '(' <EXPR> ')'

<FACTOR> のルールにある、「カッコ内の<EXPR>」みたいなのを「本質的に再帰」と言う、
と言えば、まぁそうなんだけど。

949
デフォルトの名無しさん[sage]   投稿日:2014/05/20 14:07:45  ID:PibgqYJG.net
abcとaをはんべつするときは
文字を2こ戻す必要ありますよね。
abdとかabeを弾いてaにしなければならなのですから。

950
デフォルトの名無しさん[sage]   投稿日:2014/05/20 14:13:37  ID:mjphnHY1.net
boost.spiritはLL(∞)です。

951
デフォルトの名無しさん[sage]   投稿日:2014/05/20 20:27:27  ID:3YV0fEWD.net
くわしく
コメント1件

952
デフォルトの名無しさん[sage]   投稿日:2014/05/21 01:50:35  ID:aDDYIuqo.net
LL(*)とか言ってるのはANTLRじゃなかったっけ
なんかPLDIの論文で見たような記憶が

953
デフォルトの名無しさん[sage]   投稿日:2014/05/21 09:18:01  ID:Fj6ednoX.net
LL(k) k:定数
コメント1件

954
デフォルトの名無しさん[sage]   投稿日:2014/05/23 08:33:34  ID:S9ZhBRpZ.net
PEG(パックラット)なら任意個先読みだけど?

955
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/05/29 17:26:52  ID:XnoInNKg.net
ひらがな電卓、作ったよ!!!

ひらがな電卓CalcH
http://katahiromz.web.fc2.com/calch/

956
デフォルトの名無しさん[sage]   投稿日:2014/05/29 18:52:19  ID:LQk3BeN6.net
片山博文MZさんはGithubというキーワードでぐぐると幸せになれる。

957
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/05/30 12:21:16  ID:SSvUP3u/.net
GitHubはバリバリ使ってるよ。リクエストはまだないけど
コメント7件

958
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 []   投稿日:2014/06/01 06:52:57  ID:CnlwSSTK.net
日本語は同音異義語が多い。人工言語に比べて、自然言語は多態性が問題となる。
そこでこれまで使われてきたのが形態素解析だが、
多態性が解消できれば人工言語の構文解析の手法がそのまま使える可能性が高い。
そのことをひらがな電卓で示そうと思う。
コメント1件

959
デフォルトの名無しさん[sage]   投稿日:2014/06/01 08:52:19  ID:4IM3O9wE.net
お前は何を言ってるんだ
そんなもんBrainfuckのオペを日本語に置き換えたネタと変わらんわ
コメント1件

960
デフォルトの名無しさん[sage]   投稿日:2014/06/01 13:03:56  ID:iF6nhgL2.net
>935
lojban で示してくれ
生来 esiperantisto の俺も lojban に傾倒しつつある

961
デフォルトの名無しさん[sage]   投稿日:2014/06/01 19:01:15  ID:r6R+kq87.net
日本文化には敢えて日本語の多態性をフル活用するカテゴリーがあるからねえ

自然言語から多態性を排除したモノをプログラム言語として使うというのはアリだけど

962
デフォルトの名無しさん[sage]   投稿日:2014/06/04 11:36:58  ID:JjkiX3zX.net
各非終端記号を囲むカッコが2つ以上あるとLL文法じゃなくなるな。

963
デフォルトの名無しさん[sage]   投稿日:2014/06/04 14:22:25  ID:H9m/5fkb.net
具体的にBNFで

964
デフォルトの名無しさん[sage]   投稿日:2014/06/05 10:04:10  ID:1JqbWMwZ.net(3)
B:=C|(C)
A:=B|(B)
こんな感じ?

965
デフォルトの名無しさん[sage]   投稿日:2014/06/05 10:10:07  ID:1JqbWMwZ.net(3)
A:=BC
B:=D|(D)
C:=E|(E)
こっちの方が分かりやすいな。

966
デフォルトの名無しさん[sage]   投稿日:2014/06/05 10:13:32  ID:1JqbWMwZ.net(3)
A:=B|C
B:=D|(D)
C:=E|(E)
違った。
コメント1件

967
デフォルトの名無しさん[sage]   投稿日:2014/06/05 17:19:48  ID:bOGqmnDA.net
その例なら、

A := BC
BC := '(' DE ')' | DE
DE := D | E

と、くくり出せる。

968
デフォルトの名無しさん[sage]   投稿日:2014/06/06 11:15:49  ID:y0bQ4ynG.net
なるほど。

969
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/06/06 16:52:16  ID:dyn5MnFB.net
このスレのテンプレにCaperを追加しておくれ。
jonigataさんのパーサジェネレータCaperは充分に実用的になった。

Caper
https://github.com/jonigata/caper

970
デフォルトの名無しさん[sage]   投稿日:2014/06/06 20:49:34  ID:iMYjirOz.net
>946
アレは良い物ですな、つかなかなかここまで細かい事できるのに使い方が簡単なのってなかなか無いんだよね。
自分使うだけでアレだけど、MZはpullrequest結構出しててそれもとっても有り難かったです。

971
デフォルトの名無しさん[sage]   投稿日:2014/06/06 20:57:54  ID:Y8WrhCVM.net
今作ってる言語でCaper組み込む予定だよ。
いいよね、Caper。

972
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 []   投稿日:2014/06/07 19:30:42  ID:3R8CEA88.net(3)
実行時に文法を動的に変えることできますか?

973
デフォルトの名無しさん[sage]   投稿日:2014/06/07 20:14:40  ID:RFWgpx3m.net
主語を明示してください

974
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 [sage]   投稿日:2014/06/07 20:32:42  ID:3R8CEA88.net(3)
プログラムが実行時に解析する文法を動的に変えることできますか?
コメント1件

975
デフォルトの名無しさん[sage]   投稿日:2014/06/07 20:37:06  ID:SxbAzKvi.net

976
デフォルトの名無しさん[sage]   投稿日:2014/06/07 20:44:08  ID:ZfdboDuT.net
>951
たとえばオブジェクト指向言語であれば
Gof本のInterpreterパターンで実装することによって
「実行時に解析する文法」を動的に構成できます
関数型言語だとコンビネータやモナドを使った
構文解析器(パーザ)の動的な構成技法があります

977
デフォルトの名無しさん[sage]   投稿日:2014/06/07 22:43:46  ID:3R8CEA88.net(3)
>953
わかった
ちょっとjonigataさんに相談してみる
コメント1件

978
デフォルトの名無しさん[sage]   投稿日:2014/06/08 16:02:17  ID:3LWaPBPW.net
解析実行時に文法を切り替えるっていうと
Boost::Spiritでruleインスタンスを差し替えるのを先に思いついた

979
jonigata[]   投稿日:2014/06/08 21:20:13  ID:/sgfaDLO.net
caper、動的エンジンもともともってるよ。
caperの文法ファイルは動的エンジンで起動時に文法作って読んでる。

980
デフォルトの名無しさん[]   投稿日:2014/07/12 10:00:10  ID:RjnQ2yc8.net
A:=C|BC
B:=B|(B)
C:=C|(C)
これだとくくり出せないし、LL文法じゃないですよね。
カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃないですよね

981
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 []   投稿日:2014/07/13 02:56:51  ID:rSyi36+2.net
#include "http://example.com/my_library.h";

こんな機能があってもいいと思う。

982
デフォルトの名無しさん[sage]   投稿日:2014/07/13 03:18:39  ID:EUkLrXER.net
その場合リンカもネット越しにリンクできないと駄目だな

983
デフォルトの名無しさん[]   投稿日:2014/07/13 03:19:59  ID:hh7t9GxI.net(2)
Gogleならやってくれそう

984
◆QZaw55cn4c [sage]   投稿日:2014/07/13 08:51:38  ID:OfL9oG5/.net
>959
CPP だけの問題なのでは?どうしてリンカが関係するの?論理的に説明してね

985
デフォルトの名無しさん[sage]   投稿日:2014/07/13 10:10:10  ID:p5bwqgUP.net(4)
ヘッダのインクルードはライブラリを使うためのもの、という固定観念だろう

986
デフォルトの名無しさん[sage]   投稿日:2014/07/13 10:11:05  ID:fq5Ei1vd.net(2)
そんなどうでもいいことより
958についてどう思う?

987
デフォルトの名無しさん[sage]   投稿日:2014/07/13 10:35:33  ID:YSmlh2iv.net
1. ヘッダーをネット経由で参照するなら、libもネット経由で参照するだろう
libだけダウンロードしてヘッダーはダウンロードしないのは変だから
2.libファイルをネット越しに参照するなら、リンカもネット越しに対応する必要がある
3.よって、リンカもネット越しに対応しないとだめ

988
デフォルトの名無しさん[sage]   投稿日:2014/07/13 11:03:49  ID:p5bwqgUP.net(4)
> libだけダウンロードしてヘッダーはダウンロードしないのは変だから

この時点で話が逆になってるし

989
デフォルトの名無しさん[sage]   投稿日:2014/07/13 12:32:33  ID:fq5Ei1vd.net(2)
A:=C|BC
B:=B|(B)
C:=C|(C)
これはLL文法に出来ないということでよいですか[y/n]

990
デフォルトの名無しさん[sage]   投稿日:2014/07/13 12:38:12  ID:hh7t9GxI.net(2)
NFSを知らん世代がC使うようになったのか胸熱

991
デフォルトの名無しさん[sage]   投稿日:2014/07/13 12:45:23  ID:+97kXbwc.net
MZはナウいヤングメンなので、UNIXなんて知りませぬ

992
デフォルトの名無しさん[]   投稿日:2014/07/13 16:30:35  ID:4JQGeYPE.net(2)
aとbはエイリアスだから W

993
デフォルトの名無しさん[sage]   投稿日:2014/07/13 18:44:05  ID:p5bwqgUP.net(4)
IDで追いかけるなんて、惨めだなw

994
デフォルトの名無しさん[sage]   投稿日:2014/07/13 18:57:17  ID:4JQGeYPE.net(2)
http://hissi.org/read.php/tech/20140713/cDVid3FnVVA.html

初心者を脱して覚えたてのエイリアス使ってやろうと、
「aとbがエイリアスだったら…」とやっちゃったんだろうな。W

995
デフォルトの名無しさん[sage]   投稿日:2014/07/13 20:21:17  ID:p5bwqgUP.net(4)
自分が初心者を脱したことがうれしいらしいw

996
デフォルトの名無しさん[]   投稿日:2014/07/13 21:08:09  ID:c9esStKn.net
なんでスレ違いの話題でスレ合ってるのをスルーするわけ?

997
デフォルトの名無しさん[sage]   投稿日:2014/07/14 00:06:14  ID:IJfuG6Dx.net
>946
これのJavaを生成してくれるものってないのでしょうか

998
デフォルトの名無しさん[]   投稿日:2014/07/14 09:01:52  ID:0ty9SLgy.net
6月8日から誰も書き込まなくて
やっと7月12日に書き込んだと思ったら
それを急にスレ違いな書き込みで
スルーするっておかしくない?

999
デフォルトの名無しさん[sage]   投稿日:2014/07/14 16:07:02  ID:85+K9ELL.net
>975
答えられる人がいないだけだろ

1000
デフォルトの名無しさん[sage]   投稿日:2014/07/14 20:53:05  ID:hsWcAmzQ.net
>975
しょうがないから説明するが、>957の文法は無限ループだから何法だろうがパースできないわけで、
答えなんかないわけよ。そういう頭の悪そうな発言をする人がこのスレに来るミステリー。
あなたがおかしなことを書いてしまったのだから、バカにされたり無視されたりするのは当然の
結果なんだが、俺様が一ヶ月ぶりに質問してやったのにスルーするなという、勘違い甚だしい
態度に二度びっくりだよ。

1001
デフォルトの名無しさん[sage]   投稿日:2014/07/14 22:34:06  ID:+HCYiRGv.net
じゃあ最初からそれを書けよ
一切対応せず延々とスレチの話をしてやがって
何が「しょうがないから」だよ

1002
デフォルトの名無しさん[sage]   投稿日:2014/07/14 23:47:27  ID:4Au1+Pyc.net
皆のスルー力が高いからって喚くな

1003
デフォルトの名無しさん[sage]   投稿日:2014/07/15 14:59:02  ID:JZ9KbigV.net(2)
>977
意味不明。
LL文法ではないかあるかを聞いているのに
「何法でもパースできないから答えが無い」とか的外れな回答をするアホ。
一言LL文法で済む話なのに。
ちなみにプッシュダウンオートマトンでパースできますが、これは
秘密にしておこう。

1004
デフォルトの名無しさん[sage]   投稿日:2014/07/15 15:11:44  ID:JZ9KbigV.net(2)
よくみると>957は文法をきいているのであって、
解析法を質問しているんじゃないんだよな。
本当に的外れワロスwww
少なくとも文脈自由文法に含まれることは確かだな。

1005
デフォルトの名無しさん[sage]   投稿日:2014/07/15 22:11:20  ID:mz5l6m+l.net
何言ってるのかわからない。
>957は、解析器の作成に失敗するか、常にパースに失敗する解析器しか生み出さない。
パースが成功することは決してない。パース*できない*。
だから、>966の「LL文法にできるか」という問いには、
>957は意味不明であり、あなたが何をしたいのかわからない」
「あなたがやりたいことがLL文法にできるかは『答えようがない』」
っていうのが正解でしょ。

ちなみに>957の「カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃない」については
「LLで、先読みの上限を超えたら上手く扱えないだろうけれど、カッコのせいじゃないだろ。」
って答えができるが態度悪いやつに説明するのが面倒だから無視しているだけね。

1006
デフォルトの名無しさん[sage]   投稿日:2014/07/16 09:34:22  ID:iVIaM1wP.net(4)
パーサーに>957を読み込ませて解析できるかってことをきいてるんじゃなくて、
985を変形してLL文法解析器で構文解析できるかをきいているんでしょ。

1007
デフォルトの名無しさん[sage]   投稿日:2014/07/16 09:39:32  ID:iVIaM1wP.net(4)
あと先読み数は関係ない、LL(1)とは書いてないから。
LL(∞)だから扱えないとうのは理由にならない、無限の代わりに十分に大きいN
を使えばいいんだから。

1008
デフォルトの名無しさん[sage]   投稿日:2014/07/16 09:52:56  ID:Dccn/eWm.net
態度を持ち出すとはワロタ
劣勢ですなあ

1009
デフォルトの名無しさん[sage]   投稿日:2014/07/16 10:06:34  ID:iVIaM1wP.net(4)
過疎になると初めに書く勇気が無いくせに
勇気のある一人誰かが書き込むとハイエナのように
群がってそいつの引きづりおろして人の手柄を横取りする
ハイエナばっかだな。
とくに>946と片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0(>958
どうせこのドチラかの自演だろうけど。
ちなみにおれは通りがかってこのスレを見ただけだがなw

1010
デフォルトの名無しさん[sage]   投稿日:2014/07/16 10:12:05  ID:iVIaM1wP.net(4)
訂正:>946>974

1011
デフォルトの名無しさん[sage]   投稿日:2014/07/17 03:01:43  ID:syfeQpO8.net
文脈自由文法が生成する文字列は、
開始記号を有限回書き換えて得られる終端記号の並びだと定義されている
>957は何回書き換えても非終端記号が残るのに何をどうしろと

どこかにεあたりが抜けているような気はする
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
王様のブランチ☆8 (304)TBS実況
実況 ◆ テレビ朝日 47314 (1000)テレ朝実況
第89回選抜高校野球大会6日目 ★38 (796)NHK実況
メレンゲの気持ち今話題の人大集合スペシャル★2 (366)NTV実況
タカトシ温水の路線バスの旅 「そして神戸 異人館〜有馬温泉」 (786)フジ実況
NHK総合を常に実況し続けるスレ 132178 寺門亜衣子の証人喚問 (622)NHK実況
にじいろジーン★2 (826)フジ実況
実況 ◆ フジテレビ 82958 (863)フジ実況
このスレッドが人気です(ニュース系)
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★50 (576)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★49 (1001)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★48 (1000)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★47 (1002)ニュー速+
【社会】「ゲーム発売日なんで有休取ります」 モンスター新人、許せる? (644)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★46 (1002)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★45 (1002)ニュー速+
【籠池メール】辻元清美氏に関する記述、民進「事実に反する虚偽」と否定 メディア各位に拡散しないよう要求★44 (1000)ニュー速+
プログラム板の人気スレ
オブジェクト指向って不自然な文法だよな (633)
【統計分析】機械学習・データマイニング14 (318)
Excel VBA 質問スレ Part47 (334)
スレ立てるまでもない質問はここで 146匹目 (1000)
くだすれPython(超初心者用) その32 (982)
Visual Studio 2017 (806)
C言語なら俺に聞け 139 (564)
次世代言語議論スレ[Go Rust Haskell Scala]第3世代 (322)
ふらっと C#,C♯,C#(初心者用) Part127 (134)
C#, C♯, C#相談室 Part92 (682)
C++相談室 part129 (902)
推薦図書/必読書のためのスレッド 81 (579)
ねねっちと一緒にプログラムを勉強するスレ第2話 (76)
Swift part10 (311)
Pythonのお勉強 Part52 (704)
【PHP】下らねぇ質問はここに書き込みやがれ 8 (92)
Visual Studio 2015 Part8 (552)
Xamarin Part3 (653)
Git 15 (339)
Java入門・初心者質問スレ Part.2 (885)
HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net (245)
クラス名・変数名に迷ったら書き込むスレ。Part27 (929)
プログラミング言語 Rust 2 (704)
ドルオタワイ、1からプログラミングを学びたい (130)
Ruby 初心者スレッド Part 59 (906)
☆★Java質問・相談スレッド179★★ (827)
関数型プログラミング言語Haskell Part30 (241)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)