トップページ⇒tech
989コメント306KB

「コンパイラ・スクリプトエンジン」相談室15

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2011/01/28(金) 20:33:18
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

■過去スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/
3 http://pc5.2ch.net/test/read.cgi/tech/1070089173/
4 http://pc5.2ch.net/test/read.cgi/tech/1100097050/
5 http://pc8.2ch.net/test/read.cgi/tech/1106129164/
6 http://pc8.2ch.net/test/read.cgi/tech/1115335709/
7 http://pc8.2ch.net/test/read.cgi/tech/1129287390/
8 http://pc8.2ch.net/test/read.cgi/tech/1131273918/
9 http://pc8.2ch.net/test/read.cgi/tech/1135082582/
10 http://pc8.2ch.net/test/read.cgi/tech/1146844753/
11 http://pc11.2ch.net/test/read.cgi/tech/1160879890/
12 http://pc11.2ch.net/test/read.cgi/tech/1188688416/
13 http://pc12.2ch.net/test/read.cgi/tech/1233143342/
14 http://hibari.2ch.net/test/read.cgi/tech/1258431145/
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2011/01/28(金) 20:33:55
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 ttp://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html
・Turbo Pascal Lex/Yacc
 http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html
・Jim Roskind's LALR(1) C++ Grammar
 ttp://www.empathy.com/pccts/roskind.html
・Flexと Bisonを同時に使う
 http://guppy.eng.kagawa-u.ac.jp/2005/SysProg/both.html
・KITE_ASM (yacc,lex)
 http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/
・bison用のC++ LALR skeleton
 ttp://www.bj-ig.de/software/bison/
・ANTLR(非yaccのパーサジェネレータ)
 ttp://www.antlr.org/
・JavaCC(Java Compiler Compiler)
 ttps://javacc.dev.java.net/
 ttp://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
 ttp://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html
・CUP, JLex, JFlex
 http://www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP)
 ttp://www.jflex.de/
・SableCC
 ttp://www.sablecc.org/
・¬<><∪∪ (notavacc)LALR(1)
 http://ne.cs.uec.ac.jp/~koto/notavacc/
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 http://spirit.sourceforge.net/
 ttp://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
 ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
0004デフォルトの名無しさん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/compilerresume/gc/gc.html
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
 http://www.amazon.com/exec/obidos/ASIN/0471941484/

★処理系,スクリプト

・kikyou.info (吉里吉里というゲームのスクリプト)
 http://kikyou.info/
・tiny C コンパイラ (C)
 http://www.watalab.cs.uec.ac.jp/tinyCabs.html
・6809用 Micro C コンパイラ
 http://www.axe-inc.co.jp/pds/mc09.html
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
 http://users.pandora.be/stes/compiler.html
・自作コンパイラの部屋(PL/1, Pascal等)
 http://www.tokumaru.org/
・『Rubyソースコード完全解説』サポートページ
 http://i.loveruby.net/ja/rhg/
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
 http://www.okisoft.co.jp/esc/go.html
・MSによるPEフォーマット仕様書(日本語)
 http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
0005デフォルトの名無しさん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/
 ヨーロッパ系。派手さはないが堅実。
0006デフォルトの名無しさん2011/01/28(金) 20:35:22
★参考書籍

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

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

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

・算体
・算帖
・算程
・算譜
・算法
0009デフォルトの名無しさん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
0010デフォルトの名無しさん2011/01/29(土) 04:39:23
タイガーブックは硬い訳で、言い回しが多少くどい
すらすら読めるところもあるんだけどたまに引っかかって、文意を解くのに疲れる
いい本だとは思うけどね
0011デフォルトの名無しさん2011/01/29(土) 08:28:51
・算体 データ?
・算譜 プログラム
・算法 アルゴリズム

残りはわからん。
0012デフォルトの名無しさん2011/01/29(土) 11:11:21
算体 object
算帖 file
算程 process
算譜 program
算法 algorithm
0013デフォルトの名無しさん2011/01/29(土) 13:04:45
Holub氏のCompiler Design in Cと言う本を持ってる人いませんか?

譲り受けた物が手元にあるのですが、最後にピンク色の破線で切り離せるっぽい頁があったみたいなのですが、切り離されていました。
これが何だったのか気になりましてw
001482011/01/29(土) 13:24:01
>>12
素晴らしい。全問正解だ。

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

ちなみにこの本では、前スレで誰かが言ってた初出の箇所は「漢字(英単語)」という表記で、
しかも巻末にまとめとして対訳表があるから、漢字だらけでも苦痛に感じられなかった。
0015デフォルトの名無しさん2011/02/02(水) 00:51:19
BNFとか全然わかんね

力押しでゴリゴリ動かしてるぜー
0016デフォルトの名無しさん2011/02/02(水) 07:38:31
BNF は読み書きできるようになった方がいい

構文解析分野共通の言語あるいは図解フォーマットみたいなものだから
0017デフォルトの名無しさん2011/02/02(水) 07:59:04
>>16
BNFとか見てるとなんでlexとyaccに分解されちゃうのか時々わかんなくなる(自己記述可能な言語でパーサ書いたあととか特に)
0018デフォルトの名無しさん2011/02/02(水) 08:10:30
中間言語経由した方が便利だからじゃね?
0019デフォルトの名無しさん2011/02/02(水) 13:38:59
当時のハード・ソフトでは字句解析と構文解析を分けないと、時間のかかるεNFAからDFAの変換が
どうしようもなく時間がかかるようになるからでない
0020デフォルトの名無しさん2011/02/02(水) 16:15:26
片方だけ利用って局面が稀にあるから独立してないと困るな
ツール的にはむしろyacc(bison)は更に2つに分かれてた方が助かる
状態と遷移表の抽出結果を入力として、表圧縮とソース成形の機能だけ利用したい時があるんだよね

入力内の遷移表にshift/goto/reduce以外の独自操作を定義追記出来る形ならなお良い
0021デフォルトの名無しさん2011/02/02(水) 18:09:47
>>15
BNFが使えるようになれば、言語処理系以外の
一般的なデータ構造の記述(定義)にも応用がきくから、慣れた方がいいと思う。

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

構文図については、たとえば http://www.json.org を参照。
他にもググるといくつも例が見つかるから、自分で調べてね。
0022デフォルトの名無しさん2011/02/02(水) 20:50:57
>>17
言語定義の規模が大きくなるから機能分割しているのではないかと。
より一般的な言い方をすれば、字句解析(下位層)と構文解析(上位層)への階層化。
階層化によって、>>19が指摘した効率化(処理の高速化)という利点も生まれる。

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

また、自己記述可能な言語としては、自分はPrologのDCG(Definite Clause Grammer)を
使うことが多いけど、定義言語の規模が小さくても意識的にscannerとparserに分割して書いているよ。
0023デフォルトの名無しさん2011/02/02(水) 20:57:14
スキャナがパーサの状態に依存する言語は多いけどな
0024デフォルトの名無しさん2011/02/02(水) 21:08:01
>>22
gccは手書きだよ
0025デフォルトの名無しさん2011/02/02(水) 21:12:28
>>23
Rubyとかは、その典型例だね。
Rubyは人に優しい言語だから自分は大好きだけど、中の人にはなりたくないw
0026222011/02/02(水) 21:33:40
>>24
えええっ!、そうなんだ。知らんかったよ。
0027デフォルトの名無しさん2011/02/02(水) 22:09:56
ていうか今時の言語だとたいがいパーサは手書きでしょ
0028デフォルトの名無しさん2011/02/02(水) 22:28:26
ここはポコポコオレ様言語を作るスレだろ。
0029デフォルトの名無しさん2011/02/03(木) 00:49:17
>>24
よく知らんのだけど、
パーサジェネレータの吐いたコードを下敷きにしてるとかじゃなかったっけ?
エラーメッセージの丁寧さがうんたらかんたら
0030デフォルトの名無しさん2011/02/03(木) 02:06:06
エラーメッセージじゃなくて、エラーハンドリングが丁寧ね。
構文エラーでも、コンパイル続けたいし。

字句解析/構文解析分割については、
字句解析ないと、BNFレベルで字句解析もやることになるから、
予約語や数値リテラルの解析なんかも全部BNFに入ってくる。
嬉しいことなんてないと思うが。
0031デフォルトの名無しさん2011/02/03(木) 07:49:27
そこで PEG ですよ
0032デフォルトの名無しさん2011/02/03(木) 10:55:17
>>22
FORTRANとCOBOLに火炎瓶投げられても知らんぞw
0033デフォルトの名無しさん2011/02/03(木) 16:43:02
俺、A=aAa|aに相当するPEG(若干違った鴨)が2^(n-1)個のaを表すってのを知ってPEGがわからなくなった
ぐぐったらちょうどこの文法がPackrat Parserで受理出来ないって英語版Wikiにかいてあるね
0034デフォルトの名無しさん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') になるのではないでしょうか。
0035デフォルトの名無しさん2011/02/15(火) 06:57:14
>>22
lispのリーダーマクロみたいな仕組みで別言語に化けられる奴とかってないかな?
0036デフォルトの名無しさん2011/02/15(火) 10:46:32
Scheme実装であるPLT Schemeが発展したracketに
言語開発フレームワークがある。

Algol 60の例
http://docs.racket-lang.org/algol60/index.html
0037デフォルトの名無しさん2011/02/16(水) 02:23:51
LR(1)において、規則左辺と右辺と先読み記号の組 A->αβγ..., aにおいて、先読み記号はどのように決定されるのですか?
0038デフォルトの名無しさん2011/02/16(水) 10:43:23
AのFollow-setでいいんじゃない
0039デフォルトの名無しさん2011/02/16(水) 13:27:01
ありがとうございます。
0040デフォルトの名無しさん2011/02/16(水) 13:29:47
すみません。なんだか37も日本語おかしいですね。死にます。
0041デフォルトの名無しさん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
なのであっている気がするのですが...
0042デフォルトの名無しさん2011/02/16(水) 20:28:29
すみません。言葉足らずでした。

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

それと、自分で組んだ実装では、follow(L)はfollow(E)を含みませんでした。
タイガーブックにある例とドラゴンブックにある例をパスしましたが、これが気になって先にすすめません。
0043デフォルトの名無しさん2011/02/17(木) 04:45:27
立て続けにすみません。
生成規則の右辺に出てくる終端記号以外に関してはfollow集合は作らなくても大丈夫なんですか?
0044342011/02/17(木) 23:42:20
COINSのソースを読んで解決しましたので、質問を取り下げます。

ところで、LLVM の '条件文を考慮した定数伝播' って実装途中なんですかね。
肝心な部分の処理が足りてない気がします。
0045デフォルトの名無しさん2011/02/18(金) 20:01:09
SECDとbf間のトランスレータってありますか?
0046デフォルトの名無しさん2011/03/08(火) 15:30:02.50
月刊・コンパイラ。
毎号付属するモジュールを組み立てていくと、あなたオリジナルのコンパイラが完成します。
創刊号は字句解析器が付いて1200円。
ディアゴスティーニ♪
0047デフォルトの名無しさん2011/03/08(火) 15:41:47.02
ぷよぷよ
0048デフォルトの名無しさん2011/03/08(火) 15:45:30.82
付属のモジュールを組み立てるだけなのにオリジナルとは一体
0049デフォルトの名無しさん2011/03/08(火) 15:48:35.94
ウリジナルニダ
0050デフォルトの名無しさん2011/03/21(月) 21:10:43.51
旧版ドラゴンブック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. までしか起こりませんでした。
0051デフォルトの名無しさん2011/04/03(日) 14:41:58.25
基本的にCを元に、ちょっと改造したC作ってみたいんだけど、
参考しても(パクっても)GPLに汚染されない、無料なwindows向けのCのソースってない?
0052デフォルトの名無しさん2011/04/03(日) 15:26:35.67
>>51
http://pcc.ludd.ltu.se/building/
0053デフォルトの名無しさん2011/04/03(日) 15:40:34.51
>>52
ありがとう。
でもmingw32(gcc)のライブラリが必要っぽいんだけど、
ライブラリだけなら、汚染されないんだっけ?
0054デフォルトの名無しさん2011/04/03(日) 15:45:39.15
>>53
http://www.mingw.org/license
0055デフォルトの名無しさん2011/04/03(日) 15:47:16.95
http://www.mingw.org/license
0056デフォルトの名無しさん2011/04/03(日) 15:59:21.58
>>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?
0057デフォルトの名無しさん2011/04/03(日) 16:12:55.55
>>56
自分なら w32api: のパラグラフ全文を入れると思う
0058デフォルトの名無しさん2011/04/03(日) 16:27:15.86
>>57
全文入れれば間違いないのは分かるけど、文章の掛かってる部分はどこなのかと…
まぁ、取り合えず、GPLにはならないことは間違いなさそうなので、
もう少し良く考えて、分からなければ、全文にします。
0059デフォルトの名無しさん2011/04/03(日) 16:41:19.25
>>58
>文章の掛かってる部分

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

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

他人の助言を信じるにせよ信じないにせよ、Use at your own risk.
0060デフォルトの名無しさん2011/04/05(火) 10:46:46.58
クラウドコンパイラーってないの?
手元でやるより超高速で出来そうじゃないか?
0061デフォルトの名無しさん2011/04/05(火) 10:55:07.51
昔SourceForge.jpがやってた。
0062デフォルトの名無しさん2011/04/05(火) 20:34:39.93
西日本も福島原発の放射能に曝される。

4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
0063デフォルトの名無しさん2011/04/06(水) 02:55:03.68
>>61
どうして止めたんだろう
0064デフォルトの名無しさん2011/04/13(水) 20:18:35.44
ANTLRの*.gって日本語書けないの?
コメントすら日本語入れるとinternal errorとかいってくれちゃうんだけど、
何か設定なりオプションなり加えれば通るのかしら。
0065デフォルトの名無しさん2011/05/05(木) 18:19:53.36
hosyu
0066デフォルトの名無しさん2011/05/06(金) 23:53:19.79
BNFで検索すると2ちゃんねるとかいうわけのわからない検索結果ばかり出てくるんだけど。
2ちゃんねるってなんなの。シネよ。
0067デフォルトの名無しさん2011/05/07(土) 14:01:54.75
バッカス-ナウアー記法で親父ギャグが飛び交ってないだけマシ

エイホは知らんが。
0068デフォルトの名無しさん2011/06/10(金) 05:34:32.17
下降型の構文解析のエラー処理をどうしたらよいのか考えているのですが、
どうも、うまく出来ません。

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

みなさんはどのようにしてますか?
0069デフォルトの名無しさん2011/06/10(金) 11:11:28.61
http://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part2/Chap5.html#sc16
が参考になると思う。オリジナルは、
http://wiki.clean.cs.ru.nl/Documentation
0070デフォルトの名無しさん2011/06/10(金) 14:15:01.54
ドラゴン2版の字句解析器の章で一番最後に乗ってる
表をずらして保存して圧縮するアルゴリズムの一般的な名前ってなんですか?
0071デフォルトの名無しさん2011/06/12(日) 03:55:38.58
https://github.com/tolmasky/language
0072デフォルトの名無しさん2011/06/14(火) 07:45:32.22
http://chris.wailes.name/?page_id=97
0073デフォルトの名無しさん2011/06/14(火) 19:09:26.75
常識無いな
何のコメントも無しにリンク張るなよ紛らわしい。
0074デフォルトの名無しさん2011/06/14(火) 19:20:31.08
ご立腹ですねw
0075デフォルトの名無しさん2011/06/18(土) 15:52:19.34
>69

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

>>71 が JavaScriptで書いたPEGのパーサ
>>72 がRubyで書いた、パーサやら、LLVMのなにか
みたいですね。
0076デフォルトの名無しさん2011/06/21(火) 01:35:14.66
言語処理系入門したいんですが、ドラゴンブックから入ればいいんですかね?

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

仮想マシンの設計や JIT コンパイルとかやってみたいのです
0077デフォルトの名無しさん2011/06/21(火) 03:14:19.87
>>76
仮想マシンはドラゴンブックでいいかもしれんがJITだとあんまり良い書籍無いような気がする
JITで良い書籍あったら自分も読みたい

#第一版しかもってないからかもしれんけど
0078デフォルトの名無しさん2011/06/21(火) 06:56:57.61
JITコンパイルについて詳しいことが書かれた成書って無いんじゃないかなぁ
0079デフォルトの名無しさん2011/06/21(火) 12:02:57.47
>>76
具体的なことまで読みたくなると、ドラゴンブックだけでは足りない。
もちろんドラゴンブックだけで書いてしまう人もいる。

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

tccにJITを付けるプロジェクトが幾つかあったはずだが、今はもうないようだ。
0080デフォルトの名無しさん2011/06/21(火) 12:06:28.43
最近だとLLVMを触ってみるのもいいかもしれんねぇ

それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた
0081デフォルトの名無しさん2011/06/21(火) 12:08:02.99
英語読めるならこの辺りをとっかかりに。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.3985&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.71.3303&rep=rep1&type=pdf
0082デフォルトの名無しさん2011/06/21(火) 12:08:57.15
>>80
タイガーブックのほうが実際的だね。
ドラゴンブックは網羅的概論。
0083デフォルトの名無しさん2011/06/21(火) 12:48:38.80
これはドラゴン、タイガーの中間くらい?
http://www.amazon.co.jp/dp/012088478X/
0084デフォルトの名無しさん2011/06/21(火) 12:58:12.07
竜虎って言うけどまさに言葉どうりの2冊だな。
0085デフォルトの名無しさん2011/06/21(火) 21:02:38.80
うちの先生は「二つ組み合わせるのがよい」とか言ってたな
フロントエンドはドラゴンのほうが詳しいが、
最適化の部分はタイガーのほうが良いとか
0086762011/06/22(水) 02:51:12.37
おおう沢山のアドバイスありがとうございます
JIT がレベル高そうな直感はありました
参考にさせて頂きつつ段階的に勉強したいと思いますです
0087天使 ◆uL5esZLBSE 2011/07/03(日) 00:41:34.13
----
((((((((( 最近だとLLVMを触ってみるのもいいかもしれんねぇ )))))))))(キリッッッッ!!キリッッッッ!!!!キリッッッ!!キリッッ!ッッッ!
----
(((((( それから前に会ったとあるコンパイラ屋はドラゴンブックよりタイガーブックと言っていた ))))))(←キリッッッ!!キリッッ!キリッ!!!!ッッ
--------------(キリッッ


ゴミは何いってもゴミ
0088デフォルトの名無しさん2011/07/03(日) 15:35:05.84
https://github.com/GenTiradentes/tinyvm
0089デフォルトの名無しさん2011/07/04(月) 10:40:16.73
Flex2.5.4を使用しています。

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

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

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

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

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

と置くとエラーは無くなるのですが、正しい書き方とはどのようなものでしょうか。
0090892011/07/04(月) 11:57:48.68
自己解決しました。

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

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

だと、

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

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

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

のように括弧をつけたところエラーがなくなりました。
0091892011/07/04(月) 12:02:36.54
すいません、誤報でした

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

numerator   {uinteger}

になっていました。
0092デフォルトの名無しさん2011/07/04(月) 12:06:31.36
Flex「落ち着いて!」
0093892011/07/04(月) 12:15:13.40
やりたいことが単純すぎて、どこに盲点があるのか…

暑くて半分頭茹ってるし。へるぷ
0094892011/07/04(月) 12:31:56.41
次こそは間違いないはずだ!

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

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

-l コマンドオプション使ったら排他的スタート状態を使えなくなるし…。うーあー。
0095デフォルトの名無しさん2011/07/06(水) 10:22:42.74
ジャングルブックってのもあるらしいぞ
0096デフォルトの名無しさん2011/07/06(水) 18:11:18.05
ジュマンジ。
0097デフォルトの名無しさん2011/07/12(火) 15:25:19.44
色々な本読むと先読みするのを1文字にするのが滅茶苦茶大事みたいな雰囲気がひしひしと伝わって来るんですけど
そんなに大事とは思えないのは俺だけ?
0098デフォルトの名無しさん2011/07/12(火) 15:47:12.36
読み直し
0099デフォルトの名無しさん2011/07/12(火) 17:32:18.65
昔はこだわったけど、
つまり1文字先読みだけで解析できればメモリも消費しないし、
入力ファイルを先頭からサーッとなめるだけで終わる。

現代ではぜんぜん大事ではないね。
0100デフォルトの名無しさん2011/07/12(火) 17:38:15.85
>>99
> 入力ファイルを先頭からサーッとなめるだけで終わる。

何文字先読みしようがここは変わらんだろ。
0101デフォルトの名無しさん2011/07/12(火) 17:48:45.83
ワンパスで処理しきれん時代も今は昔、だな
0102デフォルトの名無しさん2011/07/15(金) 12:43:55.55
re2c 0.13.5で使用しています。

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

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


re2c 0.13.5で現在、以下のコマンドラインで実行しています。
re2c -i -w -o "lexer2.cpp" "lexer2.re"
0103デフォルトの名無しさん2011/07/15(金) 14:30:29.02
re2cには最短一致指定がないしねえ。
0104デフォルトの名無しさん2011/08/04(木) 11:29:59.04
ウイルスが作成が犯罪になるからオートマトン全体を表すクラスの中にウイルスが存在するから
これからはウイルスを含むクラスとの差を取らないといけなくなるな。
0105デフォルトの名無しさん2011/08/04(木) 12:34:27.81
ウイルスを含まないオートマトン全体の集合……パラドックス発生の臭い……!
0106デフォルトの名無しさん2011/08/04(木) 13:39:08.78
セル・オートマトンじゃないんだから増殖しないでしょ。
受理するだけなんだから。
0107デフォルトの名無しさん2011/08/04(木) 13:52:16.06
オートマトンの定義をみなおしてこい。
0108デフォルトの名無しさん2011/08/23(火) 14:28:26.14
新しい言語を作りたいのだけど
関数型とか手続き型とかじゃなくて、既存にない新しい型の言語を作りたいけど
そんな型はもう発見できないのでしょうか?
0109デフォルトの名無しさん2011/08/23(火) 15:39:00.90
設計したところで、実装しなければ絵に描いたモチなので、
まずは実装する腕力を付ける必要がある。
なのでまずは手続き型でも関数型でも、なんでもいいから簡単なものを実装してみること。
0110デフォルトの名無しさん2011/08/23(火) 15:45:01.70
「関数型とか手続き型」ってくらい大きく枠組みを変える話なら、
新しい計算モデルを考えないといけないよねえ。
0111デフォルトの名無しさん2011/08/23(火) 15:49:23.58
絵に描いた餅といえば、
Steele先生のConnection Machine Lispは面白かった。
立派な餅だった。
(*Lispの方じゃないよ)
0112デフォルトの名無しさん2011/08/23(火) 16:11:23.23
>>108
頑張って発明しろ
0113デフォルトの名無しさん2011/08/23(火) 20:55:42.94
>>108
これからのパラダイムと言えば、「確率的コンピューティング」かな。
http://slashdot.jp/science/article.pl?sid=09/02/11/0219213
http://slashdot.jp/hardware/article.pl?sid=11/03/23/0228212
http://slashdot.jp/developers/article.pl?sid=11/06/07/0151249
0114デフォルトの名無しさん2011/08/27(土) 11:06:00.49
>>108
キューマシンに特化したような言語はまだないと思うから、それ作ってみたらどうよ。
VMの実装も簡単な部類みたいだし。

キューマシンの研究そのものがマイナーだから、自分でいろいろ考えなきゃだけど、
それを楽しんだり発表したりしたいんだよな?
0115デフォルトの名無しさん2011/08/27(土) 13:02:13.55
FIFOLか
0116デフォルトの名無しさん2011/08/27(土) 13:32:50.45
結局キューじゃ順序に制約が多すぎて、
データフロー計算やることになる。
データフロー計算は昔流行ったので、特化言語も結構ある。
昔、九州大学でやってて、九大は関数型がメインだった。
0117デフォルトの名無しさん2011/08/28(日) 09:13:50.59
ドラゴンブック2みたら
重要状態とはε遷移を含む状態である。
って訳してあるけど原著を見ると
重要状態とはε以外の遷移を持つ状態である。
の誤訳だな。
ドラゴンブックの翻訳、訳者は内容わかってなくて翻訳したんだろうな。
0118デフォルトの名無しさん2011/08/28(日) 09:21:51.31
157ページに set alreadyOn[s] to TRUE
って書いてあるけど、これってnewStateの状態だから
TRUEにするっていうのは間違いですよね?
ドラゴンブック2の原著です。
0119デフォルトの名無しさん2011/08/28(日) 10:03:31.25
誰も興味ないと思うけど訂正するよ
含む状態→含まない状態
0120デフォルトの名無しさん2011/09/17(土) 00:56:25.04
ttp://www.geocities.co.jp/SiliconValley-Oakland/3432/man/bison/bison-ja_8.html#SEC69
で
「最後のn個のトークンとグループが文法規則に当てはまる場合には、
それらは規則に従って組み合わされます。これを、還元(reduction)と呼びます。」
とあるのですが、最後のn個というのは複数通りの文法規則があてはまる場合
長い方と短いほうどちらになるのでしょうか?
0121デフォルトの名無しさん2011/09/17(土) 09:05:52.81
還元/還元コンフリクト
0122デフォルトの名無しさん2011/09/17(土) 17:05:32.36
>>121
どうもです。
あとbisonの
a: /*空*/ |
...
っていうような
/*空*/ってどういうときマッチするんでしょうか?
一回以上の繰り返しとかを終わらせるとかくらいしかないです?
0123デフォルトの名無しさん2011/09/18(日) 19:00:24.88
>>122
例えばこういうのはどうです
f()
f(1)
f(1, 2)
関数呼び出し: 関数名 '(' 0個以上の引数 ')'
0個以上の引数: /*空*/ | 1個以上の引数
1個以上の引数: 引数 | 1個以上の引数 ',' 引数
0124デフォルトの名無しさん2011/09/18(日) 20:02:42.21
>>123
いまいち>>120のリンクにある説明での動作との対応がとれないんですが、
a: /*空*/ |
hoge
;
ってあったとき
hogeって入力があったら,
hogeが先読みスタックへつまれて、
現在スタックには何も無いので/*空*/とマッチ,
シフト還元衝突でhogeが読み込まれるってことでいいんでしょうか?
それだと5.6の還元/還元衝突がよく分からないのですが。
5.6ではsequenceとmaybewordの還元/還元衝突が起こって
先にあるsequenceが選ばれると書かれているように見えるのですが
実際にマッチするのはmaybewordみたいです。
0125デフォルトの名無しさん2011/09/18(日) 20:41:59.28
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つのシフトが衝突している
シフトと還元ではシフトが優先されるので最後のシフトの方法が選ばれる
0126デフォルトの名無しさん2011/09/18(日) 21:26:23.53
ドラゴンブック2は原著も翻訳も間違いが多いの?
0127デフォルトの名無しさん2011/09/18(日) 22:03:31.41
>>125
どうもです。
0128デフォルトの名無しさん2011/09/19(月) 13:35:51.05
「どうもです。」とは日本語おかしくありませんか。
正しい日本語をつかいましょうね。
0129デフォルトの名無しさん2011/09/19(月) 13:59:37.83
>>125
恐悦至極にございます。
0130デフォルトの名無しさん2011/09/19(月) 22:38:31.94
いや、誰も誉めてないから
0131デフォルトの名無しさん2011/09/23(金) 13:55:04.37
恐悦至極
意 味: 相手の厚意に大変喜び感謝すること。
0132デフォルトの名無しさん2011/10/01(土) 14:26:37.70
C++をflex,bison等で構文解析するコードってありませんか?
#includeとかは全部無視してて良いのですが。
あってもおかしくなさそうな物なんですが見つかりません。
0133デフォルトの名無しさん2011/10/01(土) 14:50:18.01
構文解析関係の本をamazonで探して買えば?
0134デフォルトの名無しさん2011/10/01(土) 14:57:06.50
C++の仕様を、bisonで構文解析できると思わない方がいい。と言うかまず無理。
0135デフォルトの名無しさん2011/10/01(土) 17:03:42.51
a * b; // 掛け算ですか? いいえ、変数宣言です
0136デフォルトの名無しさん2011/10/02(日) 00:03:44.98
C++は複雑すぎてないらしい
0137デフォルトの名無しさん2011/10/02(日) 00:09:49.41
昔のgccがそうじゃなかった?
Cのみかもしれないけど
0138デフォルトの名無しさん2011/10/02(日) 02:10:09.54
今のg++はbisonの吐いたコードを基に手で書いてる。

今でもメインテナンスされてるbisonコードはないんじゃないだろうか。

この辺り読んでみて。
http://scottmcpeak.com/elkhound/
http://www.nobugs.org/developer/parsingcpp/
http://www.computing.surrey.ac.uk/research/dsrg/fog/FogThesis.pdf
0139デフォルトの名無しさん2011/10/11(火) 12:50:32.08
「コンパイラの構成と最適化 第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)だと、
「抜け」が出てくるんじゃないかと思います。
0140デフォルトの名無しさん2011/10/11(火) 15:19:34.23
そんな最後の方のページまで読んでるなんてすごいね。
0141デフォルトの名無しさん2011/10/11(火) 21:10:47.98
え、みんな最後まで行かないで投げちゃうの?w
0142デフォルトの名無しさん2011/10/12(水) 00:20:16.65
>>139
succ() と child() の定義を確認してみ。
p.339 の最後の段落。IDOM() がポイント。

succ()にしたら同じブロックを二度以上処理しちゃうよ。
01431392011/10/12(水) 11:28:51.85
>>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)を呼び出していけば、必ず全てのブロックを一回づつ巡る事に
成るんですね。

しかも、実際のプログラム実行時の実行順序と同じ順序関係を満たしている
んですね。
01441392011/10/12(水) 11:43:15.97
今回、勘違いしてしまった理由は、Y∈child(X) に対して SEARCH(Y)を
再帰的に呼び出して行くだけでは、全てのブロックを巡ることが出来ない
場合があるのではないか、と思ってしまったことです。

しかし、実際には、>>143 に書いたとおり、child(X)に対応した構造で
ある「支配木」は、プログラム中の全てのブロックを必ず一回づつ含む
面白い構造をしているんですね。
01451422011/10/12(水) 23:24:56.51
そういうことです。根から順に一度ずつ辿れるんですね。
最適化って、うまく動くとすっごい楽しいです。
0146デフォルトの名無しさん2011/10/13(木) 02:39:26.68
   ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
 <SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA! >
  ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
    、        、        、       、        、
  /っノ      /っノ      /っノ     /っノ      /っノ
 / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧
 \\(    )\\(    )\\(    )\\(    )\\(    )


ところで、C言語風の構文解析でBisonファイルを3つ書いて三層構造にしたんだが、こういうのって普通?
字句解析 → マクロ展開層 → プリプロセス命令解析層 → 普通の構文解析層 の順で、マクロ展開層はバッファに展開した文字列を字句解析器が読むように設定する。
0147デフォルトの名無しさん2011/10/13(木) 04:27:44.86
普通。
0148デフォルトの名無しさん2011/10/13(木) 05:30:28.89
flexは?
0149デフォルトの名無しさん2011/10/13(木) 12:33:03.10
>>146
ありがちな話
01501462011/10/13(木) 15:42:43.83
やっぱそうなのか。ありがとう。

>>148
字句解析は一層で大丈夫だった。
0151デフォルトの名無しさん2011/10/15(土) 08:46:49.81
「コンパイラの構成と最適化 第2版」中田育男 朝倉書店
の15.レジスタ割付けのp.409の厚被覆アルゴリズムの部分で、
大体の方針は分かったのですが、細かい部分が分からないので
質問させてください。

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

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

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

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


【分からない理由】

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


ご親切な方のアドバイスをお願いします。
0152デフォルトの名無しさん2011/10/20(木) 08:59:10.43
ドラゴンブックのアルゴリズム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・が重複してうまくいきません。
どなたかご教示ください。
0153デフォルトの名無しさん2011/10/20(木) 09:11:18.99
すみません、
[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, #]
です。
0154デフォルトの名無しさん2011/10/20(木) 12:34:59.11
対象も手順も、根本的にアルゴリズムをちゃんと理解してないように見えるけど。
まず説明を読んで手でやってみたら?
その後に表つきで例として載ってるんだから答合わせも楽でしょう。
0155デフォルトの名無しさん2011/10/21(金) 14:37:42.69
すみません。どうしても理解ができません。
アルゴリズム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が重複してうまく動作するようには思えません。
何度も何度も申し訳ありません。理解のある方、ご教示ください。
0156デフォルトの名無しさん2011/10/21(金) 19:03:44.24
本の読み方と言うか学習の仕方は
各自身につけてないとねぇ…
0157デフォルトの名無しさん2011/10/21(金) 21:28:12.37
>>155のような大先生に教示するなんておそれ多くてとてもとても……
0158デフォルトの名無しさん2011/10/22(土) 13:39:47.28
大学生かな?もしかして院生?
コンパイラの勉強をされてる方に
今更自習の仕方をお教えするなんて大それたことを………
0159デフォルトの名無しさん2011/10/22(土) 15:18:35.23
構文論の複雑な部分を見ると、「構文と動作が直結したForth最強」とか思うよな。
0160デフォルトの名無しさん2011/10/22(土) 15:50:07.93
Forth はスタックマシン用の複数のアセンブラコードを
一行にまとめて書いた感じ

構文なんて有って無いようなモンだ
0161デフォルトの名無しさん2011/10/22(土) 16:19:08.05
自己解決しました。
LR(1)のgotoを用いていたのが間違いだった様です。
文脈上、LR(0)の主要項集合を扱うのでLR(0)のgotoを使わなければいけませんでした。
01621512011/10/23(日) 08:12:05.66
>>151 の質問にも回答をお待ちしておりますので、よろしくお願いします。
0163デフォルトの名無しさん2011/10/23(日) 16:02:33.07
ここまで突っ込んだこと聞くなら先生に直撃の方がいいんじゃなかろか?
www.k.hosei.ac.jp/~nakata/
一番下にメアドあるし
0164デフォルトの名無しさん2011/10/23(日) 22:44:20.86
それはダメだろ。
明確な間違いを指摘するなら結構だが、理解できないなんて理由でメールしてたら中田神に迷惑だ。
答えられる人がいなくたって仕方ないよ。
正誤表は確認しとくべきだが。
0165デフォルトの名無しさん2011/10/23(日) 23:01:05.33
そうかなあ
0166デフォルトの名無しさん2011/10/23(日) 23:01:42.20
俺は以前、瀬山士郎の数学の本について
本人に理解できないとメールで質問したら、
数回にわたって理解できるまでメールのやりとりをしてくれたよ

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

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

普通はこちらが真摯に質問すれば、相手も真摯に答えてくれるよ
ただ、相手も仕事や研究があって忙しいから返事に時間かかるかもしれんし、
クヌース先生みたいに秘書に任せているかもしれんが
0167デフォルトの名無しさん2011/10/24(月) 08:59:59.16
迷惑な奴だ
0168デフォルトの名無しさん2011/10/24(月) 09:34:03.80
企業と同じように、社会貢献は大学の義務だから、
まともな内容であれば問題ない。
0169デフォルトの名無しさん2011/10/24(月) 09:48:04.21
金払って大学行けよ
0170デフォルトの名無しさん2011/10/24(月) 12:44:01.09
>>167
その考え方は勿体ないなぁ
せっかくメールアドレスが公開されてるんだから、
遠慮しないで、思い切って質問してみた方がいいよ

専門書は著者も金稼ぎや頼まれて書いてる分はほんの僅かで、
ほとんどは情報を発信したくてうずうずするから書いてる
俺の恩師もそうだったが、真面目な質問は大歓迎なんだよ
0171デフォルトの名無しさん2011/10/24(月) 13:52:34.48
質問歓迎って書いてるならどんどん質問すればいいんじゃね?

ただ、メールアドレスが書いてるからとかどっかの恩師が大歓迎してたからとか
そんなアホな理屈で一般的に質問OKという風潮ができるのは恐ろしい
うっかりアドレスも書けなくなるな
0172デフォルトの名無しさん2011/10/24(月) 14:01:44.31
所詮は他人事。
0173デフォルトの名無しさん2011/10/24(月) 15:46:14.36
そういうフィードバックは改訂の時の参考になるだろうし、著者にとっても良いんじゃないかな?
0174デフォルトの名無しさん2011/10/24(月) 19:12:06.44
むしろ、なぜ質問大歓迎の風潮になっていないのか不思議でならん
0175デフォルトの名無しさん2011/10/24(月) 20:06:13.45
学術書じゃない書籍の執筆経験ならあるけど、
その編集プロダクションでは読者からの質問には
回答義務……まではいかないけどできるだけ回答すべき、
みたいな空気だったよ。
最終的には相手が判断することでいいんじゃない?
回答がおっくうなら無視するか断ればいいんだし。

>>164 が勝手に思い込んでるだけだと思うけど
0176デフォルトの名無しさん2011/10/24(月) 21:00:14.26
>>164 >>171

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

そうでなくては、自国で学者を支援する意味がありません。
0177デフォルトの名無しさん2011/10/24(月) 21:31:29.09
回答を受ける人自身が「私には義務がある」というのは気にならないけど、
他人から「おまえには義務がある」と言われる人を見るのは少し抵抗があるなあ。
心情的にはわかるけど語感としてキツい印象を持った。
0178デフォルトの名無しさん2011/10/24(月) 21:33:34.02
>>177
ごめん、「回答を受ける人自身」は「質問を受ける人自身」の間違いです。
0179デフォルトの名無しさん2011/10/24(月) 21:36:46.67
そんな事になったらセンセイは一切本を出せなくなっちまうな
こわいこわい
0180デフォルトの名無しさん2011/10/24(月) 21:42:04.24
>>176
そんな義務ないよ。給料分のことはしてるから。
たぶん良質の質問、および質問者ばかり想定して
そういう事言ってるんだろうけど…
金払っていて明確な義務がある学生の中でも基地外対処に苦労してる。
質問および質問者も選別されるのは当然のこと。
それが人と人とのつながりというものですよ。
0181デフォルトの名無しさん2011/10/24(月) 21:47:35.41
>>180
自国民の役に立つ義務は必ずあるんですって。

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

そこを勘違いしている教授が多くて感覚のズレに憤りを感じます。
0182デフォルトの名無しさん2011/10/24(月) 21:48:47.95
>>179
本も自分の利益のためではなく、国民への奉仕として出す義務があるんです。

それが嫌なら、国から研究費を貰わないで下さい。
0183デフォルトの名無しさん2011/10/24(月) 21:51:26.70
日本を代表する企業である、Panasonicの創業者である松下幸之助も、
 「大学はろくな事を教えないから、教育し直さなくては成らない」
と言っています。

実際的でないセンスの悪い研究や教育が多いと言うことなんですよね。
0184デフォルトの名無しさん2011/10/24(月) 21:58:53.53
NASAとかは国民の税金で宇宙開発やってるんだから、その成果は
無償で写真とかの著作権を放棄するとか立派だと思うけどな
0185デフォルトの名無しさん2011/10/24(月) 22:35:45.81
>>181
ないよ。そんな狭い考え方で本当に有意味な成果は生まれてこない。あなたの勘違いの方が甚だしいw
0186デフォルトの名無しさん2011/10/24(月) 23:16:22.52
まあ本出した先生も
真面目な質問来たら嬉しいだろう
好意で答えてくれるのはありがたい
回答を義務とか言うのはお門違い
0187デフォルトの名無しさん2011/10/24(月) 23:50:30.86
>>184
米国民以外の人間も見放題だけどな
0188デフォルトの名無しさん2011/10/25(火) 03:38:02.33
なんか俺がメアドあるから聞いてみたらって書いたせいで荒れているけど
自分は真摯に著書で理解できない場合割と質問するんだ、中田先生はどうかわからないけど、
学術書の場合自分の不理解を説明した上での質問は割と答えてもらえるし、
改訂版で不理解が多かった部分に手直し入れたよって教えてもらえてうれしかったりした経験があったから軽い気持ちで書いたんだ。
元の質問者の学習態度がよかったから勧めてみたけど、スレあれちゃってごめんな。
0189デフォルトの名無しさん2011/10/25(火) 05:33:00.41
荒れたうちに入らないだろ。たまにはこんな話題もいいさ。
著者にもメリットあるし、いいかもね。
0190デフォルトの名無しさん2011/10/25(火) 08:08:53.10
まぁ、変なことを主張した奴が一人いただけだ。
多分そいつは他人に迷惑を一切かけない、酸素を全く消費しないで生きてる奴なんだろう。
0191デフォルトの名無しさん2011/10/25(火) 21:27:26.14
>>188
いや、あなたは正しいでしょう。書いた方も、解答できる時間があるかは別にして、率直に嬉しく思うでしょ。
0192デフォルトの名無しさん2011/10/26(水) 00:39:31.44
>>181
自国民の役に立つ義務はあっても
お前の質問に答える義務はない

いちいち一人一人相手にしてたら仕事にならん
そのために本出したり、一般向けの講演会やったりしてんだよ
0193デフォルトの名無しさん2011/10/26(水) 00:40:59.66
>>183
そもそもpanaみたいなオワコン企業の役に立つ人間を育てようとしてないから
勘違い甚だしい
0194デフォルトの名無しさん2011/10/26(水) 01:58:06.30
パナソニックは、ハイブリッド車のリチウム電池を供給してる
0195デフォルトの名無しさん2011/10/26(水) 03:57:55.59
そろそろ他の板でやってくれ
0196デフォルトの名無しさん2011/10/26(水) 07:51:02.20
>>192 てめえの存在がこのスレの妨害だから消えろヴォケ
0197デフォルトの名無しさん2011/10/26(水) 12:18:13.77
>>193
Panasonicをオワコンというなら、日本企業でオワコンで無い物はどこなの?
0198デフォルトの名無しさん2011/10/26(水) 12:25:38.60
続けるなアホが
0199デフォルトの名無しさん2011/10/26(水) 19:04:23.45
え?
0200デフォルトの名無しさん2011/10/26(水) 23:19:56.71
>>197
いくらでもあるよ
もっとレベルの高い仕事をしてる会社、利益率の高い会社・・・いくらでもある
ざっと四季報にでも目を通してみたら?

実際、panaは儲かってもいないし、優秀な人も行ってないしね
一部優秀な人もいるけど、大半は作業員レベル。学歴も低い。
0201デフォルトの名無しさん2011/10/27(木) 10:06:06.43
>>200
具体的にどこ?
0202デフォルトの名無しさん2011/10/27(木) 10:14:30.00
時代時代によってコロコロと事情は変わるけど、今の時代、大メーカーの
正社員で研究・開発、と言えば、そこそこ優秀な人はいってると思うけどね。
0203デフォルトの名無しさん2011/10/27(木) 10:15:18.23
そろそろスレタイ見ようか (--##
0204デフォルトの名無しさん2011/10/27(木) 10:23:49.31
大学教員自身が自分がセンスの悪い的はずれなことを研究していると自ら
気付くことはないんだろう。

馬鹿は自分が馬鹿なことに気付かないらしいから。
0205デフォルトの名無しさん2011/10/27(木) 11:27:44.49
まさしく >>204 自身のことだな
0206デフォルトの名無しさん2011/10/28(金) 00:37:21.78
>>202
panaの研究・開発がレベル低いなんて言ってないよ。
「一部優秀な人」と書いたのは研究開発の人たちのつもり。
でもね、panaは連結で30万以上の社員がいるけど、そのうちの大半は
低レベルな仕事しかしてないんだよ。低レベルな仕事というのは
工場の現場のこと。こういう低レベルな仕事を抱えこんでいるかぎり
どうしようもないよ

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

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

ファナックや製薬はどう?
ライバルはどこ?中国でも韓国でもないよ。
それがレベルの高い仕事をしてる証拠だよ。
こういう会社は給料は高いし、高い給料を出しても儲かってる。
0207デフォルトの名無しさん2011/10/28(金) 08:23:52.35
>>206
>ファナックとか、製薬全般とか、たくさんあるよ

現状、発展途上国が台頭してきてないとは言えるけど、ロボット作り
がPanasonicがやってることに比べてそんなに高度だとは思えないし、
製薬に関しては口に入れる物だから国内産に人気があることが大きく
影響している。
0208デフォルトの名無しさん2011/10/28(金) 09:33:20.02
パナソニックは産業ロボットの先駆けだけどな。
俺が生涯で初めて見たロボットがパナソニックの5軸だった。
それは、博覧会で書道やってたやつだったな。
0209デフォルトの名無しさん2011/10/28(金) 10:56:33.14
そろそろスレタイ見ようか (--###
0210デフォルトの名無しさん2011/10/28(金) 11:36:08.88
自習で行き詰まった奴の次はスレチな話題かよ
0211デフォルトの名無しさん2011/10/28(金) 22:43:23.12
>>206
でおまえはどういう仕事してるの?、自宅警備?
0212デフォルトの名無しさん2011/10/28(金) 23:43:02.74
>>207
>ロボット作りがPanasonicがやってることに比べてそんなに高度だとは思えないし、

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

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

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

>>208
そう
だからパナもテレビ作りなどというくだらない仕事を早く捨てて
高度なことだけをやったほうがいい。
ようやく捨て始めてるようだけどね。
0213デフォルトの名無しさん2011/10/28(金) 23:48:27.37
とスレタイすら読めない馬鹿が喚いてます
0214デフォルトの名無しさん2011/10/30(日) 11:12:35.28
panaはこのスレタイにそったテーマだと、
携帯向けのJVMは黎明期に結構頑張っていたよ。
0215デフォルトの名無しさん2011/10/30(日) 15:26:36.74
IBMの東京基礎研が頑張ってるとか聞いたような >JVM
0216デフォルトの名無しさん2011/10/30(日) 16:28:53.23
あそこは昔、所長がsmalltalkのVM屋だったことがある。
0217デフォルトの名無しさん2011/10/30(日) 18:11:11.18
VisualSmalltalkとかあったねぇ
0218デフォルトの名無しさん2011/10/30(日) 22:16:43.43
>>217
あれの発展系がVisualAgeJavaなんだよね、今再開しても十分魅力的だとおもうんだがだいぶ前にVA*系はとだえちゃったな

IBMって言語開発系のプロダクト凄くいいのに長続きしないの悲しいな
0219デフォルトの名無しさん2011/10/30(日) 23:29:33.54
>>218
Eclipseに引き継がれてる。
元々どの言語向けもsmalltalkで書かれていたのを、
組み込みJava用VisualAgeでJavaで書き換えたのが始まり。

>>216
http://www.bayspo.com/kurasu/kurasu8xx/kurasu807/807.html
0220デフォルトの名無しさん2011/11/04(金) 21:23:54.20
質問させてください。
簡単な言語処理系のようなもの(基本的な制御構造・関数・ローカル変数がある程度)を作っています。
速度を追求する必要がないので、構文木を直接、再帰的に評価しています。
この評価器を
0. suspend/resume できるようにしたい。
1. ファイル入出力などを非同期に行いたい。
ため、自前でスタック相当のものを用意して非再帰的な形に書き換えられれば、と思っています。
単純な木のトラバースなら非再帰の形に書き換えられるのは理解しているのですが、
構文木の評価を非再帰的に行おうとすると、中間コードを吐く以外の方法が思いつきません。
用途的に中間コードを吐くのはちと大げさなので、もし構文木を非再帰的に評価する
良い方法がありましたら教えてください。
0221デフォルトの名無しさん2011/11/04(金) 21:29:51.72
中田先生の本に、確かLLパーサを非再帰的に構成する手法の解説があったと思うけど
0222デフォルトの名無しさん2011/11/04(金) 21:46:52.93
>>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(...) ...
....
}
}

こんな感じでできるんですが、この木を非再帰的に評価する方法が分からんです。
0223デフォルトの名無しさん2011/11/04(金) 21:57:38.55
再帰なんて自分でスタックフレーム作って地道に積むだけだろ?
中間コード吐けない事情があるなら同情するけど
0224デフォルトの名無しさん2011/11/04(金) 22:11:47.58
諸々のLR法なら上向き解析の効率的な手法はかなり研究されているし、解析のための前準備の方法も効率的に行えるんだけど
LLはよく分からないっていうか>>223が言っている通りなんじゃないかな。
0225デフォルトの名無しさん2011/11/04(金) 22:16:59.73
>>223
if 文とかがあって動的に評価されるかされないか決まる場合を考えてください。
条件の値を評価してからどっちを積むか決めなければいけないので、再帰しない条件だと、
stack.push( stmt.cond );
stack.push( new IfStmtEvaluator( stmt.then, stmt.elze ) ); // なんか if 文を実行する特殊な値を積む。
こんな感じにしないといけない。この「特殊な値」が増えてくると事実上中間コードを吐いているような状態
になってしまうのです。
0226デフォルトの名無しさん2011/11/04(金) 22:19:37.66
あ、上のコード、スタックに積む順序が逆でした。すいません。
0227デフォルトの名無しさん2011/11/04(金) 22:56:14.75
質問文が異常に分かりにくいですね…。ゆとりですいません。
単純に
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() );
  }
 }
}
こんな感じのコードしか思いつかないんです。
0228デフォルトの名無しさん2011/11/05(土) 00:22:23.31
>この「特殊な値」が増えてくると事実上中間コードを吐いているような状態になってしまうのです。
はい。それしか方法はありません。
0229デフォルトの名無しさん2011/11/05(土) 01:02:38.12
なぜ中間コードを使いたくないのか分からん
かえって大げさになるだけだと思うが

携帯か組み込み用途か?
0230デフォルトの名無しさん2011/11/05(土) 02:08:31.61
再帰パーサをCPS変換してみたら幸せになれるかも
0231デフォルトの名無しさん2011/11/05(土) 14:56:22.23
> はい。それしか方法はありません。
うーん。そうですか。もしかしたら何か賢いテクニックがあるかと思ったんですが。

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

> 再帰パーサをCPS変換してみたら幸せになれるかも
CPS に変換して末尾関数呼び出しをループに置き換えると >>227 と同じような感じになりませんか?
あとでもう少し考えてみます。
0232デフォルトの名無しさん2011/11/06(日) 00:19:06.20
スタック毎保存したら?
0233デフォルトの名無しさん2011/11/06(日) 02:19:42.20
スレッドにしちゃって、フラグを見たり一定時間経過でスリープに移行とかどうよ?
0234デフォルトの名無しさん2011/11/08(火) 03:14:01.16

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

ttp://www.txl.ca/nabouttxl.html
0235デフォルトの名無しさん2011/11/09(水) 08:41:25.58
面白いな
0236デフォルトの名無しさん2011/11/09(水) 12:20:50.43
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
0237デフォルトの名無しさん2011/11/11(金) 23:45:31.66
だれかxtextで簡単な言語を実装してみてよ
0238デフォルトの名無しさん2011/11/15(火) 13:46:44.45
正規表現で*を連続で2回以上つけることは文法的に無意味だけれど
禁止してはいけませんよね?
0239デフォルトの名無しさん2011/11/15(火) 14:02:02.44
アホなユーザーにも判るようにエラーにするべき
無意味なことを許してはいけない
0240デフォルトの名無しさん2011/11/15(火) 14:51:00.68
>>238
意味は全く無いが処理コストは食うね
>>239
0回以上の繰り返しだから文法的にも間違ってはいないと思うが、エラー処理には賛成する
0241デフォルトの名無しさん2011/11/15(火) 14:55:11.49
でも人間ならまだしも機械的に作られた正規文法にその形が無いことが保証されているんですか?
0242デフォルトの名無しさん2011/11/15(火) 15:39:52.21
複数のパターンから合成する際に
(a*)* みたいになることはあるね
0243デフォルトの名無しさん2011/11/15(火) 17:14:54.02
文法内で設計思想の整合性がないとおかしいよな
>>239のノリでエラーにすると(((a)))も文法的に無意味だから禁止になっちゃう

効率と柔軟さのバランス次第だね
0244デフォルトの名無しさん2011/11/15(火) 23:37:11.33
あのなあ、機械的に生成したなら正規化するだろ普通の頭なら
>>243のようなアホがいるから仕事が増える
0245デフォルトの名無しさん2011/11/16(水) 08:29:34.78
A = a*, AA = A* のような定義から機械的に生成してるとして、
どうやって機械的に正規化できるのかな?
ヒューリスティックでルールをいくつか適用することはできると思うが。
0246デフォルトの名無しさん2011/11/16(水) 23:17:07.79
決定的にするんだろ
問題ない
出来ないなら適用する文法見直し
0247デフォルトの名無しさん2011/11/17(木) 13:13:33.15
構文解析されるデータを作るのが人ならa**とか((a))は許した方がいい
構文解析されるデータを作るのがプログラムならa**とか((a))は許さなくてもいい
0248デフォルトの名無しさん2011/11/17(木) 18:40:22.35
そうだな。
0249デフォルトの名無しさん2011/11/18(金) 00:10:30.47
せやな
0250デフォルトの名無しさん2011/11/18(金) 13:01:36.04
構文解析されるデータを作るのがプログラムなら
a**とか((a))はどう出力されるのか仕様を確認だな
0251デフォルトの名無しさん2011/11/18(金) 15:11:51.22
LL(1)では((a))を許さない方が難しいな。
a**の場合はa**の形が出てこなければそう処理は変わらないな。
よってa**は許可した方がいいな。
0252デフォルトの名無しさん2011/11/18(金) 16:31:10.30
構文論と意味論はごっちゃにしないほうがいいと思うんだけど
0253デフォルトの名無しさん2011/11/18(金) 17:13:07.07
せやな
0254デフォルトの名無しさん2011/11/18(金) 17:13:27.33
よいよいそれにしとけ
0255デフォルトの名無しさん2011/11/18(金) 17:19:58.75
せやろうか?
0256デフォルトの名無しさん2011/11/19(土) 01:14:12.51
そこは

  もち論

と返すところだべ
0257デフォルトの名無しさん2011/11/24(木) 12:43:06.51
そういうこと書くとスレが止まるからヤメロ
0258デフォルトの名無しさん2011/12/21(水) 22:29:20.34
なんかスレ立ってるけど、立てるならせめて「パーサジェネレータ」って名前で立てろよ。
というわけで一旦放置して落とせ。
0259デフォルトの名無しさん2011/12/22(木) 23:18:26.57
http://www.oreilly.co.jp/books/9784873115320/

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

でも買わなかった
0260デフォルトの名無しさん2011/12/23(金) 11:15:26.68
中田 育男って
日本のコンパイラの本書いた有名なやつだな。
0261デフォルトの名無しさん2011/12/23(金) 16:32:46.04
ヒエログリフか。動物ですら無いな
ってかオライリーの本って特定のプログラム言語を扱うときだけ動物表紙なんだな
0262デフォルトの名無しさん2011/12/23(金) 17:22:52.54
もともと言語実装パターンの原書はオライリーではなくPragmatic Bookshelfから出てる
原書のヒエログリフはカラーなのに紫と黒の二色刷りにしてくるあたりやらしい
あとプログラミング言語でなくても動物表紙なのはいっぱいあるよ
0263デフォルトの名無しさん2011/12/28(水) 01:09:25.83
>>260
RubyのMatzは大学生のころ中田先生の研究室だったんでしょ。そのことが「推薦のことば」に
書いてある。

年末年始休みにこれ読んで1つくらいおれおれ言語つくってみっかな。
0264デフォルトの名無しさん2011/12/28(水) 01:45:23.25
matzくすなんかどうでもいいよ
0265デフォルトの名無しさん2011/12/28(水) 09:14:34.62
だれか言語実装バターンを試してみるブログ書かない?
0266デフォルトの名無しさん2011/12/28(水) 11:38:03.70
言い出しっぺの法則
0267デフォルトの名無しさん2011/12/29(木) 02:03:51.77
「じゃあ、俺やるよ」ノシ
0268デフォルトの名無しさん2011/12/29(木) 08:20:42.91
「いやいや、俺が俺が」ノシ
0269デフォルトの名無しさん2011/12/29(木) 12:54:44.87
「いやいやいや、俺が俺が俺が」ノシ
0270デフォルトの名無しさん2011/12/29(木) 13:06:51.65
「「どうぞどうぞ」」
0271デフォルトの名無しさん2011/12/29(木) 13:58:21.74
>>269
どうぞどうぞw
0272デフォルトの名無しさん2011/12/30(金) 16:54:37.48
C++のコンパイラの場合、作る側すら、仕様の全貌を理解しきれていない
ようだ。
0273デフォルトの名無しさん2011/12/31(土) 20:56:32.48
Cなどは実装が先で仕様というか規格が後から追っていた歴史もなくはない
0274デフォルトの名無しさん2011/12/31(土) 21:12:00.01
>>135
> a * b; // 掛け算ですか? いいえ、変数宣言です

名前空間の違いで判断できるから、
名前空間に対応したbison作ればいいんでは。
名前空間での切り分けってほとんどの言語で使ってるでしょ。
C言語でもtypedefで同じ式になるし。
0275デフォルトの名無しさん2011/12/31(土) 21:12:17.91
実装が先で仕様が後という意味では、JavaScriptやRubyなんかも同じだね
0276デフォルトの名無しさん2011/12/31(土) 21:29:09.43
いやいやいや、
実装して使う人が増えたから規格で仕様を統一したんでしょw
規格が先なんてありえないっての
0277デフォルトの名無しさん2011/12/31(土) 21:34:45.28
その昔、Adaという言語があって .....
0278デフォルトの名無しさん2011/12/31(土) 21:49:14.64
EiffeleとかModula-3とか
0279デフォルトの名無しさん2011/12/31(土) 22:35:12.71
lispとかaplとかコンピュータプログラミング用じゃなかったし
0280デフォルトの名無しさん2012/01/01(日) 05:46:44.64
それは嘘
0281デフォルトの名無しさん2012/01/03(火) 12:44:39.85
>>274
flexがやってます。
identifier, keyword, typenameをtable lookupで区別してる。
0282デフォルトの名無しさん2012/01/03(火) 12:48:55.73
Adaと一緒で、PL/1も規格先行じゃなかったか。
Iswim, FPは実装は計画されてなかった。

>>278
Eiffel
0283デフォルトの名無しさん2012/01/03(火) 13:06:08.78
G-machineとかlamda式を日本語で説明してる書籍ってないですかね
0284デフォルトの名無しさん2012/01/03(火) 14:48:57.34
http://www.jaist.ac.jp/~kiyoshiy/writing/gmachine.pdf
0285デフォルトの名無しさん2012/01/03(火) 15:33:53.61
>>284
ありがと。でもそれはもう見たけど分かりづらいので別のを探してるんだわ
0286デフォルトの名無しさん2012/01/03(火) 16:45:04.68
>>285
君が既に見た分かりづらいのを列挙してくれないか?
0287デフォルトの名無しさん2012/01/03(火) 16:54:15.30
こんな丁寧なのが分からないのだと、読む方に問題があると言わざるを得ない。
もっと基本的なところから勉強した方が良さそう。
0288デフォルトの名無しさん2012/01/03(火) 16:55:39.37
>>284を分かりづらいと感じて&技術系英語読解すらNGじゃ、まるでダメポ
背伸びする前に基本を勉強した方がいいと思われ
0289デフォルトの名無しさん2012/01/03(火) 17:13:37.90
http://www.amazon.co.jp/dp/4320024931/
かなり古い本だけどこの辺から勉強するといいと思う。
G-machineは載ってないけど、この本の関数型言語処理系の仕組みを
基本的なところから解説している日本語の本は殆ど無いので。
理論寄りならλ計算の本はたくさんあるが。
0290デフォルトの名無しさん2012/01/03(火) 19:43:46.25
>>259
「言語実装パターン」(Laguage Implementation Patterns)はでたけど
「DSL in Action」と「Domain Specific Languages」(Martin Fowler)の翻訳ってでないのかなあ?
0291デフォルトの名無しさん2012/01/09(月) 17:59:02.48
>>276
多くのesolangは規格(というかネタ)先行な気もする
0292デフォルトの名無しさん2012/01/17(火) 00:03:18.76
RPGを作るために、自作のスクリプト言語を
作ろうと思うんですけど、それほど大規模な物じゃなければ
yaccやlexを使わずに作っても、それほど大変じゃなく
作れそうですか?

それともやっぱり、yaccやlexを使わずに全部自前で
作るとなると、小規模の物でも大変ですかね?
0293デフォルトの名無しさん2012/01/17(火) 00:14:24.19
>>292
まあやってみればいいんじゃね?
あまり勧めはしないけど
0294デフォルトの名無しさん2012/01/17(火) 00:19:23.88
>292
構文解析しない言語がお勧め。
LispとかForthとか。
0295デフォルトの名無しさん2012/01/17(火) 00:29:56.98
小規模大規模ってのはなにのことを言ってるの?
構文と関係あることなの?
0296デフォルトの名無しさん2012/01/17(火) 01:30:38.38
手書きパーサならLL(1)でいいんじゃね
LALR(1)なら小規模な文法入力であっても状態数がSLR(1)と同じになるからやってられんよ。
それでも正準LR(1)に比べると圧倒的に少ないけど。
0297デフォルトの名無しさん2012/01/17(火) 22:06:07.27
クラッシュ・バンディクーのシナリオは
LISPで書かれてたとかネットで見たような気がする
0298デフォルトの名無しさん2012/01/17(火) 23:10:04.19
マーク・サーニーだっけ?
俺はクラッシュバンディクー1はフルアセンブリだったって聞いたけど。
0299デフォルトの名無しさん2012/01/18(水) 00:23:34.50
これのこと?
ttp://otsune.tumblr.com/post/72504819/naughty-dog-lisp
元サイトだとURL長すぎるのでTumblrからでスマン。
0300デフォルトの名無しさん2012/01/18(水) 02:20:52.65
URL短縮使え。
今ならリダイレクト先確認できる短縮サービスが沢山ある。
あとotsune死ね。
0301デフォルトの名無しさん2012/01/18(水) 04:11:09.65
はい。リダイレクト先を確認するならURLの末尾に+を付けてね。
ttp://bit.ly/wDhQVh
0302デフォルトの名無しさん2012/02/10(金) 15:41:05.46
hoshu
0303デフォルトの名無しさん2012/02/11(土) 20:49:13.36
1.「2週間でできる! スクリプト言語の作り方」 技術評論社
2.「明快入門 インタプリタ開発」 ソフトバンククリエイティブ
3.「言語実装パターン」 オライリージャパン

おまえらもう読んだ?
0304デフォルトの名無しさん2012/02/12(日) 00:45:44.36
>>292
PEGが楽。yaccとかlexとか分かりづらすぎconflictとか意味分からん
一方PEGは人間でも順を追って解析できるし、表現できる集合も大きい

自前で書いても結局PEGみたいなことをすることになる。
関数から関数を呼んでっていう
0305デフォルトの名無しさん2012/02/12(日) 07:20:16.17
その説明だとLL(1)の再帰降下とPEGとの違いがわからんぞw

PEGはpackratで実装することで本領を発揮するんだから。
0306デフォルトの名無しさん2012/02/12(日) 15:01:30.88
>>303
本は雑食なんでなんでも買ったり図書館行ったりするけど3はともかく1,2はおもちゃだったぞ

0307デフォルトの名無しさん2012/02/15(水) 03:17:06.15
delphi用のpegパーサ前に作ったのうpしよっかな

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

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

あとPEGの記述自体がパーサーになるわけだけど、論理的に最適化の余地があったりするんだよな
そういうの考えたけどやってないな
0308デフォルトの名無しさん2012/02/15(水) 03:18:50.11
そういえば、次の一文字を見て飛ぶ関数をテーブルで持っておくとか考えたな
思い出してきた
0309デフォルトの名無しさん2012/02/19(日) 16:24:34.56
同じ会社のエンジンオイルで5W30と10W30があることがありますが、 
10W30を選ぶ利点は何かありますか?
0310デフォルトの名無しさん2012/02/21(火) 13:29:34.84
スレタイ末尾の「エンジン」だけ見てここに決めたのか
0311デフォルトの名無しさん2012/02/21(火) 17:08:28.32
>>310
単なる誤爆かと思ったわ。
0312デフォルトの名無しさん2012/03/01(木) 16:41:06.36
javacc使ってる人みないね。なんで?
0313デフォルトの名無しさん2012/03/04(日) 10:30:27.72
コンパイラ系の良書はあるけど
インタプリタ系でそういうのってないのだろうか?
0314デフォルトの名無しさん2012/03/05(月) 11:52:49.19
コンパイラの良書の参考文献でもみたら?
0315デフォルトの名無しさん2012/03/05(月) 21:16:44.51
>>313
機械語に落とさないで実行すりゃいいだけじゃないの?
コンパイラ系の良書って構文解析からオプティマイズまで入ってるから基本は網羅されてるし
モダンなインタプリタ処理系は内部がVMだったりするから見かけ上インタプリタに見えるだけでやってることはコンパイラ処理系とかわらんよ。
0316デフォルトの名無しさん2012/03/05(月) 21:44:14.74
SICP
0317デフォルトの名無しさん2012/03/05(月) 21:45:45.97
スレッデッドコードについてのちゃんとした説明とか
あんまり見かけないんだよな
0318デフォルトの名無しさん2012/03/05(月) 22:25:56.12
>>317
古いforthの本とかなら載ってると思う
0319デフォルトの名無しさん2012/03/05(月) 23:56:53.49
スレデッドコードって C で書けないせいか、あまり使われないね。
GCC とかだったら

goto *ip++;

とかできるんだけど。
0320デフォルトの名無しさん2012/03/06(火) 00:17:34.51
↑インダイレクト・スレデッドコードね。

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

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

でいいよね。
0321デフォルトの名無しさん2012/03/06(火) 00:32:44.03
確かウェブページにあったんだが...
ダイレクト、インダイレクト、もう一種類なんだっけ。
0322デフォルトの名無しさん2012/03/06(火) 00:47:41.16
サブルーチン・スレッディングかな?
単にサブルーチン呼び出しに展開する簡単な Forth コンパイラとかで使われてたね。

http://en.wikipedia.org/wiki/Threaded_code
0323デフォルトの名無しさん2012/03/06(火) 09:07:56.97
void *なポインタは++できないから、void **とかにしてキャストするのが常道
0324デフォルトの名無しさん2012/03/08(木) 17:22:33.78
Luaみたいな組み込み言語作ってる。
BNFも抽象構文木もわからず力押しでやってきたけど
なんとかトークン分割と文脈チェック・解析までできた。

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

無理だったら諦めて他言語のソース吐く。
0325デフォルトの名無しさん2012/03/08(木) 17:25:53.63
>>324
マイ言語作ってみたいと思ってる口だけど、そもそも入り口の言語仕様をどうやって考えたか聞かせて
0326デフォルトの名無しさん2012/03/08(木) 17:34:01.84
昔の処理系はワンパス(ないし少ないパス数)で頑張ろうといろいろやったわけで、
教科書見るとそういう話がいろいろあるけど、今時ならデータ構造を持って、
何パスでも走らせてかまわないのが普通よね。

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

と、一応書いてみたけど、BNFも抽象構文木もわからんとすると、
if (...) {
 if (...) {
 } else {
 }
} else {
 if (...) {
 } else {
 }
}
みたいなネストをちゃんと処理できてる?
0327デフォルトの名無しさん2012/03/08(木) 18:54:58.49
>>325
実用性とか考えてなくて、とりあえずなんでもいいから
Javaから文法削ったようなものが動けばいいと思ってる。

>>326
ネストは速度とメモリ犠牲に段階分ければ簡単。
バイトコードは時間かけて作れなかったら嫌だから
BCELとかツールでjvmとか.netを生成してもらおうと思う。
0328デフォルトの名無しさん2012/03/08(木) 18:58:39.75
peg方式はマジで分かりやすい。言語が設計しやすい
0329デフォルトの名無しさん2012/03/08(木) 19:54:23.77
PEG難しくて理解できない

世界一簡単に説明してるサイトない?
もちろん日本語で
0330デフォルトの名無しさん2012/03/08(木) 20:06:38.22
日本語で&世界一、てのはすごい注文だなw
0331デフォルトの名無しさん2012/03/08(木) 22:52:31.94
>>327
バイトコードはある物使ったほうがてっとり早いね。
遅くてもいいならフロントエンド程の手間も掛からないけれど。
jvm や .net のエンジンの性能はほとんど芸術品だよ。
0332デフォルトの名無しさん2012/03/09(金) 00:02:15.46
LALR(1)一筋でやってきた老害の俺から言わせてみればPEGは敵性構文クラス。
0333デフォルトの名無しさん2012/03/09(金) 01:13:11.15
>>331
遅い、か。ゲームエンジンで使いたい人などは
LUAのように以下の条件を満たす必要があるもんね。

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

でも自分は動けばなんでもいいから、
簡単ツールに頼ってバイトコードの知識0で作る方法を選ぶよ。
0334デフォルトの名無しさん2012/03/09(金) 01:48:17.81
>>333
ちょうど >322 で出てるスレデッド・コードの wikipedia の解説には
インタプリタの核となる内部ループの実装が一通り載ってる。
後はスタック・マシンにするかレジスタ・マシンにするかだけれど
スタック・マシンなら半日で骨組みは書けるんじゃないかな。
0335デフォルトの名無しさん2012/03/09(金) 01:49:34.93
あ、逆に自分で書かずに流用するって話か。
0336デフォルトの名無しさん2012/03/09(金) 09:15:59.95
LALR(1)を積極的に選ぶ理由って、yaccがあるから、以外に特にないと思うけどな。

CFGとPEGの比較ということなら、CFGでは曖昧な文法ということになるようなものが、
PEGでは全部許されちゃうのが嫌ってのはあるかもしれないけど。
0337デフォルトの名無しさん2012/03/09(金) 12:56:59.71
別にyaccでなくとも自力でLALR(1)パーサジェネレータ書ければいいと思うけど。
そこまで理解が及んでいれば、何も困る事はないしPEG使うのだったらCFGに対する正確な理解も必要。
PEGは確かに行き当たりばったりで小さな言語を作るのには向いているかもしれないけど左再帰ができないし、
「終端記号や非終端記号の集合」としての非終端記号を構築するに当たってCFGはそこが「素朴な」集合で論理的に整理されているのに対して
PEGは「順々にマッチするかを試す」辺りが「純粋な」集合ではない。
だから人間の記述ミスに起因する構文を書いてしまった時、CFGはちゃんとエラーを出してくれるのに対してPEGはacceptされてしまう。
構文は大きくなればなる程シビアになっていくから、機械的にエラーを吐いてくれた方が人間の側としては嬉しい。
よってPEGは最初から完璧に構文が出来上がっている場合(更にCFGでいう左再帰も人間の手で予め左再帰でない構文に直しておく必要がある)に採用するべきで、
それ以外の比較的規模の大きな言語はCFGを採用するべき。
0338デフォルトの名無しさん2012/03/09(金) 13:13:07.81
>LALR(1)を積極的に選ぶ理由
ドラゴンブックに「SLRとオートマトン数が同じで表現能力がLRよりは低いけどLLよりは高いからお勧め」って書いてあったから
0339デフォルトの名無しさん2012/03/09(金) 20:15:22.52
> 表現能力がLRよりは低いけどLLよりは高いから
当時は, LL から自動生成する理論的根拠が薄弱だっただけだと思う
0340デフォルトの名無しさん2012/03/09(金) 21:48:23.71
LLは自動生成というより、簡単に表駆動できるから、特に理論とか広がらなかったんじゃない?
表駆動でなければ普通に再帰降下するだけだし、左再帰の除去とかはすぐに理論が確立しちゃったし。
0341デフォルトの名無しさん2012/03/12(月) 00:16:33.08
アノテーション、複数の戻り値、例外とか
修飾子増えると一行にかなり詰め込む事になるよね。

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");
}
0342デフォルトの名無しさん2012/03/24(土) 11:22:52.78
構文解析器のようなもの作ってる人に聞きたいんだけど
データ構造って自分で作ってる?
それともライブラリーのやつ使ってる?
俺は全部作りたいからテンプレートで標準ライブラリーのやつを使ってはじめに作って
あとで自作に戻すつもりだったけれど、
インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
テンプレートを使わずに0からまた作ることに決定しました。
0343デフォルトの名無しさん2012/03/24(土) 11:26:44.53
C++使ってるけどstdのvectorとかmapとかannoodaado_mapは使ってるな。
それ以外は特に使ってない。
STLと同じかそれ以上の速度で完璧に書けるなら車輪の再発明してもいいんじゃね。
0344デフォルトの名無しさん2012/03/24(土) 13:21:28.67
自分の興味が何処にあるかによるんじゃね?
実装すること自体や性能に興味があるなら自作するだろうし、
とにかく言語をパーズして役立てたいなら有り物使うし。
0345デフォルトの名無しさん2012/03/24(土) 14:00:24.16
>インターフェイスを標準のにあわせないといけないからそこで効率の悪さが発生しそうなので
まずC++の規格書を読んでポリシーを頭に叩き込まないとな。
0346デフォルトの名無しさん2012/03/24(土) 14:42:52.09
>>342の言ってるテンプレートって、
C++のtemplateなのか?
0347デフォルトの名無しさん2012/03/24(土) 14:46:27.09
STL のことだと思われ
0348デフォルトの名無しさん2012/03/24(土) 14:47:46.41
>>342が何をやりたいのかよくわからんけど、
既にあるものを使わないのは効率が悪いと思う
0349デフォルトの名無しさん2012/03/24(土) 15:09:17.66
template<typename Set=std::set<int>>
としておいて後から変えるということだろう。
0350デフォルトの名無しさん2012/03/24(土) 15:37:43.96
そこまで動作効率気にするならアセンブリで書けと
0351デフォルトの名無しさん2012/03/24(土) 19:18:33.66
いまどきアセンブリで書くよりコンパイラ様に最適化任せてしまったほうが巨大なプログラムでも高速化できるし。
0352デフォルトの名無しさん2012/03/24(土) 19:23:00.08
STLに合わせるコストと、自前で用意するコストを比較して
少ないほうを取るだけやな
趣味なら好きなほうでいいけど、こっちは仕事で書いてんねん
0353デフォルトの名無しさん2012/03/24(土) 19:24:46.06
Visual C++とかIntel C++の吐くアセンブラ見てみ
適わないって思うわ
特に浮動小数点をやらせたら、fadd fxch fmul・・・・って人間技では無理やからwww

局所的なやつとか、アルゴリズム的に特別な命令使うと速くなるやつとかは別な
0354デフォルトの名無しさん2012/03/24(土) 19:33:50.40
>>343
unorderedな。
0355デフォルトの名無しさん2012/03/24(土) 19:39:03.73
浮動小数点まわりの設計は元々ちょっと無理があっただけに、かえって芸術品になるのかw
0356デフォルトの名無しさん2012/03/25(日) 01:25:28.76
人間が優位になりうるのは、ソースコードから読み取れる以上の
情報をプログラマが持ってる場合
別名とかが絡むとコンパイラは最適化を保守的にやらざるを得ない
0357片山博文MZボット ◆0lBZNi.Q7evd 2012/04/01(日) 15:34:29.36
RubyスクリプトをC言語に翻訳することできますか?
0358営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:38:43.34
Rubyってevalあったっけ?
無理そう。
0359営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:39:09.46
なんだこの名前欄ww
0360営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 15:44:37.72
Shed Skin(Python to C++)とかあるよね。制限つきらしいけど
0361営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 19:08:16.35
C++にevalを実装する変態もいるくらいだからどうにかなるんじゃないか?
0362営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 21:10:22.83
新しい言語を作るのとほとんど同じくらいの手間がかかるんじゃね?
0363営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 07:49:42.21
>>329
http://d.hatena.ne.jp/kmizushima/searchdiary?of=10&word=peg
0364片山博文MZボット ◆0lBZNi.Q7evd 2012/04/02(月) 14:26:30.20
Ruby拡張ライブラリを作るような感じかな。。。
IRBにRubyLexがあるから、それを利用してできるかも。
0365営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 16:25:16.75
pythonはpypyみたいなよく維持されているメタ処理系の参照実装があるから、
そういう実験もしやすいだろうね。Shed Skinはまったくpypy使ってないとはいえ。
0366営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 14:24:47.28
https://github.com/inakata/ruby_scala
0367営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 17:58:39.13
lexとyaccは、自作しなくとも、フリーで転がっているので助かるな。
0368営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 18:31:05.54
>>363
なかなか素晴らしいサイトだが、すまんけどもっと分かりやすく
説明してるサイト無いか?w

いや、そのサイトも凄い分かりやすいけどねコードとか
0369営利利用に関するLR審議中@詳細は自治スレへ2012/04/05(木) 18:47:04.07
正規表現に似たパターンとその適用順序を定義して
順々にマッチングしていくだけ
0370営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 11:49:43.80
>>368
http://d.hatena.ne.jp/kmizushima/20100203/1265183754
0371営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 12:02:14.70
pdos.csail.mit.edu/papers/parsing%3Apopl04.pdf

原文読むのが一番楽。英語の壁はあるんだけど
0372営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 15:18:31.06
Bryan Fordさんの論文で、MITの修士論文の奴が、ボリュームがすごくあるので一見して
尻込みしがちだが、実は丁寧に書いてあって、一番すらすら読めると思う。
0373営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 18:50:21.99
ちょっとスレ違いと言うかスレずれな気がするけど、自分で新しい言語を生み出すにはどんな本かサイトを見て勉強すればよいのか、お勧めない?
それとも「えい・やっ」で、これまでに知ってる言語からあとは思いつきでやるものなのかな?
OSの一般理論みたいに、プログラミング言語とはこういうものだ、みたいな考え方を知りたい。
0374営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 19:28:12.92
今だとドラゴンブックかタイガーブック(ML)で各構文クラスを学習するのが一般論なんじゃない?
少なくとも自分はそういう道筋を辿っている。
あと最適化だったら中田本を当たった。
0375営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 19:46:54.97
ちゃんとやるなら数学の話になってくるな
工学部って消費者。数学者からすればザコ
0376営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 20:01:07.57
チューリングマシンで終了だな。
0377営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 20:43:12.01
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系工学部は文系
0378営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 20:53:55.38
数学は物理学の端女
0379営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 20:59:11.70
mather
03803732012/04/07(土) 21:34:11.62
なんかあらぬ方向に飛んで行ってるけどw
とりあえずタイガーブックってのを見ようと思って尼に行ったら★2つだったorz
ドラゴンブックいっとくかw
0381営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 00:17:02.35
どんな言語を設計するかと、
それを言語処理系として実装する方法は違うんじゃないの

プログラミング言語のパラダイムの整理という点では
CTMCPが面白かった
0382営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 19:43:01.65
うん。ドラゴンブックで良いと思うよ。タイガーブックの日本語版誤植多いし、中身薄いし、ドラゴンブックなら二版が出てるし。
ただ、ドラゴンブックに出てる最適化を本腰を入れてしたいなら、中田本の二版を買ったほうが良いと思う。
力不足だから。
0383営利利用に関するLR審議中@詳細は自治スレへ2012/04/08(日) 21:39:02.23
シンプルなコードが欲しい人はタイガーがいいんじゃないか?
0384営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 00:00:32.10
お師匠様には2つを組み合わせると良いと教わった
フロントエンドはドラゴンで、最適化部分はタイガーで
0385営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 14:43:47.37
タイガーブックについてる★2は気にしないでいい
ただあの評価コメントも完全にハズレってわけでもなくて
1冊目に読む本じゃなかったってだけの話だ
0386営利利用に関するLR審議中@詳細は自治スレへ2012/04/10(火) 08:53:47.10
pegとLL(∞)と同じだよな。
0387片山博文MZボット ◆0lBZNi.Q7evd 2012/04/12(木) 17:01:24.68
Rubyコンパイルまだ?
0388デフォルトの名無しさん2012/04/12(木) 17:15:15.40
コンパイルって需要あんの?
スクリプト系が遅いのはライブラリを実行時に毎回読み込むから
でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理
0389片山博文MZボット ◆0lBZNi.Q7evd 2012/04/12(木) 17:28:27.86
>>388
少なくとも私にある。字句解析と構文解析をすっ飛ばせば
それなりに早くなると思うんだけどね。
0390デフォルトの名無しさん2012/04/12(木) 19:09:11.70
ついでに意味解析もすっ飛ばしちまえ
0391デフォルトの名無しさん2012/04/12(木) 22:49:19.75
>>388
> でもあいつらはガチのオブジェクト志向だから、それは本質的に必要な処理

具体的にどういうこと?
0392デフォルトの名無しさん2012/04/13(金) 00:17:14.20
ダイナミックリンクライブラリ:「…」
0393デフォルトの名無しさん2012/04/13(金) 08:45:43.79
クラス定義と、実行するコードの区別が無いってこと
クラス定義も"実行"しないといけない。コンパイルで速くなるかもしれんが
C++とかはクラス定義をプリ実行できちゃってるから、そこには大きい差があるなって
0394デフォルトの名無しさん2012/04/13(金) 08:56:48.84
まあ工夫すれば結構早くなるとは思うけどな
でもプロトタイプってどう最適化できるかな
0395デフォルトの名無しさん2012/04/13(金) 09:02:38.74
あれかCopy on writeをうまくやれば、"ほとんど"のケースでC++並みに早くできるか
Ruby好きだからちょっと考えてみよっかな

クラス定義のプリ実行だけは本質的に無理だろうけど
0396デフォルトの名無しさん2012/04/13(金) 09:03:30.25
それは動的な定義を許してるってだけの話。
オブジェクト志向とは直行してるし、
実行時構文解析も必要じゃない。
0397デフォルトの名無しさん2012/04/13(金) 09:15:32.85
確かに実行時構文解析は無駄。Ruby作ってる人が速くしようと思ってるなら
糞プログラマだな。多分そもそも速くする必要が無いと判断してるんだろうけど
0398デフォルトの名無しさん2012/04/13(金) 09:21:22.15
完全にトランスペアレントにできるならまだしも、コンパイル後をどこかにキャッシュしといて
それで"変な"バグが出たりするとストレス溜まるもんな
代償もでかい
0399デフォルトの名無しさん2012/04/13(金) 09:49:41.68
調べたらだいたいJRubyが考えてることやってるような気が
萎えた

こういうの見る限り、Javaに協力したほうが汎用性があって良さそう。
p.tl/K7Ld
invokedynamicの速い実装方法を考える
0400デフォルトの名無しさん2012/04/13(金) 09:57:21.94
その辺はJITなら問題ないんじゃないか。
それにLispは動的な言語なのに、昔からネィティブにコンパイルした
ライブラリのコードをプリロードした実行ファイルにしていたし。
0401デフォルトの名無しさん2012/04/13(金) 09:59:25.17
>>399
JavaやJavascriptは人的リソースが豊富だからねえ。
JVMもproper tail callをサポートすればもっと言語屋の利用が増えるだろうに。
0402デフォルトの名無しさん2012/04/13(金) 20:27:03.10
爆速で実装する方法思いついた。LLVMで作ってみよっと
perlだのphpだのぶっつぶしてRubyを主流にしたいってのもあるし
0403デフォルトの名無しさん2012/04/13(金) 21:07:19.63
有言実行
0404デフォルトの名無しさん2012/04/13(金) 23:23:15.31
三姉妹
0405デフォルトの名無しさん2012/04/14(土) 00:43:06.14
調べたらまっさらから書くのはつらそうだわ。本家の拡張でやる

"メソッドを動的にインラインバージョンにすりかえる"ってのをまずやってみる
vm_call0ってところを書き換えればいいらしい
0406デフォルトの名無しさん2012/04/14(土) 01:28:36.21
う〜ん、JNI?
0407デフォルトの名無しさん2012/04/14(土) 01:49:23.56
火が着いた

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

調べたところ古くはYARVってのが高速Rubyで、Ruby1.9で本家にマージされたらしいが
最適化ぬるいわwww。だから俺がここらで締めてやる
0408デフォルトの名無しさん2012/04/14(土) 08:38:18.29
最適化とか曖昧な話しは捨てて
関数のβ変換エイリアスを作ってくれや
0409デフォルトの名無しさん2012/04/14(土) 11:41:10.25
>>404
どんだけおっさんだよ
0410デフォルトの名無しさん2012/04/14(土) 18:24:15.06
>>407
Closedおつ
0411デフォルトの名無しさん2012/04/14(土) 18:30:40.59
閉めてやる
0412デフォルトの名無しさん2012/04/15(日) 06:22:26.33
ドラゴン本が届いたんだけど、これなんでこんな装丁なんだろうね。
小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
と思ったけど、英語版もこんななのか。
0413デフォルトの名無しさん2012/04/15(日) 10:07:07.66
着くなり製本に対する文句書き込みかよw
0414デフォルトの名無しさん2012/04/15(日) 10:09:16.01
>>413
そういうのは無視
0415デフォルトの名無しさん2012/04/15(日) 10:48:05.62
>>412
> 小説じゃないんだから、もう少し大きい紙で1頁でもっとたくさん字が載るようにしてくれた方が使いやすいのに。
英語版はそうなっている。
0416デフォルトの名無しさん2012/04/30(月) 17:38:37.42
hoshu
0417片山博文MZボット ◆0lBZNi.Q7evd 2012/05/03(木) 17:26:35.79
Rubyスクリプトコンパイラまだ?
0418デフォルトの名無しさん2012/05/08(火) 07:13:58.21
コンパイラ作るのによく使われる代数学の分野はなんですか?
0419デフォルトの名無しさん2012/05/08(火) 09:20:59.33
代数というか、従来(ドラゴン本とか)の定番ではオートマトン理論の解説に
力を入れるのが定番だったけど、ぶっちゃけコンパイラ作りというのは、
理学というより工学なので、代数学というのはそんなに大事じゃない。
0420デフォルトの名無しさん2012/05/08(火) 13:22:58.55
中田本「コンパイラの構成と最適化」が亜麻で「出品者からお求めいただけます。」になってたんだけど、もしかして絶版?
0421デフォルトの名無しさん2012/05/08(火) 13:36:23.19
新しい方?

新版が出たのに、旧版も刷られ続ける本というのは相当珍しいと思うけど。
0422デフォルトの名無しさん2012/05/08(火) 13:43:33.96
紫と白っぽい表紙の第2版の方だよ
0423デフォルトの名無しさん2012/05/08(火) 15:59:33.77
林晴比古のシリーズの本どうよ?
0424デフォルトの名無しさん2012/05/08(火) 16:05:06.24
林晴比古の本、としか言いようがない
0425デフォルトの名無しさん2012/05/08(火) 17:00:18.91
>>423
本屋でチラ見した程度ではそこそこ良かった
0426デフォルトの名無しさん2012/05/10(木) 18:06:27.94
iOS 用の静的 Ruby コンパイラ
http://www.infoq.com/jp/news/2012/05/RubyMotion
0427片山博文MZボット ◆0lBZNi.Q7evd 2012/05/14(月) 14:18:53.08
>>426 ちっ、有料かよ。
0428デフォルトの名無しさん2012/05/19(土) 21:52:56.35
自分自身を返す関数の型が書ける静的型言語ってあります?

ググってみたところ、Cでダメなのは有名な話らしく真っ先に出てきました。
OCamlもちょいと試した感じではなんかダメそう。
0429デフォルトの名無しさん2012/05/19(土) 22:28:18.79
>>428
自分自身とは何を指しますか?
0430デフォルトの名無しさん2012/05/19(土) 22:47:08.95
関数自身です。
Cで書くと(戻り値の型を書けないので仮にvoid*で代用したとして)
void *foo(int x) { return foo; }
みたいな。
OCamlで試したのは
let rec f x = f;;
とかです(エラーになりました)。
0431デフォルトの名無しさん2012/05/19(土) 23:19:57.33
関数自身を返す関数の戻り値の型は静的に決められるのかって話になるのかな。
0432デフォルトの名無しさん2012/05/19(土) 23:24:29.20
typedefを使わないのは何故?
0433デフォルトの名無しさん2012/05/19(土) 23:28:34.83
typedefでもできないからでは
0434デフォルトの名無しさん2012/05/19(土) 23:32:07.13
typedef foo (*foo)(int); とか書けてもいいと思うけど、通らないみたいね
0435デフォルトの名無しさん2012/05/20(日) 01:49:57.44
こういうこと?(自信無し)
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;
}
0436デフォルトの名無しさん2012/05/20(日) 17:15:57.85
それじゃダメ
0437デフォルトの名無しさん2012/05/22(火) 12:59:33.99
>>428-430
無理だと思う。仮にできたとしても、返された関数は循環するだけで使い道がない。
0438デフォルトの名無しさん2012/05/22(火) 13:36:13.28
Any型使えば万事OK
0439デフォルトの名無しさん2012/05/22(火) 22:14:58.64
使い道の有無と出来る出来ないは独立した話だろ
0440デフォルトの名無しさん2012/05/22(火) 22:17:46.33
意味的にどうかってことを考えないと
その関数の型と、返ってくる関数の型
これらは意味の上で同じなのかどうか

たまたま同じ形になってるだけじゃないのか
0441デフォルトの名無しさん2012/05/22(火) 22:29:53.52
なんかおかしなのが涌いてきた
0442デフォルトの名無しさん2012/05/22(火) 22:33:36.03
ある写像 f があって、f の定義域は {{}}、f の値域は {fのグラフ}。
ここで fのグラフは集合なん?
0443デフォルトの名無しさん2012/05/22(火) 22:44:44.86
唐突にグラフと言い出した当人が考えればよろし
0444デフォルトの名無しさん2012/05/22(火) 22:47:19.05
ここはプログラミングの中でも、コンパイラのスレ
そういう話出てきてしかるべきだろ
0445デフォルトの名無しさん2012/05/23(水) 22:25:09.01
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>
0446片山博文MZボット ◆0lBZNi.Q7evd 2012/05/30(水) 10:49:57.08
>>442
ここでグラフというのは、関数を特徴付ける集合であるから、集合。
http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95_(%E9%96%A2%E6%95%B0)
0447デフォルトの名無しさん2012/06/02(土) 18:56:09.37
>>6 のコンパイラ構成法のソース・正誤表のリンクが切れてるけど
ダウンロードできる場所しりませんか?
0448デフォルトの名無しさん2012/06/02(土) 19:11:47.93
webarchiveに残ってるんじゃね?
0449デフォルトの名無しさん2012/06/02(土) 19:31:49.11
>>447
http://akkera102.sakura.ne.jp/test/compiler.zip
0450デフォルトの名無しさん2012/06/02(土) 19:36:38.36
>>449
入手できました、ありがとうございました。
0451デフォルトの名無しさん2012/06/03(日) 00:16:39.09
>>445
この型推論ってどうやって解決してるんですか?
0452デフォルトの名無しさん2012/06/05(火) 15:00:21.11
出現検査ってなにをすることですか?
無限に再帰するのを発見するものですか?
0453デフォルトの名無しさん2012/06/05(火) 15:05:32.68
はい。
0454デフォルトの名無しさん2012/06/05(火) 15:08:27.01
>>453
どのようにやるかなんてことは教えてくれませんか?
0455デフォルトの名無しさん2012/06/14(木) 19:49:29.88
hoshu
0456デフォルトの名無しさん2012/06/14(木) 19:51:56.70
保守お疲れ様です (`・ω・´)ゞ
0457デフォルトの名無しさん2012/06/29(金) 10:45:27.52
LL(1)の構文木が右結合になってしまうんですけど
どうしたらいいですか?
たとえばa+b+cがa+(b+c)になるということです。
最後の文字から入力することを思いついたけど、
文字の長さが決まってないとき困ります。
0458デフォルトの名無しさん2012/06/29(金) 11:07:34.56
パーザが手書きなら自分でそう書けばいいし、
パーザジェネレータなら右結合に自然になるように文法を書けばいい。
0459デフォルトの名無しさん2012/06/29(金) 11:12:59.09
ありがとうございます。
終端記号ってアスキー文字が一文字無駄になるんで無くしたいんですけど、
アスキー文字に使われていない数とか使えばいいですか?
0460デフォルトの名無しさん2012/06/29(金) 13:20:50.40
そもそも曖昧性がなければ、
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 をそのまま実装すると無限ループに
なるから、左再帰の除去を適用する。
0461デフォルトの名無しさん2012/06/29(金) 18:54:39.82
yaccだとBNFとは別に結合規則指定だ。
0462デフォルトの名無しさん2012/06/29(金) 19:07:11.92
昔ここで話題になってたcaperっていうC++のLALR(1)パーサが吐けるパーサジェネレータを改良して
演算子の結合規則を指定する事によって曖昧さと衝突を避けられるようにしたんだけど
需要ある?
0463デフォルトの名無しさん2012/06/29(金) 20:50:02.81
caperの使い方から教えてもらえるなら需要あるorz
0464デフォルトの名無しさん2012/06/29(金) 21:03:01.42
残念ながら入力ファイルはcaperと互換ではありません。
ドキュメントがないので必要ならば今から書き始めますが…。
0465デフォルトの名無しさん2012/06/29(金) 21:41:23.93
ドキュメントが整ってないようじゃ流行らない

最近はPEG?が流行ってるんだっけ?
誰か教えてくれw
0466デフォルトの名無しさん2012/06/29(金) 22:15:40.06
caperはC#も吐けるから個人的に良いなと思ってるんだけど
ドキュメントにもサンプルにも、定義ファイル内でのコメントの書き方が載ってなくて
(結局//でいけたけど)
そういうあたりが色々惜しいなぁって感じるわ
0467デフォルトの名無しさん2012/06/29(金) 22:36:11.44
しょうがないから今からドキュメント書きますね。
githubのマークダウン形式になるのですぐに終わると思いますが如何せん眠いのでどうだか分かりません。
0468デフォルトの名無しさん2012/06/30(土) 00:04:15.64
眠くて変な文章になってるけど許して。
ttps://github.com/uwanosora/kp19pp

boostの使える環境でmain.cppをコンパイルすると実行ファイルができあがる。
とりあえず書式の導入だけでも書き上げたけど、生成されたhppファイルの使い方はcaperとほとんど同じだから
そっちも見て脳内補間してくれるとありがたいです。
最後に、構文を受理させる場合は「token_0」をpostしてね。
暇があったらまた書きなおすよ。
0469デフォルトの名無しさん2012/06/30(土) 00:21:02.89
外人が書いた日本語みたいだな
0470デフォルトの名無しさん2012/06/30(土) 03:06:31.81
caperから派生したんなら、caperと何が違うか書かなきゃダメじゃね?
0471デフォルトの名無しさん2012/06/30(土) 03:12:00.39
何が違うかは>>462に書いてある通りだよ。
後は若干の高速化(漸近的には同じオーダー)。
それともリポジトリに何が違うかを書かないとダメってこと?
0472デフォルトの名無しさん2012/06/30(土) 03:21:32.02
うん、リポジトリに書いてあるほうがいいと思うの。
あなたと同じようにcaperに不満を持った人が、これを見つけられるように。
0473デフォルトの名無しさん2012/06/30(土) 08:33:22.04
PEGは、もうすでにいくつも実装がある、という段階なんだから、
なんでもいいから使ってみれ。
探せばたぶん、一般的なたいていの言語に実装があるから。
0474デフォルトの名無しさん2012/07/11(水) 20:49:45.24
PEGいいな
個人的にBNFより好きかも
0475デフォルトの名無しさん2012/07/12(木) 00:16:31.66
C++アプリケーションにスクリプトを搭載する際
C++のオブジェクトアクセスが楽なスクリプトエンジンってある?
その際スクリプトとして使う言語はJavascriptやPHPの様な
スクリプト用言語よりPerlやPython、Rubyみたいな汎用言語がよかです。
0476デフォルトの名無しさん2012/07/12(木) 00:24:32.95
>>475
Luaとか、今ならmrubyの人柱になるとか。
0477デフォルトの名無しさん2012/07/12(木) 09:51:01.32
オブジェクト指向はluaよりsquirrelのほうが、とか聞くけど
0478デフォルトの名無しさん2012/07/12(木) 17:33:47.12
>>474
PEGをBNFと比較するのは間違いです。
0479デフォルトの名無しさん2012/07/12(木) 18:07:56.57
PEGは不完全
0480デフォルトの名無しさん2012/07/12(木) 18:28:28.88
あなたの言う「完全」の定義は?
0481デフォルトの名無しさん2012/07/12(木) 22:19:12.25
C++のオブジェクトアクセスは、
スクリプトのランタイムもC++でないとまずい。
だから、LuaをC++でコンパイルしたものがおすすめ。
ちなみに、ビルド済みのバイナリでIDEに対応したやつは
たいていCでコンパイルしてるから要リビルド。

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

Cのランタイム上で動作するスクリプトなら
直接オブジェクトの参照でなく
IPC機能を使わないと互換性で難儀する。
0482デフォルトの名無しさん2012/07/12(木) 23:05:36.67
>>475
Krossどうよ?
en.wikipedia.org/wiki/Kross_(KDE)
0483デフォルトの名無しさん2012/07/13(金) 02:05:36.38
>>481
kwsk
いまいちC++でコンパイルし直さなければならない理由がわからない。
0484デフォルトの名無しさん2012/07/13(金) 02:19:39.65
>>478
Bryan FordさんのPOPLの論文でも
文脈自由文法との差異について頻繁に論じられていた気がするけど
0485デフォルトの名無しさん2012/07/13(金) 04:19:15.31
>C++のオブジェクトアクセスが楽なスクリプトエンジンってある?

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

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

汎用言語でバリバリ制御したいなら、なおのことC++でプラグイン形式にした方が良いだろう。
汎用言語の上に別の汎用言語を載せて、
上位層から下位層にフレキシブルにアクセスしたいってのは、いろいろ不毛に思える。
そもそもが意味無いっつーか。その割りに技術的に難題だらけっていう。
0486デフォルトの名無しさん2012/07/13(金) 06:56:14.46
そうか?boost::python使えばオブジェクト操作できるようだけど。

http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
0487デフォルトの名無しさん2012/07/13(金) 07:08:26.04
>>485
既にCOMってものが実現してるかならぁ
メンバー関数のポインターをラップしてテーブル化してアクセスしたり
仮想関数テーブル経由で操作するんなら処理系の壁はないぞ
0488デフォルトの名無しさん2012/07/13(金) 16:17:12.83
>仮想関数テーブル経由で操作するんなら処理系の壁はないぞ

実際には仮想関数テーブルの何番目の関数ポインタが、どういった
・名前になっているか
・戻り値と引数の型は何か
を、スクリプト言語側が知る必要がある。
ここが大きな壁。
0489デフォルトの名無しさん2012/07/13(金) 17:04:15.25
>>484
BNFと文脈自由文法は別のものです。
かたや記法、かたや文法。
0490デフォルトの名無しさん2012/07/13(金) 17:06:04.71
boost::pythonはすごくいいよ。Krossも。
>>475の質問の趣旨を全く理解してない人がいるね。
0491デフォルトの名無しさん2012/07/13(金) 18:08:21.50
COMみたいなメンドイもので時間浪費するより
スクリプトのソースがC++でビルドできるものを選んで
一緒にmakeするのがベストじゃん。
組み込み関数の作成にもboostとか使いたいしね。
0492デフォルトの名無しさん2012/07/13(金) 20:22:17.63
http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
これのどこが便利なんだか。
クラスのメソッドを全て手動で登録とか・・・。
C++からC++を呼び出すなら、全く必要のない手間だよ。
PythonからC++で作ったパーツを呼び出したいって需要なら分かるが、
その逆に、C++で作ったフレームワークをPythonから制御したいってのは
果たしてメリットあるのかねぇ。
C++もPythonも汎用言語だから同程度には複雑だし、
手動でコンバートを書かなくちゃならなかったり、速度面で不利だったり、
コンパイラの静的型チェックが死んだり、と、
何も良いことないように思えるが。
0493デフォルトの名無しさん2012/07/13(金) 20:47:38.02
webkitpyとかすでに使えるようになってるのがあるよん。
0494デフォルトの名無しさん2012/07/13(金) 22:19:01.50
PEGってどこが凄いのか分からん
だれか上手に教えてくれ orz
04954752012/07/13(金) 22:31:17.62
皆さん有り難うございました。
Krossとboost::pythonが気に入りました。
どの方法も直接C++のオブジェクトを操作ってのは難しそうですが
C++アプリの制御する分にはそれなりに楽に行けそうですね
0496デフォルトの名無しさん2012/07/15(日) 22:32:38.76
SWIG は?
Lua は C でコンパイルしてあっても extern "C" でヘッダを読み込めば問題ないよ。
0497デフォルトの名無しさん2012/07/15(日) 23:26:35.02
PL/SQLとかって文法的にどうなの?
データベースの使い方の事じゃなくて、プログラミング言語の文法として
0498デフォルトの名無しさん2012/07/16(月) 02:01:54.62
制約が大きすぎてカタコトすぎるw
その制約で最適化が効くわけだけどね。

んでも
互換性の問題がないのなら新規設計で
もっと素晴らしいものが作れるように思う。
0499デフォルトの名無しさん2012/07/16(月) 02:30:24.81
>>494
こういう言い方をすると怒られそうだが、
実用上はすげー強力な正規表現だと思っていい気がする
大きく違うのは非終端記号が使えることで、
例えば括弧対応の認識のような、正規表現じゃ書けないようなものも表現できる

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

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

その他いろいろあるけど
・選択オペレータ/が優先度付きなので、曖昧な文法が生じない
 文法をいじってたらいつの間にかシフト-還元競合みたいな事は起きない
・先読みが使える
・*は貪欲マッチを行う
0500デフォルトの名無しさん2012/07/16(月) 02:40:31.97
(" e ")
0501デフォルトの名無しさん2012/07/17(火) 02:56:59.59
組み込み用だと思っていた言語がどんどん汎用的になっていく流れについていけません!
0502デフォルトの名無しさん2012/07/17(火) 08:36:09.87
まさしくまさしく。汎用言語ならC++で間に合ってるわけで。
わざわざ組み込むのなら、出来ることに制限をかけたスクリプト的な物でなければ意味がない。
0503デフォルトの名無しさん2012/07/17(火) 20:54:44.77
VIMScript・PostScript・各種シェルスクリプト。確かに最初から
スクリプト前提に作られた言語は便利じゃあるが、
Blenderみたいに汎用言語でも十分な場合は多い。
わざわざ新しい言語エンジン作るだけ無駄だよ。

それから、わざわざ作業を自動化したいだけなのに
メモリーやら最適化やら気にしながら書くのも煩わしい。
ましてや、ホビーグラマー程度のユーザーに使わせるものに
聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。
0504デフォルトの名無しさん2012/07/17(火) 22:22:49.16
>>499
ありがとうございます
あとは処理形が安定してるかどうか、ですねぇ

どっかに言語処理形作るような仕事、ありませんかねぇ…
0505デフォルトの名無しさん2012/07/18(水) 09:54:43.80
>聖書バリのリファレンスが必要な言語を導入するなんてオーバースペックすぎる。

まさに組み込み用と思われてた言語がどんどん汎用化して、
ほとんどCやC++やJavaやC#と変わらなくなってきてるのが問題なわけだが。
汎用用途じゃC++とかJavaに勝てるわけ無いし、
そっちの方向を追い求めても空しいっつーか。
0506デフォルトの名無しさん2012/07/18(水) 20:06:21.76
汎用言語である必要はないけど、新たに言語エンジン作るのが手間だから
出来合いの汎用言語をスクリプトに使うんだろ。頭かてぇなぁ。
0507デフォルトの名無しさん2012/07/18(水) 21:14:47.83
汎用言語を組み込むぐらいなら、
元がC++ならC++のDLLを、元がJavaならjarを、
プラグイン的に読み込めるようにすれば良いだろ。
スクリプト言語側へクラスや関数を公開したり型変換を提供するための、特別なコードも必要ないし、
標準的な言語と環境だから利用者の幅も広いし枯れてるし、
開発環境もデバッガも強力だし、実行速度も速いし、良い事尽くめじゃないか。
「出来合いの汎用言語をスクリプトに使う」というところまで思考が及んでいるのに、
どうして、お手元の出来合いの汎用言語(C++やJava)で十分な事を見落としてしまうのか不思議だ
0508デフォルトの名無しさん2012/07/18(水) 22:04:14.54
もう、ユーザ自身にアプリ作らせろよwww
0509デフォルトの名無しさん2012/07/18(水) 23:16:59.63
イラストレーターやらモデラーやらDTPやってるやつに
開発環境の使用を求めるのかよ。
描画エフェクトの順番制御のためだけにEclipseやらVSインスコしろとかw
0510デフォルトの名無しさん2012/07/18(水) 23:35:26.32
範囲選択してスクリプト実行が指示されたら、
選択範囲の90度方向から40%の範囲にハイライト。
ハイライト完了後選択範囲全体にlog_[10]( 閾値 )でガウシアンぼかし。
数行で書けるコードのためにコンパイルとかパッケージ化とかやっとられんわ。
0511デフォルトの名無しさん2012/07/18(水) 23:52:37.14
それは違うな。
VSやEclipseを自分のソフトに組み込んで配布することが出来るなら、
それがベストのはずだ。
イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
本来必要なのは、C++やJavaのフリーライセンスでアプリから呼び出し可能な統合開発環境。
ブラウザで言うところのIEコンポーネントに相当するもの。
そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。
0512デフォルトの名無しさん2012/07/19(木) 07:31:55.25
Smalltalkか?

どう考えても大昔からあるものを、
「そういうものが出てきたら、組み込み用汎用スクリプト言語は、いよいよ死ぬ。(キリッ)」とかw
0513デフォルトの名無しさん2012/07/19(木) 12:46:52.46
昔C++のインタプリタなるものを見たことがあるが
誰か使ってるのだろうか
0514デフォルトの名無しさん2012/07/19(木) 14:54:50.38
>>511
>イラストレータやモデラーだって、しょぼいエディタでプログラム書きたくないわ。
そもそも絵描きの人たちがプログラムを書きたがるとは思えないんだが。
うちでもXSIのスクリプトは絵の人じゃなくてプログラマの人が書いてるよ。
0515デフォルトの名無しさん2012/07/19(木) 21:12:11.25
Objective Cのインタプリタは少し使ったことある。
まだNeXT健在の頃の話ね
0516デフォルトの名無しさん2012/07/20(金) 10:39:59.81
その辺の雑談はこのスレでやれば?

2011年のプログラミング言語シェア、Objective-Cが増加率1位…総合ではC#が3位・Objective-Cは5位
http://kohada.2ch.net/test/read.cgi/pcnews/1326714846/
0517デフォルトの名無しさん2012/07/20(金) 16:56:59.22
>>511
大は小を兼ねるってのは迷信
無駄な機能を切り捨てないのは悪
一生使わない機能のために
セキュリティホールやリスクやアップデートの手間を増やすのは罪
0518デフォルトの名無しさん2012/07/21(土) 01:09:18.15
実務でどれだけ便利かってことより、○○で3Dゲームが作れるようになったとか、JITを搭載したとか、そういう話題の方が人気あるよね。
ブランド大好きだなって冷ややかな目で見てる。
0519デフォルトの名無しさん2012/07/21(土) 01:11:35.32
実務っつったらVBA最強…いや何でもない
0520デフォルトの名無しさん2012/07/21(土) 01:42:03.92
別に人気が出ることが
単純に悪いわけではないでしょ
0521デフォルトの名無しさん2012/07/21(土) 13:31:50.72
>>513
Root C++でググればいろいろ出てくるが、高エネルギー研究フレームワークの
一部として実装されてて、そういう分野じゃ基本技能として使われてる。

http://hep.planet-koo.com/index.php?g=root
http://www.quark.kj.yamagata-u.ac.jp/~miyachi/ROOT/index.html
0522デフォルトの名無しさん2012/07/21(土) 13:39:27.41
凄いな。胸がときめいた
0523デフォルトの名無しさん2012/07/21(土) 16:14:19.37
>>517
うん、だから、組み込み用言語がどんどん汎用言語化していく方向に難色しめしているんだよ。
汎用系はC++やJavaに任せていれば良い。
0524デフォルトの名無しさん2012/07/21(土) 16:21:44.82
>>514
そうだね。
プログラマが書くんなら、プラグイン形式にしておいて、
VSとかでコード書けたほうが良いね。
強力なデバッガやインテリセンスがあって便利。
0525デフォルトの名無しさん2012/07/21(土) 16:26:02.25
>>518
そうそう。DirectXで3Dゲームを作りたいなら、C++やC#を使えばよいだけなのにね。
マイクロソフトがヘッダを用意してくれてるから超楽チン。
わざわざ移植する必要ないよね。
0526デフォルトの名無しさん2012/07/21(土) 16:37:29.15
汎用系の組み込み言語でも、Officeのマクロほどの開発環境が用意できるなら別だがなぁ。
でも、君らはそれがとても出来ないからって、どっかのフリーの組み込み用の汎用言語の処理系を
借りてくるっていうんだろ。そんな中途半端なこと。しないほうがマシ。
お互い無駄なことに時間を使う羽目になる。
プラグインの仕様とヘッダだけ公開しておけば、それで良いんだよ。
アプリ書く人も拡張する人もコンピュータも、皆が楽。
0527デフォルトの名無しさん2012/07/21(土) 16:59:54.81
汎用系組み込み言語っておかしくないか?
特に、「組み込み用汎用スクリプト言語」とか書かれると気持ち悪くて仕方ない
このスレの流れで言うと、こういう感じだろ表現を統一してくれ。

スクリプト用言語 = ( 組み込み用言語 or 制御用言語 )
汎用言語 = スクリプト用言語以外
汎用言語を組み込む = 汎用言語をスクリプト用途で使う
0528デフォルトの名無しさん2012/07/21(土) 17:05:32.84
>>524
所詮プラグインはプラグインで、スクリプトはスクリプトだよ。
エンドユーザーで実際にコード書ける人はいるし需要があるから
スクリプト搭載したソフトが出回ってる。特に、ここ数年は、
OOナニそれレベルだけどJavascriptで小細工できるって人が非常に増えた。
高機能なソフトだとスクリプトの需要は増えてる。
0529デフォルトの名無しさん2012/07/21(土) 17:23:49.77
にわか対象への売りにはなると思うよ。でも騙しだね。ケレン味たっぷりのパズワード。
スクリプト言語へのインターフェースと型変換の提供は結構面倒。
がんばってシコシコ橋渡しの部分を書いても、
載っかるのはC++やJavaとそう変わりないほど複雑な汎用スクリプト言語。
しかも、VSやEclipseのような便利なエディタも無し。
デバッガなんか有るわけ無いし、運が悪ければ、printデバッグすら無理だったり。
そんな事実を知らない人への売りにならなるんじゃないかな。
Officeのマクロのような開発環境を一式ごっそり用意できるってんなら別だが。
どうせそんな余力無いんだから、大人しく「出来合いのもの」を使えって話。
「出来合いのスクリプト言語処理系」ではなく、「出来合いの開発環境」を使えるようにしろと。
0530デフォルトの名無しさん2012/07/21(土) 17:33:11.65
>載っかるのはC++やJavaとそう変わりないほど複雑な汎用スクリプト言語。
そんなヤベー言語があるのか、…知らなかったぜ
メモリアライアメントがどうとかADLとか右辺値参照みたいなことを要求してくるのか、こりゃ地獄だな!
0531デフォルトの名無しさん2012/07/21(土) 17:36:52.98
>>529
なんで希望・願望を垂れ流してんの?
スクリプトエンジン組み込んだソフトリリースして一度でもユーザーから
統合開発環境が欲しいとか要望あったか?
0532デフォルトの名無しさん2012/07/21(土) 17:57:48.94
>>530
どう考えてもマトモなデバッガが無いほうが地獄だし、
大抵が動的型言語だったりするので、バグ取りはC++よりも複雑。
動的にしか型が決まらないのに、デバッガで追えないって最悪な組み合わせだな。

>>531
欲しいに決まってるだろJK。特にデバッガ。
スクリプト言語処理系を組み込むよりも、
まともな開発環境を提供するほうが余程大変だし、
しかも、開発効率は、言語仕様よりも開発環境によるところが
大きいわけだから、その辺よく考えないと。
0533デフォルトの名無しさん2012/07/21(土) 18:14:29.45
だからそんな事言うユーザーがいたのかよ。
あくまでライトユーザー向けの機能でプラグインの代用品じゃないんだぞ。
0534デフォルトの名無しさん2012/07/21(土) 18:19:36.77
>>532
そもそもバグで困るような数十行も書く用途じゃねぇんだよ
0535デフォルトの名無しさん2012/07/21(土) 18:22:35.65
ライトユーザ向けってのはOfficeのマクロ開発環境のようなものの事を言うのであってだね。
0536デフォルトの名無しさん2012/07/21(土) 18:39:44.48
>>532
「複雑な言語はやだね」 → 「まともなデバッガがない方が地獄」 んんん?
ステップ実行と変数内容の表示とかって実装しちゃいけないの?
あれ?存在しないプログラミングコンポーネントに対して存在しないデバッグコンポーネントを引き合いに出すのはOKなんだよね?
0537デフォルトの名無しさん2012/07/21(土) 18:40:34.59
簡単なエディタが付いてて外部のファイルでも食わせられるようにしとけば十分。
そもそもユーザーは、できるだけ書かかないで済む方法さがすし、スクリプト機能の存在自体に
不満を言ってきたやつなんて見たことないわ。多少複雑な機能なら要望に応じてこっちが対応する。
0538デフォルトの名無しさん2012/07/21(土) 18:43:16.89
ライトユーザー向けの
「コピペ改変がしやすいスクリプト言語」
という電波を受信した
0539デフォルトの名無しさん2012/07/21(土) 18:51:22.45
>「コピペ改変がしやすいスクリプト言語」
保守するわけでもないに何か悪いのか?
0540デフォルトの名無しさん2012/07/21(土) 18:59:55.42
>>532
>大抵が動的型言語だったりする
別に型推論ベースの静的型付けでいいんだが何かこだわる必要あんのか?
0541デフォルトの名無しさん2012/07/21(土) 19:08:16.93
ユーザーがクラスなんか使ったらある意味奇跡
関数定義するだけでもよっぽど
引数に渡す型は、ほぼ文字か数値

そんな状態で型がどうのこうのとか・・・
0542デフォルトの名無しさん2012/07/21(土) 20:15:28.13
>>541
ではやはり組み込み向けのスクリプト言語が汎用系に向かうのは間違いですよね。
0543デフォルトの名無しさん2012/07/21(土) 20:18:32.27
お前の言う組み込み向けスクリプト言語ってなんだよ
スクリプト言語と何が違うんだ
0544デフォルトの名無しさん2012/07/21(土) 20:25:02.18
>>542
スクリプト用言語を用意できるならそれに越したことはない。
既存の汎用言語エンジンをスクリプト用に使ったほうが現実的だから
大体の人はそうしてるだけ。
0545デフォルトの名無しさん2012/07/21(土) 20:38:15.56
必ずしも汎用言語が多いわけでもないな
Javascriptの様にモジュールリンケージがなく
拡張しなきゃ単体で使えないスクリプト用言語を使う
ケースも増えてきてる
0546デフォルトの名無しさん2012/07/21(土) 20:40:32.41
>既存の汎用言語エンジンをスクリプト用に

それがどんどん複雑化してきてるけど、その方向性どうなのって話なのだが。
0547デフォルトの名無しさん2012/07/21(土) 20:43:17.35
だからどうしたとしか言いようがねぇだろ
自分のソフトは汎用言語エンジン使わず気に入るように作ればええがな
好きにしろよ
0548デフォルトの名無しさん2012/07/21(土) 20:48:15.21
あれか、俺らに工数や経費、需要を無視してスクリプトに専用言語を使えといいたいのか。
他人に押し付けんなよ馬鹿馬鹿しい。
0549デフォルトの名無しさん2012/07/21(土) 20:48:56.90
>だからどうしたとしか言いようがねぇだろ

シンプルって言う、スクリプト言語のメリットがなくなってきてるし、
かといって汎用ではC++やJavaに勝てるわけも無く。
どこへ向かっているんだろうね。
0550デフォルトの名無しさん2012/07/21(土) 20:54:52.45
>>548
C++やJavaを使えばよいよ。
今時のスクリプト言語は機能豊富で煩雑さはC++やJavaと大差ないし、
そのくせ開発環境は貧弱だから、これなら、
VSやEclipseが使えるC++やJavaのほうがマシだよ。
0551デフォルトの名無しさん2012/07/21(土) 20:54:53.87
使う側・実装する側が楽できて適度に妥協できる方向にむかうだけだろ
0552デフォルトの名無しさん2012/07/21(土) 20:57:16.50
>>550
だから他人に自分の希望を押し付けんな。
0553デフォルトの名無しさん2012/07/21(土) 20:57:33.19
C++やJavaを使うのが一番らくだね。
使う側はVSやEclipseが使えるし、
実装する側はヘッダファイル用意するだけ。
0554デフォルトの名無しさん2012/07/21(土) 20:58:32.72
>>552
何でそんなに怒ってるの?当たり前のことを言っているだけなのに。
0555デフォルトの名無しさん2012/07/21(土) 21:00:26.76
他人に意見を押し付けるのが当たり前とかどんな教育うけてきたんだ・・・
あれか名前がDQNネームだったりするのか
0556デフォルトの名無しさん2012/07/21(土) 21:03:16.40
俺が何か言ったら、君はそのとおりにしなければならないのかい?
それとも既に後ろめたい気持ちにあって、事実を言われると気づかずにはおれないから困る人?
0557デフォルトの名無しさん2012/07/21(土) 21:06:18.17
話が不毛なんだよ
0558デフォルトの名無しさん2012/07/21(土) 21:26:08.22
スクリプト言語を組み込むことが不毛になりつつあるんだよ。
0559デフォルトの名無しさん2012/07/21(土) 21:32:46.32
むしろどんどん使われてるが?
ミドルウェアは相変わらずC++, Javaが多いとはいえ。
0560デフォルトの名無しさん2012/07/21(土) 21:47:58.68
たぶんそういう話じゃない
0561デフォルトの名無しさん2012/07/21(土) 23:10:22.62
なんか複数の話題を一緒くたにしつつ、
各人がそれぞれの前提や想定に基づいて相手をやり込めようとしてる感じ。
そろそろ勝ち負け言い出すんじゃないの?
0562デフォルトの名無しさん2012/07/21(土) 23:44:04.35
まあ全員で前提条件の合意が取れたら、でてくる結論はみんな同じこと言ってると思うよ。
0563デフォルトの名無しさん2012/07/22(日) 00:32:43.14
>>1通り汎用言語使わずに、自前で処理系用意してる人いる?
自前の処理系使った時のメリットってどんなのがあった?
出来れば動機も教えてください。やっぱ組み込み機器向け?
0564デフォルトの名無しさん2012/07/23(月) 00:37:22.26
>C++やJavaを使うのが一番らくだね。

わかりやすい例として

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

前者は淘汰されつつある方式です。
0565デフォルトの名無しさん2012/07/23(月) 02:25:18.48
ブラウザは基本プラグインじゃなくてアドオン拡張だもんな
AutoCADとかあの辺もプラグインじゃなくてlispやvbaのスクリプト拡張だ
Photoshopも昔からプラグインが使えたが要望が多くて結局javascriptをスクリプトとして導入したし
0566デフォルトの名無しさん2012/07/23(月) 02:33:13.28
用途・目的が違うからな。
スクリプトはプラグインにならんし
プラグインはスクリプトにゃならん。
0567デフォルトの名無しさん2012/07/23(月) 07:44:29.00
ブラウザはセキュリティーの問題があるからな。
セキュリティー気にしないのなら、開発自体はActiveXの方が楽だ。
0568デフォルトの名無しさん2012/07/23(月) 17:54:38.04
ランタイムの問題もある。
SRAのパワーグレスの関数がVCで書けるようになっていたが、
コンパイルオプションが/MTじゃダメだったなあ。
本体をバージョンアップしていなかったら
古いコンパイラを今でも用意しておかないとメンテできない。
0569デフォルトの名無しさん2012/07/23(月) 20:29:58.63
>>567
NaCLやJavaAppletはまだしもActiveXは無いだろ。
本質的にどうでもいいことに掛ける作業量が多すぎる。
特にCOM周辺が糞めんどい。
0570デフォルトの名無しさん2012/07/26(木) 21:09:39.02
みなさいどんな狙いで作ってます?
私はポストPHPを目指してます。
0571デフォルトの名無しさん2012/07/27(金) 20:40:26.01
PostPHPかぐぐったけど見当たらなかった
俺も時代に取り残されてるなぁ
0572デフォルトの名無しさん2012/07/29(日) 16:09:13.14
Web専用って意味だろ?

言語仕様とフレームワークが一体なら特化した強みもでるかもな
0573デフォルトの名無しさん2012/07/31(火) 00:17:05.19
そんなんブログやWikiとかオンライショップ構築用のアレとかの方が良くね
0574デフォルトの名無しさん2012/07/31(火) 00:18:45.18
単に言語仕様と環境が一体化してるならVisualWorksやPharoという前例があってな
0575デフォルトの名無しさん2012/07/31(火) 01:00:57.60
言語処理系といいたかったのかな。
仕様と環境の一体化は無理だろ。
0576デフォルトの名無しさん2012/08/01(水) 15:40:37.56
>575
つsmalltal...
0577デフォルトの名無しさん2012/08/01(水) 17:49:53.48
統合環境が最高って言うのは、
付属のフレームワーク上で作業しているからであって、
そこから外れたら重いだけの糞環境って事になる。

VisualC++だってサードパーティーの
ライブラリで使うときはメリットを感じない。
というかviで作業したほうがラクw
0578デフォルトの名無しさん2012/08/01(水) 19:50:34.84
viですか。へぇ
0579デフォルトの名無しさん2012/08/01(水) 20:14:57.84
nanoがないと今日の日記も書けませんorz
0580デフォルトの名無しさん2012/08/01(水) 22:13:16.90
>>577
Visual C++にフレームワークなんて付いてないだろATL/WTL/MFCってな
ファンデーションライブラリと、.Net Frameworkのクラスライブラリを間借りできるだけ。
必要な分だけ自分で書くようなのを目指すならQtとかまともなサードのツールキットが必要だ。
0581デフォルトの名無しさん2012/08/01(水) 22:15:19.44
GoogleのV8エンジンっていいな。
だれか本格的にV8でスクリプト実装してる人いる?
0582デフォルトの名無しさん2012/08/11(土) 17:50:18.39
V8を使った組み込みとかってどうしてやる必要あるの?
沢山の人に使われているプログラム以外、やる必要ないと思うけど
0583デフォルトの名無しさん2012/08/11(土) 19:48:39.96
沢山の人に使われていないから、なるたけ利用者が多くて学習コストの低いJSにするのだ。
0584デフォルトの名無しさん2012/08/11(土) 20:37:53.54
JSなどのメジャーな言語を使う理由でなく、
スクリプト自体をアプリに組み込む理由を聞いてるんだろ
0585デフォルトの名無しさん2012/08/11(土) 21:18:50.95
>>581の言っているのは、Javascript以外の言語の実装に使う例なんじゃないの?
0586デフォルトの名無しさん2012/09/05(水) 03:03:33.11
保守
0587デフォルトの名無しさん2012/10/11(木) 08:17:22.19
保守
0588デフォルトの名無しさん2012/10/29(月) 01:56:01.81
こんな感じのどう?


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;
}
0589デフォルトの名無しさん2012/10/29(月) 02:03:15.85
訂正 数値が抜けてた
match(/(\/\*|\*\/|\/\/.+|"[^"]*"|'[^']*'|((\+\+|\-\-|)[_a-zA-Z][_a-zA-Z0-9]*(\+\+|\-\-|))|[\+\-\*\/\=\|\>\<\!&%]\=|([0-9]+(\.[0-9]+|))|\<\<\<?|\>\>\>?|\|\||&&|[\+\*\/\=\-\.\[\]\(\)\|\?!\>\<\^\$~#&%{},;:'"]| +)/g);
0590デフォルトの名無しさん2012/10/29(月) 08:18:19.49
それぞれのトークンの種類も判別できるようにしよう
0591デフォルトの名無しさん2012/11/05(月) 19:57:39.48
人がいないな
0592デフォルトの名無しさん2012/11/05(月) 20:03:22.03
なにこれ?正規表現でトークン切り分けようとしてるの?
最初見たとき、構文解析してるのかと思って
「だからオートマトンで構文解析はできないとあれ程」とだけ書き込もうと思った。
どちらにしろ汚い。
0593デフォルトの名無しさん2012/11/05(月) 20:36:29.57
何でもかんでも正規表現でやるのは気持ち悪いわ。
0594デフォルトの名無しさん2012/11/05(月) 21:52:30.44
とりあえず可読性が悲惨なのは不味いんじゃないの
エスケープ一つとっても多すぎる
0595デフォルトの名無しさん2012/11/07(水) 02:43:30.02
JavaScriptなのか
0596デフォルトの名無しさん2012/11/14(水) 23:19:57.05
メンテしたくねえ
0597デフォルトの名無しさん2013/01/19(土) 22:11:16.25
俺Lispコンパイラを作ろうと思うんだが、
コンパイルした後にeva相当のことを行うことはしたくない。

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

ゴーグルのでキーワードだけでもおしえてちょんまげ。
0598デフォルトの名無しさん2013/01/19(土) 22:43:11.34
とりあえずcommon lispのdefine-compiler-macroを理解しといたほうがいいと思うけど。
05995972013/01/21(月) 02:19:03.22
>>598
ありがと、勉強する
0600デフォルトの名無しさん2013/01/21(月) 11:35:26.45
後はhttps://engineering.purdue.edu/~qobi/software.htmlのstarlinやpartialとか
0601デフォルトの名無しさん2013/03/05(火) 23:32:24.88
CでCのコンパイラを作ることに、メリットはあるかな。
車輪の再発明か、それとも、ハードの理解を深めるメリットがあると
見るべきか。
0602デフォルトの名無しさん2013/03/05(火) 23:34:46.48
CでCのコンパイラを作るとか普通じゃん
0603デフォルトの名無しさん2013/03/05(火) 23:39:55.03
既存のCコンパイラってCで作ってるんじゃないの?
0604デフォルトの名無しさん2013/03/05(火) 23:55:26.37
VCはVCで作られましたってメッセージが出てたよな
0605デフォルトの名無しさん2013/03/05(火) 23:58:20.95
新VCは旧VCで作られたって意味じゃないの?
0606デフォルトの名無しさん2013/03/06(水) 00:02:41.23
IDEはVC#メインっぽい雰囲気だが
コンパイラは今でも当然VCだろうね
0607デフォルトの名無しさん2013/03/06(水) 01:54:55.78
コンパイラの実用を目指すなら再発明だわな
目的次第
0608デフォルトの名無しさん2013/03/06(水) 02:05:06.85
Cコンパイラでもどこが作ったコンパイラかでバイナリの性能やサイズが違うって言うし
0609デフォルトの名無しさん2013/03/06(水) 02:22:10.54
まあでもこのスレに来てる大半はそのへんのところ
既存のバックエンドに投げるだけじゃないか
0610デフォルトの名無しさん2013/03/06(水) 12:50:03.79
バックエンドは人海戦術
0611デフォルトの名無しさん2013/03/06(水) 17:30:38.45
>バックエンドは人海戦術
雲海戦術なら昨今のcloud事情的にありそう
0612デフォルトの名無しさん2013/03/08(金) 20:25:20.05
MS製のC関連品では、悲惨な目にあった奴もいるみたいだ。
C++の「仕様通りに動かない」とか...。
0613デフォルトの名無しさん2013/03/08(金) 21:04:30.62
>>612
具体的に書かないとただの悪口だぞ。すべて伝聞体だしどの仕様だかわからない
0614デフォルトの名無しさん2013/03/08(金) 21:42:16.68
むしろ仕様通りで、仕様が酷いことの方が多かったがw
WinsockでOSのバージョンごとに仕様が違う標準的な関数があるとか。
0615デフォルトの名無しさん2013/03/09(土) 14:36:18.35
仕様を決めた奴が最後まで尻拭いしてくれる訳でもない
0616デフォルトの名無しさん2013/03/10(日) 23:47:37.76
「BASICのコンパイラを作りたい!」
と述べたら、
「おまいは、高級レストランで、カップめんを注文するような奴かw」
と笑われてしまった(泣)...。
0617デフォルトの名無しさん2013/03/11(月) 00:01:19.69
BASICコンパイラとか普通にあったと思うけど
笑うような事ではない
0618デフォルトの名無しさん2013/03/11(月) 00:25:46.35
レストランの例えは、ちょっとずれてるよな
HDの8mmビデオ機を作りたいと言ってるような話。
しかもBASICは8mmビデオよりずっと古い。
0619デフォルトの名無しさん2013/03/11(月) 00:28:51.32
うーん、どっちもどっち。
いずれにせよ現時点でBASICは仕様上すごいアイデアでもない限りありえない。
0620デフォルトの名無しさん2013/03/11(月) 01:28:54.64
作るのが目的であって実用しないんでしょ
0621デフォルトの名無しさん2013/03/11(月) 01:51:41.45
COBOLおばあちゃん
http://www.theregister.co.uk/2013/03/09/iwd_grace_hopper/
0622片山博文MZパンク ◆0lBZNi.Q7evd 2013/03/11(月) 02:07:57.12
D言語の闇の力を借りれば、COBOLだって高速実行できる処理系ができそう。
0623片山博文MZパンク ◆0lBZNi.Q7evd 2013/03/11(月) 02:47:16.14
D言語でCOBOLのランタイムを作ってさらにコンパイルタイムも作っちゃう。
0624デフォルトの名無しさん2013/03/11(月) 03:37:23.22
そりゃ例えばバックエンドにLLVMとかを使えば
高速なコードは吐けるだろうけど
0625デフォルトの名無しさん2013/03/12(火) 03:37:33.50
LLVMって仕組み上、CPUアーキテクチャ特化の最適化に勝てそうにないから
実際上、微妙なところがあるよね
0626デフォルトの名無しさん2013/03/12(火) 03:40:22.13
COINSよりはまし
0627デフォルトの名無しさん2013/03/12(火) 08:45:13.74
>>625
というと?
0628デフォルトの名無しさん2013/03/12(火) 15:09:26.52
Low Level Virtual Machine - Wikipedia
http://ja.wikipedia.org/wiki/Low_Level_Virtual_Machine

これは面白いな
0629デフォルトの名無しさん2013/03/13(水) 05:49:26.36
AutoHotKey のようなスクリプト言語、またはAutoHotKeyの移植版を
Linux 用に書こうかと思うんですが
どの言語で書けば協力者があらわれやすいと思いますか?
今頭にある候補はJava, C# , Python, C, C++ です
0630デフォルトの名無しさん2013/03/13(水) 08:13:26.80
>>625
iccくらいにしか負けてないでしょ?
0631デフォルトの名無しさん2013/03/13(水) 10:00:16.01
>>628
専用スレあるよ
0632デフォルトの名無しさん2013/03/13(水) 15:13:23.37
【最速へ】LowLevelVirtualMachine【LLVM】
http://toro.2ch.net/test/read.cgi/tech/1211547655/
0633デフォルトの名無しさん2013/03/15(金) 06:56:14.73
このスレの住民でLLVMを知らん人がいたのか
0634デフォルトの名無しさん2013/03/16(土) 09:53:11.48
そりゃあ、ピンキリの世界だからな。
0635デフォルトの名無しさん2013/04/10(水) 17:58:03.33
リフレクションの代わりにアノテーション・プロセッサで
クラスをバイナリ・XML・RDBに変換する言語つくりたいけど
考えただけで気が遠くなった。
0636片山博文MZパンク ◆0lBZNi.Q7evd 2013/04/18(木) 01:14:25.60
君の周りでPEGって流行ってる?
0637デフォルトの名無しさん2013/04/23(火) 23:54:07.09
"Mastering PEG" "PEG Cookbook" はまだか?
0638デフォルトの名無しさん2013/04/24(水) 00:33:55.26
めもめも
0639デフォルトの名無しさん2013/04/29(月) 09:37:01.43
java または jython にシンタックスシュガーを加えた言語? を作りたいです

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

という構造にしたいんですが
この自作変換ソフトを書くためにはML系と Haskellってどっちが簡単でしょうか?
MLはわかります。 パターンマッチの関係で他の言語は考えてませんが問題はないでしょうか?
0640デフォルトの名無しさん2013/05/03(金) 02:17:59.52
小さくて読みやすい正規表現処理の実装ないですか……
できればC、C++、Javaあたりで
0641デフォルトの名無しさん2013/05/03(金) 05:54:18.13
>>640
DFAエンジンで良ければ↓の19章はどう?
ttp://www.context.co.jp/~cond/books/algo/
0642デフォルトの名無しさん2013/05/03(金) 06:15:15.53
>>641
802行、短い! 見てみます。ありがとうございます。
0643片山博文MZパンク ◆0lBZNi.Q7evd 2013/06/04(火) 23:16:44.03
逆コンパイラ作ってる人、居ますか?
0644デフォルトの名無しさん2013/06/04(火) 23:19:01.13
はい。
0645片山博文MZパンク ◆0lBZNi.Q7evd 2013/06/09(日) 03:15:28.90
>>644
逆汗を逆コンパにするのに必要な知識を教えて下さい。
0646デフォルトの名無しさん2013/06/09(日) 12:53:11.61
つ [インラインアセンブラ]
0647デフォルトの名無しさん2013/06/09(日) 13:36:39.72
パッと思いつくのは
・アドレスにラベルを割り付ける
・関数を切り分ける
・スタックフレームから関数引数・ローカル変数・戻り値を切り出す
・if/for/switchを抽出して構文化する
・DLLからロードされるシンボルを置き換える

解説しているサイトとかあるかは調べてないので知らん

どうせ defineされた定数をマクロ名に戻せないとか
構造体復元が難しいとかあるから大したことはできん
0648デフォルトの名無しさん2013/06/23(日) 20:48:35.47
MinCaml(min-caml.sourceforge.net/)ってGC入ってる?

陽にGC入ってるって書いてないだけでGCのコード入ってる?
0649デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
lua.vm.js
Scala.js
なんかJavascriptが中間言語として凄いことになってきた。
0650デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>648
fdpe05.pptの18ページに実装してないリストがある。
GCも実装してないリストに含まれてる。
0651デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>649
最近のはやりはJSをネイティブとして扱ってJSコードをはき出す処理系ってのがあるのでその一環じゃないかと思う。
これとgoogle closureの組み合わせで効率的なJavascriptを生成する感じ
0652デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>651
> 最近のはやりはJSをネイティブとして扱って

いやいやw
0653デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>652
割とマジなんだけどなー
JSをプラットフォームとして扱う傾向にあるの
0654デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
ネイティブじゃなくてターゲットと言いたいのか?
0655デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>654
それでも違わないけど、Webブラウザ上のネイティブ言語としてのJSっていう扱いなんだよね。
様々なパーティがいろんな言語->JSへのコンパイルみたいな事してる。
0656デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
なんだかなあ
0657デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
寧ろ、生JS嫌われすぎだろ?とw
0658デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
仕様が柔軟すぎてカオス
0659デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
JS向けに最適化されたチップが安く売りだされたら考えてやる
0660デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>>655
このスレ的に正しい用語は
「Webブラウザ上の中間言語としての」
「いろんな言語->jsへのトランスレートみたいな事してる」
かな
0661デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
コンパイルはまあいいと思うけどね。ネイティブはちょっとおかしい。
0662デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
たぶんJSを目的言語として捉えてるからネイティブって書いたんだろうけど、
まあ気持ちは分からなくもないが……
0663デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
名前付けを疎かにするとこのように問題がやまないのである
0664デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
jsにトランスコードとかがこんなに流行るなら、いっそWebVMみたいなのを作ればいいのに
0665デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
>>662
その通りなんじゃないの?
ブラウザ上で動かすプログラムだとJS以外ないし。(他にあったっけ?)
ClojureScriptのサイトとか読んでもそんな感じだし、Google closureとか通す処理系みてもなんかそんなニュアンスだし。
0666デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
それをネイティブと表現するのは、わかりやすいようでかえってわかりにくい
Node.jsやWindows Script Hostだってあるし
そもそもネイティブって何だ?って話に
0667デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
ChromeはNaCLあるしね。
ブラウザ限定でも分かりにくい用法。
0668デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
> そもそもネイティブって何だ?って話に

いまどきだとx86プロセッサでもx86コードを直接実行してるわけじゃなかったりするしな
0669デフォルトの名無しさん2013/07/10(水) NY:AN:NY.AN
むしろなんでJSでやりたがるんだよ
いい加減捨てようぜアレ
0670デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
Javascriptはブラウザ実装がフォークして混沌としてたけど、
言語自体はそれほど悪くない設計だから流行るのは当然。
人が集中して処理系実装も非常に優れたものが多い。
0671デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
あれだけ処理系が進化しちゃうと
今更別の言語に変えるとかもう無理だからな…
別言語からの変換をするか、asm.jsみたいなアプローチをするか
0672デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>671
別言語からの変換だけでも結構数でてるからもうしばらくは消えないんじゃないの?
というか2.0仕様だっけ?型導入されたやつとかすら出てきそうにないのが嫌な感じ。
0673デフォルトの名無しさん2013/08/14(水) NY:AN:NY.AN
EasyUOからOpenEUOへの変換プログラム作ったら
思いのほかうまく動いてしまったのだけど
これって論文にしたら怒られます?
どんな雑誌に投稿すればいいのかもわからないけど
0674デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
コンパイラ作ってるんだけど、
字句解析器作ってる間に人生終わりそうなんですけど。
lexつかったほうが良いですか?
0675デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
さすがにそんなにかかるはずはない
力技でも1週間もあれば作れると思うけど
0676デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
本に乗ってる奴ならね・・・
0677デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>674
字句なんて1〜2日でできるだろう。
できないとしたら、プログラミングの技能か字句解析アルゴの知識か他の何か、進め方のどこかに問題があるのだろう。そっちを明らかにした方がいい
0678デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
はいはい、凄いね凄いね。
言って貰いたいんだろ・・・・
0679デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
じゃあ、1つ質問して良い?
正規表現の構文解析木の段階で状態数を最小にする方法
知ってるか?
0680デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>678
お前みたいな発想だから日本はダメなんだよ
0681デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
字句解析器を手書きで作るなら正規表現とか使わないんじゃないの?
0682デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>674
lexくらい、フリーで転がっているのがあるんじゃないの。
それとも、何か、特別なこだわりがあるとか。

自作できないなら、フリーで転がっているのを使うか、
周りの経験者に聞いた方が、早いと思うよ。
字句解析の次は、構文解析が待っている。

さらに、もっと面倒なファイル作りとか、最適化も必要なのだし。
「最適化のために、頭を使う」というレベルでないと、先は長いよ。
ファイルサイズを、極限まで小さくすることにこだわるか、あるいは、
ともかく、完成させることを目指して、最適化は、後の研究課題にするとか、
コンパイラ作りをする連中は、主に、その辺で頭をひねったり、悩んだり
しているのではないかと推測されるから。
0683デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>674
自作言語なの?
・識別子・キーワード
・数値
・文字列
・コメント
・その他記号・演算子
※必要に応じて改行処理

こんだけじゃないの?
0684デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
面倒くさければもう、一文字ずつかえして、
パーサで解析させちゃおうyo
0685デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
そっちの方が大変だねぇ
0686デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>674
どんな文法なのかでまるで苦労が違うぞ
字句解析と構文解析とが綺麗に切り分けできない言語だったりしてないか?
IF IF=THEN THEN THEN=IF ELSE ELSE=THEN END IF
だっけ?PL/Iで悪名高い文は
0687デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
インラインアセンブラみたいに
文脈によってキーワードが変わったりするのか
0688デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
なんか勘違いしている人多いけど
作っているのは字句解析器じゃなくて
字句解析器生成系っすよ
0689デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
そうなのか?
>>674 には字句解析器作ってるって書いてあるから
言葉通りに字句解析器作ってるんだと思った
0690デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
コンパイラーじゃなくて自分のアプリのマクロ機能の為に
スクリプトコンパイラーを作る位なんだけど
本格的な言語コンパイラー作ろうと思ったら
lexみたいな解析器生成プログラムとか自作するのが普通?

いまは言語仕様が小さいこともあって、オートマトンみたいなの
力業で手書き
言語仕様はJavaScriptもどきなんだけど、生成プログラムの作り方が
良く分かってないのと、ECMAScriptの仕様の範囲くらいなら
いまのまま力業で実装ってのもありかもって思ってるんだけど
0691デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
規模よりも変更頻度とかだと思うよ
一度書けば終わりでもう二度と変更しないってんなら、どれだけ大きくてどれだけメンテしづらくても、まぁ、どうってことない
仕様変更がよくあるなら、なるべく変更しやすい形、そうするとlexみたいなのが一番手軽に変えられるから、そうなるんじゃない
0692デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
字句系なんてそうそう変わるもんじゃない
エディタの構文?ハイライトに対応できる範囲で小さく作ればいい
06936902013/08/23(金) NY:AN:NY.AN
thx
一応使わないかもだけどlex系の作り方みたいなのは
少し勉強しておきたいな
コンパイラー系は中田育男氏の本斜め読みしただけなんだけど
lex系の処理とかはやっぱりソース読むしか無いのかな?
細かい解説なしに理解出来る気がしない
0694デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
まずはただの正規表現マッチの実装からやってみたら。
それがわかれば後は混ぜて炒めて塩ふるだけってぐらいに思えるだろう。
0695デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
>>690
言語は素のJavaScriptにしておいて
どうしてもやりたいことだけJSとのインターフェースクラス作るのが
それを扱う第三者にとっては一番便利だよ

「スクリプトエンジン」って言葉の意味、よく噛み締めてみると
そういう結論になると思う
0696デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
ちなみにJavaScriptエンジンはどれがおすすめ?
0697デフォルトの名無しさん2013/08/24(土) NY:AN:NY.AN
>>694
意外とできあがりに差がつきそうな工程だなw
0698デフォルトの名無しさん2013/08/24(土) NY:AN:NY.AN
字句解析を忘れていっそPEGで書いちゃうとか
0699デフォルトの名無しさん2013/08/24(土) NY:AN:NY.AN
lexの作り方はドラゴンに乗ってる。
ドラゴンのままじゃ遅くて使い物にならないから
改良してるけど。
0700デフォルトの名無しさん2013/08/24(土) NY:AN:NY.AN
Lexerは「言語実装パターン」とか参考になったような
0701デフォルトの名無しさん2013/08/24(土) NY:AN:NY.AN
参考になります
言語実装パターンは目次読んだらなんだかよさそうでした
電子版もあるし、翻訳技術書としてはかなり安めだし
これ読んでみようかな
ドラゴンは定番みたいだけど難しそうな印象、出版も少し古め?
0702デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
ドラゴンは難しくないよ、むしろ分かりやすい

ろくにコメントの入ってない「ソース丸ごと掲載」ってのが
苦手な俺には特にありがたい
0703デフォルトの名無しさん2013/09/01(日) 23:05:37.42
ttp://piumarta.com/software/peg/
このpeg/legっての触ったことある人いますか?
ちょっとだけ遊んでみたんだけど、トークンの位置を扱う方法が分からないんで教えて欲しいです
とりあえずアクションの中でyytextと一緒に行番号と列番号を表示したい
0704デフォルトの名無しさん2013/09/04(水) 16:30:46.02
lex+yacc の仕組みを丸パクリしてるっぽいから
そっちの説明を探せばたくさん出てくるはず
flex+bisonでもいい
0705デフォルトの名無しさん2013/09/04(水) 19:00:06.77
2年くらい前に見た時はポシャったプロジェクトと思っていたけど
しぶとく続いてたんだな
0706デフォルトの名無しさん2013/09/12(木) 19:48:08.44
ドラゴンブック見て字句解析器生成プログラムを書いてみたんだけど、サイズが大きく
なりすぎる傾向があるので、手書きしたほうがいいような気がした。
もちろんいろいろ工夫する余地はあるんだけど、手書きする手間をかけても良い部分と感じる。
逆に構文解析器は自動生成でもいいかなと思う。
0707デフォルトの名無しさん2013/09/25(水) 16:18:58.07
JavaScriptのV8エンジンの文字列処理の最適化について教えてください
例えば、
var s = "";
for(var i=0; i<1000; i++) {
s = "s" + s + i + "e";
}
のようなコードをCやほかの言語で実行しても
V8エンジンほど速くはならないのですが、
V8エンジンは内部でどういう最適化をしているのでしょうか?
0708デフォルトの名無しさん2013/09/25(水) 16:39:07.74
文字列処理の最適化より
配列処理の最適化した方が良い
0709デフォルトの名無しさん2013/09/25(水) 17:40:52.82
つーかスレ違い
0710デフォルトの名無しさん2013/09/25(水) 21:02:34.66
V8はがべこれしてない
0711デフォルトの名無しさん2013/10/12(土) 02:00:43.76
>>707
関係無けど、こういう原理的にはコンパイル時に決定できる最適化関係はV8エンジンは異様に強いよね
0712デフォルトの名無しさん2013/10/12(土) 19:19:47.74
>>707
Cでどんなコード書いたのか気になるところ
07137072013/10/12(土) 23:34:43.11
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;
}
続く
0714デフォルトの名無しさん2013/10/12(土) 23:35:36.22
続き
int main()
{
int i;
for(i=0; i<2000; i++) {
printf("%s\n", bench(i));
}
return 0;
}
0715デフォルトの名無しさん2013/10/12(土) 23:36:21.05
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));
}
0716デフォルトの名無しさん2013/10/12(土) 23:40:38.09
環境
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

こんなに違うのですがどういう最適化をしているのでしょうか
0717デフォルトの名無しさん2013/10/13(日) 01:07:39.01
関数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
0718デフォルトの名無しさん2013/10/13(日) 08:14:54.39
Cがbench(i)で
JSがbench(10)なのはここに書き込む際のミス?
bench()内のループの実効回数が100倍くらい違ってくるんだけど。
0719デフォルトの名無しさん2013/10/13(日) 12:45:35.76
というか、sprintf() 使っている時点で勝負ありだろ
0720デフォルトの名無しさん2013/10/13(日) 14:54:29.45
Cのsprintfもprintfも外部ライブラリの関数なので
インライン展開が効かない
2000回のループをひとまとめにすることは出来ないしdenchの
呼び出しのsprintfの引数に与える変数をコンパイル時に決定することも出来ない
対して、JavaScpiptのコードは組み込み関数なので
実質的に全てを展開可能で、最大限に最適化した場合に
print("s0e\ns1e\n......
のような一行だけ実行するかも知れない
Cで最適化が効くように書く事は可能かもしれない
ただ、言語に組み込まれた組み込み関数がある事は
最適化にとって有利なのは間違いないだろう
少なくとも例示された書き方は、Cの速度を評価するには
余りに不適切な書き方ではあるし、Cで意図した処理を
JavaScriptより高速に書くことは常に可能ではある
(手動最適化を含める必要がある場合はあるかも知れない)
0721デフォルトの名無しさん2013/10/13(日) 15:29:41.09
>>720
>Cで意図した処理をJavaScriptより高速に書くことは常に可能ではある

Rubyにはクロージャとしてのブロックがあるので、
>>717で示したようにメモ化を用いた高速化は容易に実装できる

Cの場合にはクロージャが無いからRuby同様なメモ化は実装できないが、
代わりに「遅延データ構造」という手法を用いれば実装できる

ただし、遅延データ構造による実装が「常に可能である」か否かは知らない
おそらく対象が何らかの代数構造を満たす必要があるだろう
少なくとも今回のお題の(対象としての)文字列はモノイドなので、これを満たす
0722デフォルトの名無しさん2013/10/13(日) 20:14:13.25
>>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));
}
0723デフォルトの名無しさん2013/10/14(月) 06:59:38.53
717じゃなくて悪いけど、逆順から呼び出してみ。
for(var i = 2000; i-- < 2000; ) { print(bench(i)); }
これで実行時間が変わらないなら事前計算された文字列をハッシュテーブルから
引いてるんじゃない?
大幅に遅くなるなら、実行結果をキャッシュして次の計算に使用してるんでしょ。
bench(10)の結果はbench(9)の結果を使って計算できるんだしさ。
そういう風にCで作ったら、bench()呼ぶ毎にmallocでメモリ確保しても
ゴミCPU(C-50)で853msだったし。
0724デフォルトの名無しさん2013/10/14(月) 08:13:36.02
あ、ごめん。i-- < 2000 じゃなくて i-- != 0 で。
0725デフォルトの名無しさん2013/10/14(月) 08:53:14.95
>>724
0.168sでした
事前計算というのはどういう手法なんでしょうか?
0726デフォルトの名無しさん2013/10/14(月) 09:06:49.52
これで
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

こうだった
0727デフォルトの名無しさん2013/10/14(月) 09:23:47.57
あぁ、ちょっと勘違いしてた
http://codepad.org/hiJz0zt5
こうだな
real 0m0.063s
user 0m0.061s
sys 0m0.001s
printf呼び出しが冗長だから、それを少なくするように書けば
いくらでも速くなると思う。(メモリーとの兼ね合い)
多分処理時間の大部分はIOで食ってると思う
これを取り除くとCPU時間はほとんど0に近くなるんじゃ無いかな
0728デフォルトの名無しさん2013/10/14(月) 09:26:01.91
>>726
それ実行結果違わね?

>>725
むしろ速くなってるね。
コンパイル時に引数に対応した文字列のテーブルを作っておいて
bench内ではテーブル引いて返すだけって意味で事前計算って言った。
たぶん717のやってることだと思うんだけど、こういう言語
触ったことないからわからん。
0729デフォルトの名無しさん2013/10/14(月) 09:38:24.69
>>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);
0730デフォルトの名無しさん2013/10/14(月) 09:39:37.87
ごめん。これじゃだめだ。
0731デフォルトの名無しさん2013/10/14(月) 09:40:37.01
あ、だめじゃなかった。ほんとごめん。
07327272013/10/14(月) 09:59:49.35
>729
thx
40行目のnullターミネィトだけ必要ですね
putsの方が速いか
0733デフォルトの名無しさん2013/10/14(月) 10:04:40.09
>>729
人間が処理を理解して工夫すれば、
このようにとても早いアルゴリズムに直せると思うのですが、
V8のスクリプトエンジンなどは's'の並びがbufからbuf+nまで連続することに
あらかじめ気づくのでしょうか?
0734デフォルトの名無しさん2013/10/14(月) 10:21:59.47
何とか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';
}
とかやってみたけどさ、全然遅いのよね。
速いアルゴリズムに代えられることに気付いているとしか思えない速さだと思うよ。
この分野さっぱりだからさ、アドバイスはできないんだけどね。ごめんね。
07357272013/10/14(月) 11:04:15.70
あぁこう言うことか
http://codepad.org/rSzsp8sE

これで良いんだよね?
0736デフォルトの名無しさん2013/10/14(月) 11:17:50.14
V8 Engineはバッファの基点をbuf[0]にしないことで
for(...) {
s = S + s + E;
}
という文字列処理の最適化を行っているんでしょうか
0737デフォルトの名無しさん2013/10/14(月) 11:46:20.22
V8エンジンってのはそんなに凄い物なの?
ちょっと聞いたことが無いんだけど
この程度の最適化を自慢してるくらい何だから
作ってる奴らは
どうせ口ばっかりでたいしたことない奴なんだよ
おれなら10倍高速に書けるのに
0738デフォルトの名無しさん2013/10/14(月) 19:57:51.28
>>737
針デカ過ぎです
0739デフォルトの名無しさん2013/10/14(月) 20:38:14.11
コピペかと思ったら違った
0740デフォルトの名無しさん2013/10/14(月) 22:41:11.40
まぁ、そもそもコンパイラーなんて書く気も無い
ワナビーはそろそろ場違いなんでお引き取り願った方が良いのでは
0741デフォルトの名無しさん2013/10/14(月) 23:07:41.87
ごく普通のBASIC的なスクリプトを作って実行するとHSPぐらいは行ってるな。べんちとると。
0742デフォルトの名無しさん2013/10/17(木) 19:41:19.45
ポジショントークだよな。
>>734とか速いわけがないコード出して遅いっていう意味がわからないもの
0743sage2013/12/16(月) 21:40:57.87
あああ
0744片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/02(日) 14:49:49.00
http://katahiromz.web.fc2.com/mathai/mzcalc1.zip

これをC++のプログラムにしたいんだけど、どうすればいいかな?
0745デフォルトの名無しさん2014/02/03(月) 02:10:20.39
lexとyacc通してcにすればいいんじゃないかな
そういう意味じゃないってんならlexはともかくyaccの方はコンパイラコンパイラでC++に落ちる奴使えばええんでないの?
あるいは文法規則をc++のtemplateで生成する奴使うとか
0746デフォルトの名無しさん2014/02/03(月) 10:33:27.76
そこで具体的なツールの名前が出てくるのがこのスレなんじゃないの
0747デフォルトの名無しさん2014/02/03(月) 15:37:14.13
>>746
前スレだか前々スレにcaparってのが紹介されてた
このスレでも>>462でちょろっと名前が出る
ただ文法規則は違うんだよね、移植は必須
0748片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/08(土) 16:18:00.61
やはりBison++は互換性に問題があるようだ。さらにWin32では新しいバージョンが用意されていない。

結論:Bison++は使えない
0749デフォルトの名無しさん2014/02/08(土) 16:47:27.06
どのみちそんなもんラップして使うだろ
C++のライブラリに拘る意味がわからない
0750片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/08(土) 16:59:45.47
一つのプログラムでパーサーが2つ以上必要なときや、再入可能じゃないといけないときは、困るだろう
0751デフォルトの名無しさん2014/02/08(土) 17:06:44.50
ドキュメントくらいしっかり読めよ
YYPARSE_PARAMなんて基本中の基本だぞ

その用途で解決策が乏しくて不満が出るのは普通はFlexの方だ
0752デフォルトの名無しさん2014/02/08(土) 17:17:51.98
>>750
お題程度ならC++でゴリゴリ書いても良いじゃんよ
元の目的がはっきりしてないから質問の答えだって迷走すらぁね
0753デフォルトの名無しさん2014/02/08(土) 20:57:24.99
staticにするなり、defineで別名にするなり、手で別名にするなり、どうとでもすればいい気が…
そのまんまC++に持ってって動くコードなら適当な名前空間などで括るとかどうにでもすればいい
0754デフォルトの名無しさん2014/02/09(日) 00:45:47.83
lexer と parser の協調動作(parser 側から lexer のステートを切り替えるとか)が
必要な場合、何かお薦めの方法ある?
yacc とかが生成したパーザだと、先読みの可能性を考えながら文法書くのが辛すぎる。
0755デフォルトの名無しさん2014/02/09(日) 02:10:59.56
先読みが問題になるって事はreduce以外のタイミングでlexer側のステートを切り替えたい要件?
それをyacc系でやるのは茨の道かな…切替タイミングをreduce時に絞れるなら何とでもなるけど
それ以外はケースバイケースでアクロバティックになる事も割と多かった気がする
0756デフォルトの名無しさん2014/02/09(日) 03:49:23.31
LRパーサをやめてANTLRとかに走ってみるとか
0757デフォルトの名無しさん2014/02/09(日) 10:09:24.90
keyword_or_identifierみたいなトークンに織り込んでしまえ
汚くなるけど一貫した方法で処理できるからスキャナの状態触るよりはマシ
0758デフォルトの名無しさん2014/02/09(日) 15:09:09.34
>>755
LR パーザの動作をちゃんと理解している自信がないのだけど、
LR(0) でない限り、 reduce のタイミングでも次のトークンが
食われてる可能性はあるような。
先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
綱渡り感がすごい。

>>756
LL 系パーザでも、パーザジェネレータを使うと先読みのコントロールが
利用者から奪われるのは変わらない気がする。

>>757
過去、二回くらい試して挫折した。たぶん一番正しい方法なんだけど、
スキャナが余分なトークンを生成する(空白文字の取り扱いが変わるため)ことで、
文法が LR(1) に収まらなくなるという…。
0759デフォルトの名無しさん2014/02/09(日) 15:23:34.69
> 先読みせずに reduce できることが一意に決まれば先読みされないはずだけど、
ごめん。これ嘘。
もちろん実装依存ではあるのだけど、現実的には常に先読みされていると
思っていいのかもしれない。
0760片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/09(日) 16:12:54.17
http://katahiromz.web.fc2.com/mathai/mzcalc2.zip
Boost.Spiritを使ってみた。変数への代入ができないよお。
助けてよお。
0761デフォルトの名無しさん2014/02/09(日) 16:32:52.05
終端記号にトークンを必要としない文法ならreduceのタイミングでは先読みはないよ
Bisonなら吐かれた制御ロジックや表を理解しなくても詳細ファイルを出力させるだけで大体そこは読み取れる
ただし先読みを行う行儀の悪い実装が無いとは言えないし、
parser上の先読みは無くともlexer上の先読みの話は残るので文法によってはyyunput()等での調整は必須になる

終端記号にトークンを必要とする文法ではlexerへの干渉内容次第でyacc系での実装が無理筋なのはその通り
一応色々対策はあるけどそこまで来たら文法と手段の見直しが先決
0762片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/09(日) 17:02:38.95
Boost.Spiritは難易度高いよな。。。
0763デフォルトの名無しさん2014/02/10(月) 20:25:51.23
スキャナアクセスが考慮されてるパーサジェネレータもあった気がする
0764デフォルトの名無しさん2014/02/10(月) 20:53:09.41
%option reentrant と %pure-parser(再入)と
%glr-parser(LALRじゃなくGLRによる衝突遅延)と
%x (スキャナの状態)

Flex+Bison で何が不足か
0765片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/10(月) 21:24:12.35
Boost.Spirit V2は難解すぎ。アクションメソッドがconstで何ができるっつーんだよ。
BisonはGPLに汚染されていてC++への対応が悪い。
消去法でANTLRが良さそうなので使ってみるか
0766デフォルトの名無しさん2014/02/10(月) 22:47:16.40
Bisonは大して不満ないけどFlexの足回りはやや進化が遅い気がする
前使った時に泥臭いなと思ったのは入力ストリームを一度割り当てて読み切った後に
他の入力ストリームに交換してクリーンリセットする正規の手段がない事と翻訳単位変数依存がある事

あの時は.l側にyy_init=1やyy_start=0等を実行する小さな関数を作って%initial-action他から
実行させて凌いだけど、最近のバージョンは正規の手段準備されたんかね
0767デフォルトの名無しさん2014/02/10(月) 23:08:31.46
>>762
Caper使えよもう
0768デフォルトの名無しさん2014/02/11(火) 03:22:57.50
Bisonが吐いたコードまでGPLに感染するわけじゃないだろ
C++はわからんな・・・結局Bisonが吐いたコードをC++のコンパイラが処理できれば足りるはず
アクションにどこまでC++を書けるかはやってみたこと無いからわからん

まあANTLRなら戦えるだろう
0769デフォルトの名無しさん2014/02/11(火) 09:05:54.48
シェルを作ってみたい
0770デフォルトの名無しさん2014/02/11(火) 10:23:11.80
一瞬で作れる
0771片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/11(火) 17:34:29.83
ANTLRWorks 1.5.2ゲットだぜ!
0772デフォルトの名無しさん2014/02/12(水) 00:37:42.11
>>766
re2c 使うべし。
0773デフォルトの名無しさん2014/02/12(水) 23:43:50.58
サンクス、こんな流れがあったのか、それも結構前から
個人的には近年のツールなのにきちんとCをサポートしてる所がいいな
Flex同様ドライバの一部にも多種の組み込みにも使える余地を残してると

Flexの長所と短所を踏まえて作られた流れみたいだしその内試してみる
0774デフォルトの名無しさん2014/02/22(土) 20:36:37.25
ANTLRv3で!ってどういう意味?
v4でどう書けばいいのかわからん
0775片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/22(土) 23:32:18.23
ANTLR3でbacktrackが必要な文法だとFOLLOW_set_in_問題が
発生して死ぬ可能性あり。詳しくはFOLLOW_set_in_でググれ。
0776片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/25(火) 14:05:33.88
Cパーサーを作成中。

識別子の解析でreduce/reduce conflictが起こってしまうよ。助けて偉い人
0777デフォルトの名無しさん2014/02/25(火) 14:25:55.18
とりあえず関数の中を全部捨てて一通りパースを通すのがいいんじゃまいか
関数の中はむずかしいw
0778デフォルトの名無しさん2014/02/25(火) 14:27:58.33
あるいは typedefを捨てればチョー簡単になる
0779片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/25(火) 15:19:58.04
わかった。typedefにある識別子は型名と見なしていいんだな。
0780デフォルトの名無しさん2014/02/25(火) 16:36:10.08
ああ、typedefがあるおかげで、識別子が型名に化けるという問題か。
Cだと確かアドホックにやるしかないんじゃなかった?

Javaの場合確か文脈によって区別できたと思うけど。
0781デフォルトの名無しさん2014/02/25(火) 17:49:26.54
Javaにはポインタがないというさりげない工夫
0782デフォルトの名無しさん2014/02/25(火) 18:14:37.18
それ、この話とどう関係が?
0783デフォルトの名無しさん2014/02/26(水) 09:02:57.86
Javaは関係ないだろといいたいのか
何でポインタが出てくるのかわかんねーといいたいのか
コンフリクトが解消できません
0784デフォルトの名無しさん2014/02/26(水) 11:06:38.22
識別子が型名に化けるので、文法がLALR(1)のようなシンプルな範囲に
厳密には収まっていない、ということと、Javaにはポインタがない、ということに
関連はありますか、ということ。
0785デフォルトの名無しさん2014/02/26(水) 16:40:29.35
よくわからん話題だな。俺はchar[]を1文字ごと解析してる。

javaアプリに組み込むインタプリタを作りたいのだが、
それは諦めて、スクリプトを自作パーサでjavaソースに変換し、
javassistで実行中のjavaアプリに動的ロード&実行しようと
計画を立てたものの、一向に進まないやw
0786片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/26(水) 16:59:45.90
>>785
LuaJava
luaj
0787デフォルトの名無しさん2014/02/26(水) 17:27:01.59
>>785
思い切って機能を端折って、とにかく動くものをエイヤで作らないと、いつまでも進まないと思う。
ひとつめは捨てることになろうとも、とにかく作れ。
0788デフォルトの名無しさん2014/02/26(水) 20:04:22.24
>>786
javascriptとかPHPみたいにcharも触れない言語は糞なの。

>>787
まずはクラスとか捨てて関数とプリミティブ型と文字列でコンソールにhello worldやな。
0789デフォルトの名無しさん2014/02/27(木) 19:33:32.45
LispやForthみたいなParserなにそれ?みたいなのからAlgol系みたいなパーサが楽なのからやらないでいきなりC++みたいなキ印パーサとか正気とはおもえない。。
0790デフォルトの名無しさん2014/02/27(木) 21:18:27.77
お前の書き込みは如何なるパーサーでも解析できない
0791デフォルトの名無しさん2014/02/27(木) 21:41:54.51
C系は構文解析と意味解析が綺麗には分離出来ず、パーサからレキサへのフィードバックが
必ず必要になる(寿命管理のおまけつき)から目的を問わず最低開発コストは高いよ
原始的なC構文だけでもエラーや回復、構造体や共用体、ポインタの咀嚼までgdgdにならず完走するのは一仕事

でもこの辺一通り実装出来なきゃCパーサとしては使い物にならない
0792デフォルトの名無しさん2014/02/28(金) 00:10:08.13
つかみんなCの新しい実装をつくりたいの?
0793デフォルトの名無しさん2014/02/28(金) 01:44:45.36
楽しいよ?
C90ぐらいだとけっこう手ごろな規模だし
0794デフォルトの名無しさん2014/02/28(金) 12:48:03.64
トークンを区切るところまでできた。
まずは関数単位でブロックに分けてみる。
0795デフォルトの名無しさん2014/02/28(金) 14:57:32.10
関数の中から先にやるといっているのだろうか
0796デフォルトの名無しさん2014/02/28(金) 15:14:24.99
>>785 の続きか。すまないわすれてくれ
0797片山博文MZ無能 ◆T6xkBnTXz7B0 2014/02/28(金) 16:56:06.21
Cパーサのプロトタイプができたよ!!!!
http://katahiromz.web.fc2.com/mathai/cparser2.zip

暇だったら見てやって下さい
0798デフォルトの名無しさん2014/02/28(金) 20:56:29.92
>>796
うん。関数の中以外を分けてブロック化した。

do main : int {
return 0;
}

class A
{
do hello(){}
var i : int;
class B { enum C { a, b, c} }
}

こんな感じのものから、ソースファイル内にある
クラス名・メンバ関数名・メンバ変数名を全部抽出する。
冗長になるけど、関数宣言はdo, 変数宣言はvarを付けて分割しやすくした。
0799デフォルトの名無しさん2014/03/01(土) 03:19:13.07
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{}
}
0800片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/06(木) 13:56:35.01
__attribute__のパースに失敗する。reduce/reduce conflictが大量に発生する。大変難しい。
0801片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/06(木) 17:27:27.33
__attribute__を文法から除外することで解決した。
0802デフォルトの名無しさん2014/03/10(月) 21:18:01.35
SLR文法であるような現実的なプログラミング言語って何か例ある?
0803デフォルトの名無しさん2014/03/10(月) 21:38:02.51
なんでわざわざSLRにこだわるんだ?
SLRと状態数がほぼ同じで、より広い範囲の文法を扱えるLALRがあるのに
0804デフォルトの名無しさん2014/03/10(月) 21:54:58.29
じゃあGLRの教科書教えてください。
0805デフォルトの名無しさん2014/03/10(月) 21:56:16.29
GLRはamazonで検索すると出てくるよ
0806デフォルトの名無しさん2014/03/10(月) 22:01:27.17
あんがとあんがと。
0807デフォルトの名無しさん2014/03/10(月) 22:03:37.88
CD GLR385760 ハイドン弦楽四重奏曲選集/スコア&パートセット (2003/2/25)
現在お取り扱いできません

こんなのしかない・・・
0808デフォルトの名無しさん2014/03/10(月) 22:08:46.57
「コンパイラ」とかで検索かけて商品説明で自然言語とか扱ってるのを買えばいいんじゃね
0809デフォルトの名無しさん2014/03/10(月) 22:15:16.29
やあみんな、Scala開発者のための新しいopen-sourceのPEGパーサライブラリ−
"parboiled for Scala"を紹介しよう。Scalaのパーサコンビネータに似た内部DSLで
PEGパーサを作ることができ、以下の優位点を持つ。
 ・パーサ規則作成と、入力の解析とがきれいに分かれているので、速度が速い
 ・親切なエラー報告機能がある
 ・シンタックスエラーがあってもエラーリカバリして、最後までパースできる
0810デフォルトの名無しさん2014/03/10(月) 22:25:38.04
GLRって日本人が考えたんでしょ?
なんで日本語の本が無いの?
0811デフォルトの名無しさん2014/03/10(月) 22:49:40.31
すげえ!まるでbisonだ!
0812デフォルトの名無しさん2014/03/11(火) 00:10:35.61
PEGはメモリーを使いすぎることと、構文規則を書くときに左再帰が
許されないのが弱点だって。
左再帰は自動除去も考えられるけど、メモリーはどうなんだろな。
0813デフォルトの名無しさん2014/03/11(火) 10:55:35.08
何百メガもあるようなソースを処理するのでなければ今時問題ない。
0814片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/11(火) 11:32:31.67
@jonigataさんのCaperが劇的に高速化されたらしいぞ!!!
github.com/jonigata/caper
0815デフォルトの名無しさん2014/03/11(火) 11:37:22.16
PEG/Packratのメモリ使用量ってソース規模の関数?そうだっけ?
0816デフォルトの名無しさん2014/03/11(火) 12:08:58.00
バックトラックで数百メガ使うことはないだろ
右再帰だと関数とかの単位でけつまで抱え込むみたいだが
0817デフォルトの名無しさん2014/03/11(火) 22:47:14.53
メモ化で大量のメモリを消費する
0818デフォルトの名無しさん2014/03/11(火) 23:09:48.37
テキストの長さに比例しただけのメモリの消費を、今時「大量」とか言う奴は、
物事の感覚がおかしい。
0819デフォルトの名無しさん2014/03/11(火) 23:40:28.59ID:k/rF32la
Packratはもちろん空間計算量O(n)ではあるんだけど
文法によっては入力テキストの100倍とかメモリを消費するので……
たかが比例する程度だから問題ないと言えるほどでもないと思う
0820デフォルトの名無しさん2014/03/12(水) 22:24:28.72ID:MqlPltvC
このスレがワードの文字カウントで108881文字ある。
てことは、仮にUTF-8だった場合、300KB位じゃないの?
sjisだよとかそういう話じゃなくて。
PEGで書かれたHTMLパーサがCGIで使われていて、同時に100人がアクセスしてきたら
とか考え始めると、やっぱりメモリーも大事なんじゃないのかな。

あと、PEGの本紹介してください。
ドラゴンブックは読んで、自分でLALRパーサジェネレータまでは書いた。
100年かかった。
10年で出来るPEGの本があったら教えて!
メモリーを心配してるのは、字句解析器が吐くコードがやたら大きくなるので、
こりゃまずいと思ったから。
0821デフォルトの名無しさん2014/03/12(水) 22:52:28.64ID:MqlPltvC
IDの所為か人がいなくなった。
地球には自分一人しかいないような気がしてきた。
みんなどこ行ったんだ。
0822デフォルトの名無しさん2014/03/12(水) 23:15:34.15ID:9eCKiTHh
元から人口はこんなもんだった気がする
0823デフォルトの名無しさん2014/03/13(木) 00:08:05.31ID:nrkT8+wK
2月3月の書き込み多いやん。このスレ的には。
0824デフォルトの名無しさん2014/03/13(木) 19:02:35.71ID:q1sfF2Hs
>>814
ブログとgoogle codeしか見てなかったthx
0825デフォルトの名無しさん2014/03/13(木) 19:26:13.01ID:hR60BOrR
GitHubのCaperって今の時点で2つしかwatch無いのね
watch入れてない自分が言うのもなんだけど。(だって入れなくてもcloneできるしー)
0826片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/13(木) 20:18:49.02ID:AgM9wxep
注視しているならwatchをonにした方がいい。作者にも情報が伝わるし気合いが入ると思うから
0827デフォルトの名無しさん2014/03/14(金) 18:00:27.58ID:I0jjMatv
>>826
Pull request出してるのみたお
応援するお
0828デフォルトの名無しさん2014/03/14(金) 19:54:21.98ID:aEjAmidr
何で突然設定変更?と思ったら勢い5以上のスレ限定で告知とかやってたのか
何かお前は板の住人じゃないって言われてるみたいでちょっともやっとするなー

全スレに貼る労力を考えたら仕方ないのかも知れんが
0829デフォルトの名無しさん2014/03/15(土) 09:28:42.87ID:nEK2Wa8J
Caperって、コメントアウトしてあるけどLR文法を受理するパーサーも出力できるんだね。
ちょっとソースコードいじってみようかな。
いまどきLALRにこだわる理由もないし。
0830jonigata2014/03/16(日) 19:19:16.97ID:TnbKjXG7
>>829

ごめん、そのアルゴリズム考えた人に「うまく動かないんだけど」って
連絡したら、「そのアルゴリズムバグってる」って言われたんで
潰した。手元のバージョンでは消してあります。
0831デフォルトの名無しさん2014/03/16(日) 21:16:59.72ID:lTEgNzO7
おお、お久しぶり、っていうかCaperを自己紹介した時以来?
あのときから時々ではありますが、パーサが必要なときにいつも使っているので感謝してます。
0832デフォルトの名無しさん2014/03/16(日) 21:54:41.12ID:iSg2y7I0
LRを考えた人って言ったらKnuthか!
0833デフォルトの名無しさん2014/03/18(火) 03:58:52.77ID:uwWTDmYY
結局、LispやForthのような構文解析が簡単な言語には
BASICのようなインタプリタは速度面で勝てないのだろうか。
0834デフォルトの名無しさん2014/03/18(火) 04:17:09.74ID:AJd0B3pW
>>833
構文解析なんか最初の一回きりだろう?
構文解析が原因で実行速度で追いつけてないのはインタプリタの設計で毎回パースするようなアホな事してるかじゃないの?
0835デフォルトの名無しさん2014/03/18(火) 07:51:12.40ID:6VY9d7pb
BASICは解析結果を別ファイルに保存しておく機能がよくあったじゃん。
0836jonigata2014/03/18(火) 09:23:22.69ID:7A7zada1
>>831
ありがとう、使いづらいところがあったら教えて下さい!
今なら対応できるかもしれません。
(最近片山さんに煽られてエラーリカバリ実装するために
ソースほとんど全部読みなおしたところなので、把握出来てる)

>>832
david.tribble.com/text/honalee.html
これです! うまく動かなかった!
0837デフォルトの名無しさん2014/03/18(火) 14:35:25.99ID:5bt/pR7P
>>830
返信と現状の情報ありがとうございます。
ドラゴンブック読んだら自分でもLRくらいなら実装できそうなのでがんばってみます。
0838デフォルトの名無しさん2014/03/19(水) 17:26:05.81ID:OMDJGFgM
Caper の FUTURE WORKS の項目に EBNF の対応が課題としてありますが、
kp19pp では (group) / ? / * / + による修飾に伴って型とセマンティックアクションを指定し、
内部処理ではそれらを一種の Lambda 的な扱いで解決しています。
これらを参考として Caper 組み込んで下さるといろんな方達が助かります。
0839片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/19(水) 18:11:31.69ID:aM34prOC
>>838
じゃあ何でkp19ppを使わないの?
0840デフォルトの名無しさん2014/03/19(水) 18:34:07.04ID:OMDJGFgM
kp19pp を作った人が死亡したからです。
0841デフォルトの名無しさん2014/03/19(水) 19:04:08.24ID:aM34prOC
勝手にシンデレラ

死んでても使えませんか?
0842jonigata2014/03/19(水) 21:37:10.09ID:tn/Loswd
ちょっと良く覚えてないですが、
EBNFに対応するにはstd::vectorとか特定のデータ構造が必要になるなと思って、
セマンティックアクション側に特定の構造を期待しないcaperとしては
実現不可能だなと思ってやめた気がします。

今だったら、variadic template使えばいいかな?
0843jonigata2014/03/19(水) 21:39:03.68ID:tn/Loswd
いやvariadic template使っても難しいかな……
SemanticAction側の条件を厳しくする以外に
いい仕様が思いつかない
0844jonigata2014/03/19(水) 21:55:41.81ID:tn/Loswd
あ、次の引数を受け取る関数をセマンティックアクションに渡して、
セマンティックアクション側はテンプレートで受け取ればいいのか。

struct SemanticAction {
template <class F>
void SumList(F f) {
std::vector<Value*> a;
Value* v
while(f(v)) {
a.push_back(v);
}
}
};

こんな感じ
0845デフォルトの名無しさん2014/03/20(木) 03:19:30.93ID:2RkNjYZf
質問っす。

インタプリタのVMについてです。
明快入門 コンパイラ・インタプリタ開発を読み終えましたが、
バイトコード生成から命令実行のスイッチまでのあたりで、
あれよりいい方法はありませんか
また典型的にはどの様に実装されますか
0846デフォルトの名無しさん2014/03/20(木) 04:38:07.63ID:QFA+fydK
規模と寿命と使われ方、他にもターゲットマシンの性格によって使い分けるんでその質問に的確に答えるのは難しいんじゃないかな?
0847デフォルトの名無しさん2014/03/20(木) 04:46:25.82ID:2RkNjYZf
>>845ですです。

プラットフォームは当分x86ですが、
場合によっては移植できるよう機種依存コードはできるだけ書きたくありません。

目的は、インタプリタの実装の学習とテストです。

「いい方法」とは具体的には、速度と拡張性のことです。
まだ、有名どころのコードを読むまでのスキルがなく、参考にすることができません。

参考書籍の紹介だけども助かるのでお願いします。
0848デフォルトの名無しさん2014/03/20(木) 04:47:26.65ID:2RkNjYZf
だけども->だけでも
です。
0849デフォルトの名無しさん2014/03/20(木) 23:35:41.25ID:5JoitLb0
LR系のテーブル/オートマトン作成方法って調べれば調べるほど出てくるな。
0850デフォルトの名無しさん2014/03/20(木) 23:59:31.80ID:QFA+fydK
>>847
VMの高速化技法っつってもJITもあれば言語が動的オブジェクトへのメッセージ送りもってれば辞書キャッシュとかVM命令の粒度変更とかいろいろある
学習が主題かつ他人のコードを読みこなせないのであれば数こなすとか、出てる本片っ端から(外れもあるんだけど)読むとかから手つけておくのが一番の近道だと思うぞ
0851jonigata2014/03/25(火) 00:03:25.96ID:GAMZ9k7g
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のリストを返す。
引数リストなどに使う目的で作った。
カッコは役に立つところが思いつかないので実装してない
(今のところ実装する気もない)。
というか実用的な言語ではスラッシュ以外ほとんど使うところないと思ってる。

出力されるパーサ・ジェネレータのソースはより読みやすくなったはず。
0852デフォルトの名無しさん2014/03/25(火) 00:08:50.24ID:dHbpAKvO
EBNFってCaperみたいな強い静的型付け言語の機能を利用したものだとYaccみたいに全てを諦めるしか実装方法ない様に思えるんだけどどうなの?
0853jonigata2014/03/25(火) 22:09:52.29ID:GAMZ9k7g
とりあえずイテレータ対とか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は使えなかった。
返すイテレータの実装が悪いのかな?
誰かに添削して欲しい。
0854jonigata2014/03/25(火) 22:12:36.54ID:GAMZ9k7g
あ、気のせいだった。普通に使えた。

template <class S>
int Document(const S& x) {
for (const auto& y: x) {
}
return 42;
}

これで受けれる。
0855デフォルトの名無しさん2014/03/26(水) 17:47:48.07ID:pT8ZOuEm
マイクロソフトが、MS-DOSとWordのソースコードを一般公開したらしい。
サイズはなんと、300kb未満。(2014年3月26日)

「MS-DOS ソース公開」で検索。これは参考になるかな?
0856デフォルトの名無しさん2014/03/26(水) 21:14:23.26ID:Q9zmlY8C
アセンブラ読む気あるの?
0857デフォルトの名無しさん2014/03/26(水) 22:51:21.32ID:gTzKvy2/
アセンブリ
0858デフォルトの名無しさん2014/03/26(水) 23:00:27.71ID:FbuvqMDP
アセンブル
0859デフォルトの名無しさん2014/03/26(水) 23:43:33.35ID:14kSAhy1
EX10
0860デフォルトの名無しさん2014/03/27(木) 13:32:33.06ID:rBkYuYzY
確かに、公開しても、あるいは昔のCPUで簡単としても、
解読する暇はないな。意外な盲点だった。
0861デフォルトの名無しさん2014/03/27(木) 21:04:41.95ID:I9aZwzrL
MS-DOSの頃なら大半はC記述じゃないか?
前身のMSX-DOSの頃ですらM80/L80/Cと一連の移植ツールセットを売ってたし、
いかにもCP/Mベタ移植っぽい効率の悪い動きしてたからな
0862デフォルトの名無しさん2014/03/27(木) 21:19:26.84ID:8HxvNny/
> 前身のMSX-DOSの頃

単に事実誤認。
MS-DOS 2.0 のリリースと MSX の誕生が 1983 年。
0863デフォルトの名無しさん2014/03/27(木) 21:26:21.36ID:d2Tv2Evk
関係ないけどjonigata氏を今まで20代後半くらいかなと思ってたら全然違った
0864デフォルトの名無しさん2014/03/27(木) 21:39:43.18ID:zmWcMUxs
>861
MSX-DOS出たときにMSDOSはとっくに存在しとるじゃないか。
PC98でMSDOS上のCross AssemblerとかカノープスのZ80ボード経由でMSXのソフトとか開発するの普通じゃん。

>>859
むせる方か、東芝の12ビットチップの方かどっちだ?
0865デフォルトの名無しさん2014/03/28(金) 03:58:36.84ID:NMpBVu7e
>>864の言ってるソフトの括りは偏ってる気がする

I/O直叩きや高速性が求められるゲームなんかは当時はほぼ機械語でゴリゴリ書くしかなかったが
DOS系コード(チップ制御以外)は違いますがな、性能より開発コスト重視で割と酷い動きしてたじゃん
システムコールのレコード長周りとか
0866デフォルトの名無しさん2014/03/28(金) 07:38:02.50ID:PUotWYu6
MSXDOS.SYSやCOMMAND.COMのレジスタの使い方はコンパイラの匂いしてた記憶あるな。
MS-DOSもそうなってるかまでは知らんけど。
0867デフォルトの名無しさん2014/03/28(金) 13:09:02.05ID:konPatBX
省メモリ最優先なんじゃないの?
COMMAND.COMは所詮オプションだからCで書けるかも知れんな
0868デフォルトの名無しさん2014/03/28(金) 13:17:21.59ID:beMC8OFd
主要部分は640Kの最後のほうに置いて、下位アドレスに常に常駐するメモリ量は
最小限にするとか、COMMAND.COM だってけっこうエグいトリック使ってるよ。
0869デフォルトの名無しさん2014/03/28(金) 14:34:01.65ID:AwRMv83+
>>865
そうなのか?,あの頃ってMSX単体開発するのにMSXDOS出るまでって相当厳しかったんじゃ?
ASCII編のアセンブラとかもMSXDOS前提な書籍とかあったし。
おいらは若松のCP/Mマシンに9918AとPSGつないでMSXのソフト作ってた
タイトル言うと即バレするので書かないけど2つ程ROMカセットで売って貰った、98でクロスアセムでもROMエミュ持ってたらそっちの方が楽かもしれないと思った。

っていうかこれスレ違いだなぁ orz
0870デフォルトの名無しさん2014/03/28(金) 14:52:40.42ID:lxVw5nnh
いらん話題持ち込んで糞スレと化したw
0871デフォルトの名無しさん2014/03/28(金) 18:56:26.40ID:s2VWqUv5
>>868
その手のCで書き辛い部分はDOSに関しちゃごく一部だから、そこだけ別ルーチンで書いてリンクすれば終わるよ
容量制限の厳しいROMBIOSなんかはMSも涙ぐましい努力してたけど、DOSにそこまでの対効果を見込んだかどうか…

まあここでゴチャゴチャ言うより誰かDLして確認すれば正確に分かると思う
0872デフォルトの名無しさん2014/03/28(金) 23:34:37.88ID:NMpBVu7e
>>869
ここで言ってるDOS系コードはDOSの構成要素である各種コード群や
その上で動くソフトの事で、それらはCを排除する絶対的な要件って無かったよなって話
単体開発とかMSX限定とかそういう話じゃないよ、それらで大半を機械語で書く必然性の話
0873デフォルトの名無しさん2014/03/28(金) 23:49:20.80ID:beMC8OFd
ダウンロードして展開してみたけども、
msdos\v11source\ の中は *.ASM が7個と Tim_Paterson_16Dec2013_email.txt というテキストファイルが 1個。
msdos\v20source\ の中はファイル118個中 *.ASM が丁度100個、Cで書かれたソースコードは無し。
以上
0874デフォルトの名無しさん2014/03/29(土) 00:11:29.61ID:G9+QHheZ
>>873
今の時代でも、参考になりそうなテクニックは網羅されていたかな?
0875デフォルトの名無しさん2014/03/29(土) 00:16:37.14ID:dWnwe2uv
>>869
御冗談を
MSXでMSX-DOSのシステムコールが必要なソフトなんて
グラフサウルスくらいしかしらないんだが

MSX-DOSのシステムコールどころかBIOSすらほとんど使ってないはず
市販ソフトはほぼ自前で実装でしょ
MSX-DOSが無いと厳しいという話は聞いたことが無いなあ
0876デフォルトの名無しさん2014/03/29(土) 00:35:43.67ID: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のデバッグが相当面倒臭い事になる
0877デフォルトの名無しさん2014/03/29(土) 00:40:35.10ID:7AalbuHZ
いい加減にスレ違いと気づいて呉
0878デフォルトの名無しさん2014/03/29(土) 00:45:02.67ID:EN1l+2Rh
まぁこういった話は正確なことを残しておかないと間違いが後に残る
0879デフォルトの名無しさん2014/03/29(土) 01:34:52.89ID:GY0iNuGM
残しておく価値もない
0880デフォルトの名無しさん2014/03/29(土) 09:45:57.62ID:E1gpfH0G
残すべきスレはここじゃない
0881デフォルトの名無しさん2014/03/30(日) 00:07:47.84ID:fOfAZgZI
シリコンコンパイラ作れる猛者はこんな所に居るかい???
居る訳ないよね? とっくにカメラメーカーの研究所とかに就職してるよね?
0882デフォルトの名無しさん2014/03/30(日) 00:16:03.66ID:9JDD3652
つらそう
0883デフォルトの名無しさん2014/03/30(日) 00:20:42.16ID:ftWH2ajM
PEGとパックラットについて知りたいのですが、
オライリーの言語実装パターンっておすすめですか?
記述が少しあるようなのですが。
0884デフォルトの名無しさん2014/03/30(日) 00:22:50.64ID:fOfAZgZI
LLVMこそ至高
ならば全人類のためにLLVMのシリコンコンパイラを作ろうではないか
0885デフォルトの名無しさん2014/03/30(日) 00:26:39.08ID:tuvM7udc
はい
0886デフォルトの名無しさん2014/03/30(日) 02:02:51.37ID:fKxQVEZv
シリコンコンパイラ、何かと思ったら…研究費ふんだくってくるためのネタみたいなやつやな
0887デフォルトの名無しさん2014/03/30(日) 20:42:52.71ID:szVVotNM
ハードウェア記述言語の言語処理系のことを昔はそう呼んでたと思うけど、
それとはまた違うものを最近はそう呼んでるの?
0888デフォルトの名無しさん2014/04/01(火) 22:32:32.41ID:28c8XDsv
Caper更新キターーーー!!!
0889デフォルトの名無しさん2014/04/01(火) 22:43:42.45ID:yGT6IIrw
test
0890デフォルトの名無しさん2014/04/04(金) 13:43:25.03ID:FR4h37Hv
[速報]米マイクロソフト、C#/Visual Basic次世代コンパイラ「Roslyn」を
オープンソースで公開。独自言語など開発可能に。Build 2014
ttp://www.publickey1.jp/blog/14/cvisual_basicroslynbuild_2014.html
0891デフォルトの名無しさん2014/04/05(土) 22:42:43.55ID:YvEBV2Nh
MZたんがんがってるなぁ
mergeしてるjonigataさんも大変かも
0892デフォルトの名無しさん2014/04/06(日) 09:14:01.07ID:6fUxN2Jx
シリカコンパイラ
0893デフォルトの名無しさん2014/04/07(月) 00:43:08.70ID:JdSV9wAR
>>890
開発部隊がバラバラだから、JavascriptもC++(/CLI)も含まれてないw
だせえ
0894デフォルトの名無しさん2014/04/07(月) 07:14:43.95ID:aChPVlpJ
アホか
Roslynは現在C++で書かれているC#とVBのコンパイラをブートストラップで書き直すことで
メタプログラミングに使いやすくするプロジェクトだ
0895デフォルトの名無しさん2014/04/07(月) 10:37:36.86ID:H5+AU72d
何のために公開すると思ってんだという話
0896デフォルトの名無しさん2014/04/07(月) 14:10:26.78ID:phll1q+x
社内にはC++やJavascriptのプロジェクトはないんだろうな。
C#とVBとその二つへの埋め込みDSL以外はドキュメントでも触れてないから。
0897デフォルトの名無しさん2014/04/07(月) 14:17:28.62ID:ajgX5Rf9
つうかc#もjavascriptもまだ未完成で
perl6とかmozilla tamarinとかdehydra gccとか
ウヤムヤプロジェクトになってもおかしくないレベル。
0898デフォルトの名無しさん2014/04/07(月) 14:27:51.32ID:2P7F2w5n
>>896-897
とりあえず完結した入力文法持ってる言語ってFORTHとLISP以外ないんじゃないの?
0899デフォルトの名無しさん2014/04/07(月) 14:47:17.73ID:ajgX5Rf9
>>897
間違えた。
javascript→VB
0900デフォルトの名無しさん2014/04/07(月) 18:01:09.29ID:H5+AU72d
未完成ってのは仕様が固まってないじゃなくて
実装が不十分ってことかい
0901デフォルトの名無しさん2014/04/07(月) 19:10:55.36ID:GBBuIuYe
仕様もないけど。
実装=仕様の状態だから。
AST, APIが不完全。
0902デフォルトの名無しさん2014/04/07(月) 20:30:45.87ID:2P7F2w5n
rubyでつね
0903デフォルトの名無しさん2014/04/08(火) 12:29:52.55ID:8RVw5/Dj
roselyn APIのことね。
C#とVBのbindingがあってそれぞれの言語が対象になってる。
0904デフォルトの名無しさん2014/05/14(水) 15:19:04.24ID:dMA9XG5e
x86のintrinsicのまとまった情報が欲しい
0905デフォルトの名無しさん2014/05/14(水) 20:41:05.24ID:z3LIcL30
この辺かい?

アセンブリ命令
http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html?wapkw=x86+manual

Intrinsic
https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/index.htm#GUID-28F49E4A-615D-4373-A36E-C8A92E913325.htm
0906片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/15(木) 14:20:11.58ID:/BROOYqI
>>905
ありがとう。助かった。
0907片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/17(土) 22:18:34.48ID:MhKuGNEw
CaperにちょっとしたC言語ソースのパーサのサンプルを追加しました。
興味があったらご覧下さい。
https://github.com/jonigata/caper
0908デフォルトの名無しさん2014/05/18(日) 01:05:27.51ID:8NF5w4j9
lexerの自動生成って必要?
ANTLRみたいなタイプならともかく、flexみたいなのって
よほど単純な言語でない限りは余計に複雑になるしデバッグもしづらくなる気がする
0909デフォルトの名無しさん2014/05/18(日) 01:14:44.51ID:VbYhl7s+
必要ないものは使わなければいい。
parser generatorも同様。
0910デフォルトの名無しさん2014/05/18(日) 04:01:55.25ID:EpNTbyyn
そらまあ慣れてればパーサも手書きで十分だろうけど
0911デフォルトの名無しさん2014/05/18(日) 05:18:01.09ID:km1NGPSj
LALR手書きできるスキルがあれば…orz
0912片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/18(日) 13:38:13.73ID:wTsBQBni
Caperにスマートポインタサポートを追加しました。
0913デフォルトの名無しさん2014/05/18(日) 19:32:32.83ID:3lmx3bd8
はいはいはいはーい質問でーす

処理系のVMについてですが
オペコードはスイッチ文(switch, if)で一つずつ分岐するのと
命令一つ一つを関数でつくりそれを実行するのではどちらが早いですか?
ちなみに処理系はCでできています

おながいします!
0914デフォルトの名無しさん2014/05/18(日) 19:43:06.46ID:wTsBQBni
>>913
実測値を信じろ
0915デフォルトの名無しさん2014/05/18(日) 19:45:19.17ID:VLKMweCv
名前どうしたw
0916デフォルトの名無しさん2014/05/18(日) 20:07:20.77ID:3lmx3bd8
>>914
大手スクリプト言語どっちなんじゃ?
0917デフォルトの名無しさん2014/05/19(月) 01:58:06.48ID:Si0coWpv
>>913
タイトなとこだけ展開。
昔のJITじゃないVMの読むと結構出てくる。
https://sites.google.com/site/io/dalvik-vm-internals
ちょこまかとした書き換えがすごく効く。
gotoとかloadとか小さい命令で。
0918デフォルトの名無しさん2014/05/19(月) 13:46:34.97ID:Bh2YKOjV
>>911
LALR(1) も変形すれば LL(2) くらいにはなるので
あとは再起下降でもなんでも好きなようにすればいい
0919デフォルトの名無しさん2014/05/19(月) 16:15:14.07ID:rN3m2Poq
(1)じゃないたいていの言語でも、たいていは(2)ぐらい、というのは真だが、
変形すればLL(2)ってことはない。
0920デフォルトの名無しさん2014/05/19(月) 20:46:03.83ID:utepvwi4
手書きするなら左再帰に注意してLL(1)で十分だと思うよ。
0921デフォルトの名無しさん2014/05/20(火) 00:22:32.49ID:WYH9CLBB
ていうか手書きなら自然にループとか書けるから、再帰使わなくても
<X> = a (b c)* d
みたいな拡張BNFをそのままプログラムにすると思えばいい。
0922デフォルトの名無しさん2014/05/20(火) 01:02:13.67ID:ezmBCAPL
文法が再帰的なのにか。
0923デフォルトの名無しさん2014/05/20(火) 07:35:25.85ID:wdE7nCB8
本質的に再帰的なのと実装の都合で再起を使ってるのは区別しようね
0924デフォルトの名無しさん2014/05/20(火) 10:40:44.97ID:fbMM1sIr
LL (1) で足りるかどうかの方が問題なんじゃね
0925デフォルトの名無しさん2014/05/20(火) 11:38:51.42ID:3nq9aFUp
パーザは本質的に再帰。
0926デフォルトの名無しさん2014/05/20(火) 13:53:02.72ID:WYH9CLBB
入力の読み取りを後戻りさせたくないとか、mallocとかしたくないという昔の事情が (1) を欲しただけで、
部分的にちょっと (2) になってる、とかなら今時のマシンと言語とライブラリならたいして問題ない。

本質的に再帰になってるものとしては、式の構文とかがあるけど、普通にループで書ける。

<EXPR> : <TERM> (('+'|'-') <TERM>)*
<TERM> : <FACTOR> (('*'|'/') <FACTOR>)*
<FACTOR> : num | '(' <EXPR> ')'

<FACTOR> のルールにある、「カッコ内の<EXPR>」みたいなのを「本質的に再帰」と言う、
と言えば、まぁそうなんだけど。
0927デフォルトの名無しさん2014/05/20(火) 14:07:45.06ID:PibgqYJG
abcとaをはんべつするときは
文字を2こ戻す必要ありますよね。
abdとかabeを弾いてaにしなければならなのですから。
0928デフォルトの名無しさん2014/05/20(火) 14:13:37.37ID:mjphnHY1
boost.spiritはLL(∞)です。
0929デフォルトの名無しさん2014/05/20(火) 20:27:27.59ID:3YV0fEWD
くわしく
0930デフォルトの名無しさん2014/05/21(水) 01:50:35.06ID:aDDYIuqo
LL(*)とか言ってるのはANTLRじゃなかったっけ
なんかPLDIの論文で見たような記憶が
0931デフォルトの名無しさん2014/05/21(水) 09:18:01.98ID:Fj6ednoX
LL(k) k:定数
0932デフォルトの名無しさん2014/05/24(土) 01:20:56.66ID:qfxUsSTH
みんなどんな言語つくってるの?
0933片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/05/29(木) 17:26:52.76ID:XnoInNKg
ひらがな電卓、作ったよ!!!

ひらがな電卓CalcH
http://katahiromz.web.fc2.com/calch/
0934デフォルトの名無しさん2014/05/29(木) 18:52:19.98ID:LQk3BeN6
片山博文MZさんはGithubというキーワードでぐぐると幸せになれる。
0935片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/05/30(金) 12:21:16.56ID:SSvUP3u/
GitHubはバリバリ使ってるよ。リクエストはまだないけど
0936片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/01(日) 06:52:57.24ID:CnlwSSTK
日本語は同音異義語が多い。人工言語に比べて、自然言語は多態性が問題となる。
そこでこれまで使われてきたのが形態素解析だが、
多態性が解消できれば人工言語の構文解析の手法がそのまま使える可能性が高い。
そのことをひらがな電卓で示そうと思う。
0937デフォルトの名無しさん2014/06/01(日) 08:52:19.11ID:4IM3O9wE
お前は何を言ってるんだ
そんなもんBrainfuckのオペを日本語に置き換えたネタと変わらんわ
0938デフォルトの名無しさん2014/06/01(日) 13:03:56.67ID:iF6nhgL2
>>936
lojban で示してくれ
生来 esiperantisto の俺も lojban に傾倒しつつある
0939デフォルトの名無しさん2014/06/01(日) 19:01:15.96ID:r6R+kq87
日本文化には敢えて日本語の多態性をフル活用するカテゴリーがあるからねえ

自然言語から多態性を排除したモノをプログラム言語として使うというのはアリだけど
0940デフォルトの名無しさん2014/06/04(水) 11:36:58.64ID:JjkiX3zX
各非終端記号を囲むカッコが2つ以上あるとLL文法じゃなくなるな。
0941デフォルトの名無しさん2014/06/04(水) 14:22:25.33ID:H9m/5fkb
具体的にBNFで
0942デフォルトの名無しさん2014/06/05(木) 10:04:10.48ID:1JqbWMwZ
B:=C|(C)
A:=B|(B)
こんな感じ?
0943デフォルトの名無しさん2014/06/05(木) 10:10:07.49ID:1JqbWMwZ
A:=BC
B:=D|(D)
C:=E|(E)
こっちの方が分かりやすいな。
0944デフォルトの名無しさん2014/06/05(木) 10:13:32.16ID:1JqbWMwZ
A:=B|C
B:=D|(D)
C:=E|(E)
違った。
0945デフォルトの名無しさん2014/06/05(木) 17:19:48.25ID:bOGqmnDA
その例なら、

A := BC
BC := '(' DE ')' | DE
DE := D | E

と、くくり出せる。
0946デフォルトの名無しさん2014/06/06(金) 11:15:49.36ID:y0bQ4ynG
なるほど。
0947片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/06(金) 16:52:16.19ID:dyn5MnFB
このスレのテンプレにCaperを追加しておくれ。
jonigataさんのパーサジェネレータCaperは充分に実用的になった。

Caper
https://github.com/jonigata/caper
0948デフォルトの名無しさん2014/06/06(金) 20:49:34.19ID:iMYjirOz
>>947
アレは良い物ですな、つかなかなかここまで細かい事できるのに使い方が簡単なのってなかなか無いんだよね。
自分使うだけでアレだけど、MZはpullrequest結構出しててそれもとっても有り難かったです。
0949デフォルトの名無しさん2014/06/06(金) 20:57:54.81ID:Y8WrhCVM
今作ってる言語でCaper組み込む予定だよ。
いいよね、Caper。
0950片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/07(土) 19:30:42.70ID:3R8CEA88
実行時に文法を動的に変えることできますか?
0951デフォルトの名無しさん2014/06/07(土) 20:14:40.23ID:RFWgpx3m
主語を明示してください
0952片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/07(土) 20:32:42.40ID:3R8CEA88
プログラムが実行時に解析する文法を動的に変えることできますか?
0953デフォルトの名無しさん2014/06/07(土) 20:37:06.36ID:SxbAzKvi
eval
0954デフォルトの名無しさん2014/06/07(土) 20:44:08.32ID:ZfdboDuT
>>952
たとえばオブジェクト指向言語であれば
Gof本のInterpreterパターンで実装することによって
「実行時に解析する文法」を動的に構成できます
関数型言語だとコンビネータやモナドを使った
構文解析器(パーザ)の動的な構成技法があります
0955デフォルトの名無しさん2014/06/07(土) 22:43:46.58ID:3R8CEA88
>>954
わかった
ちょっとjonigataさんに相談してみる
0956デフォルトの名無しさん2014/06/08(日) 16:02:17.85ID:3LWaPBPW
解析実行時に文法を切り替えるっていうと
Boost::Spiritでruleインスタンスを差し替えるのを先に思いついた
0957jonigata2014/06/08(日) 21:20:13.94ID:/sgfaDLO
caper、動的エンジンもともともってるよ。
caperの文法ファイルは動的エンジンで起動時に文法作って読んでる。
0958デフォルトの名無しさん2014/07/12(土) 10:00:10.48ID:RjnQ2yc8
A:=C|BC
B:=B|(B)
C:=C|(C)
これだとくくり出せないし、LL文法じゃないですよね。
カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃないですよね
0959片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/13(日) 02:56:51.90ID:rSyi36+2
#include "http://example.com/my_library.h";

こんな機能があってもいいと思う。
0960デフォルトの名無しさん2014/07/13(日) 03:18:39.87ID:EUkLrXER
その場合リンカもネット越しにリンクできないと駄目だな
0961デフォルトの名無しさん2014/07/13(日) 03:19:59.56ID:hh7t9GxI
Gogleならやってくれそう
0962 ◆QZaw55cn4c 2014/07/13(日) 08:51:38.45ID:OfL9oG5/
>>960
CPP だけの問題なのでは?どうしてリンカが関係するの?論理的に説明してね
0963デフォルトの名無しさん2014/07/13(日) 10:10:10.25ID:p5bwqgUP
ヘッダのインクルードはライブラリを使うためのもの、という固定観念だろう
0964デフォルトの名無しさん2014/07/13(日) 10:11:05.79ID:fq5Ei1vd
そんなどうでもいいことより
958についてどう思う?
0965デフォルトの名無しさん2014/07/13(日) 10:35:33.89ID:YSmlh2iv
1. ヘッダーをネット経由で参照するなら、libもネット経由で参照するだろう
libだけダウンロードしてヘッダーはダウンロードしないのは変だから
2.libファイルをネット越しに参照するなら、リンカもネット越しに対応する必要がある
3.よって、リンカもネット越しに対応しないとだめ
0966デフォルトの名無しさん2014/07/13(日) 11:03:49.99ID:p5bwqgUP
> libだけダウンロードしてヘッダーはダウンロードしないのは変だから

この時点で話が逆になってるし
0967デフォルトの名無しさん2014/07/13(日) 12:32:33.10ID:fq5Ei1vd
A:=C|BC
B:=B|(B)
C:=C|(C)
これはLL文法に出来ないということでよいですか[y/n]
0968デフォルトの名無しさん2014/07/13(日) 12:38:12.73ID:hh7t9GxI
NFSを知らん世代がC使うようになったのか胸熱
0969デフォルトの名無しさん2014/07/13(日) 12:45:23.98ID:+97kXbwc
MZはナウいヤングメンなので、UNIXなんて知りませぬ
0970デフォルトの名無しさん2014/07/13(日) 16:30:35.77ID:4JQGeYPE
aとbはエイリアスだから W
0971デフォルトの名無しさん2014/07/13(日) 18:44:05.22ID:p5bwqgUP
IDで追いかけるなんて、惨めだなw
0972デフォルトの名無しさん2014/07/13(日) 18:57:17.40ID:4JQGeYPE
http://hissi.org/read.php/tech/20140713/cDVid3FnVVA.html

初心者を脱して覚えたてのエイリアス使ってやろうと、
「aとbがエイリアスだったら…」とやっちゃったんだろうな。W
0973デフォルトの名無しさん2014/07/13(日) 20:21:17.96ID:p5bwqgUP
自分が初心者を脱したことがうれしいらしいw
0974デフォルトの名無しさん2014/07/13(日) 21:08:09.17ID:c9esStKn
なんでスレ違いの話題でスレ合ってるのをスルーするわけ?
0975デフォルトの名無しさん2014/07/14(月) 00:06:14.02ID:IJfuG6Dx
>>947
これのJavaを生成してくれるものってないのでしょうか
0976デフォルトの名無しさん2014/07/14(月) 09:01:52.27ID:0ty9SLgy
6月8日から誰も書き込まなくて
やっと7月12日に書き込んだと思ったら
それを急にスレ違いな書き込みで
スルーするっておかしくない?
0977デフォルトの名無しさん2014/07/14(月) 16:07:02.50ID:85+K9ELL
>>976
答えられる人がいないだけだろ
0978デフォルトの名無しさん2014/07/14(月) 20:53:05.31ID:hsWcAmzQ
>>976
しょうがないから説明するが、>>958の文法は無限ループだから何法だろうがパースできないわけで、
答えなんかないわけよ。そういう頭の悪そうな発言をする人がこのスレに来るミステリー。
あなたがおかしなことを書いてしまったのだから、バカにされたり無視されたりするのは当然の
結果なんだが、俺様が一ヶ月ぶりに質問してやったのにスルーするなという、勘違い甚だしい
態度に二度びっくりだよ。
0979デフォルトの名無しさん2014/07/14(月) 22:34:06.61ID:+HCYiRGv
じゃあ最初からそれを書けよ
一切対応せず延々とスレチの話をしてやがって
何が「しょうがないから」だよ
0980デフォルトの名無しさん2014/07/14(月) 23:47:27.27ID:4Au1+Pyc
皆のスルー力が高いからって喚くな
0981デフォルトの名無しさん2014/07/15(火) 14:59:02.41ID:JZ9KbigV
>>978
意味不明。
LL文法ではないかあるかを聞いているのに
「何法でもパースできないから答えが無い」とか的外れな回答をするアホ。
一言LL文法で済む話なのに。
ちなみにプッシュダウンオートマトンでパースできますが、これは
秘密にしておこう。
0982デフォルトの名無しさん2014/07/15(火) 15:11:44.46ID:JZ9KbigV
よくみると>>958は文法をきいているのであって、
解析法を質問しているんじゃないんだよな。
本当に的外れワロスwww
少なくとも文脈自由文法に含まれることは確かだな。
0983デフォルトの名無しさん2014/07/15(火) 22:11:20.95ID:mz5l6m+l
何言ってるのかわからない。
>>958は、解析器の作成に失敗するか、常にパースに失敗する解析器しか生み出さない。
パースが成功することは決してない。パース*できない*。
だから、>>967の「LL文法にできるか」という問いには、
「>>958は意味不明であり、あなたが何をしたいのかわからない」
「あなたがやりたいことがLL文法にできるかは『答えようがない』」
っていうのが正解でしょ。

ちなみに>>958の「カッコが2つ以上あると特殊な場合を除いてLLぶんぽうじゃない」については
「LLで、先読みの上限を超えたら上手く扱えないだろうけれど、カッコのせいじゃないだろ。」
って答えができるが態度悪いやつに説明するのが面倒だから無視しているだけね。
0984デフォルトの名無しさん2014/07/16(水) 09:34:22.88ID:iVIaM1wP
パーサーに>>958を読み込ませて解析できるかってことをきいてるんじゃなくて、
985を変形してLL文法解析器で構文解析できるかをきいているんでしょ。
0985デフォルトの名無しさん2014/07/16(水) 09:39:32.16ID:iVIaM1wP
あと先読み数は関係ない、LL(1)とは書いてないから。
LL(∞)だから扱えないとうのは理由にならない、無限の代わりに十分に大きいN
を使えばいいんだから。
0986デフォルトの名無しさん2014/07/16(水) 09:52:56.89ID:Dccn/eWm
態度を持ち出すとはワロタ
劣勢ですなあ
0987デフォルトの名無しさん2014/07/16(水) 10:06:34.41ID:iVIaM1wP
過疎になると初めに書く勇気が無いくせに
勇気のある一人誰かが書き込むとハイエナのように
群がってそいつの引きづりおろして人の手柄を横取りする
ハイエナばっかだな。
とくに>>947と片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0(>>959)
どうせこのドチラかの自演だろうけど。
ちなみにおれは通りがかってこのスレを見ただけだがなw
0988デフォルトの名無しさん2014/07/16(水) 10:12:05.76ID:iVIaM1wP
訂正:>>947→>>975
0989デフォルトの名無しさん2014/07/17(木) 03:01:43.62ID:syfeQpO8
文脈自由文法が生成する文字列は、
開始記号を有限回書き換えて得られる終端記号の並びだと定義されている
>>958は何回書き換えても非終端記号が残るのに何をどうしろと

どこかにεあたりが抜けているような気はする
レス数が950を超えています。1000を超えると書き込みができなくなります。