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

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

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

1 :デフォルトの名無しさん: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/

2 :デフォルトの名無しさん:2011/01/28(金) 20:33:40
Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/

★コンパイラ一般

・色々なツールの紹介
 http://catalog.compilertools.net/
・コンパイラ関連のリンク集
 http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml
・スクリプティング言語資料室(仮) (リンク集)
 http://www.kt.rim.or.jp/~kbk/
・Compiler Construction
 http://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/
・情報システム工学実験 III コンパイラ・コンパイラ
 http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html
・OS/Programming 簡単な C コンパイラ
 http://www.csg.is.titech.ac.jp/~chiba/lecture/os/
・正規表現
 http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm
・コンパイラ研究・開発情報の一集積所
 http://compilers.cs.uec.ac.jp/
・Links and Selected Readings
 http://www.gnu.org/software/gcc/readings.html
・国産のコンパイラ共通インフラストラクチャCOINS
 http://www.coins-project.org/

3 :デフォルトの名無しさん: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

4 :デフォルトの名無しさん: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

5 :デフォルトの名無しさん:2011/01/28(金) 20:34:35
★学会
・PLDI http://research.microsoft.com/conferences/pldi06/
 コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL http://www.cs.princeton.edu/~dpw/popl/06/
 PLDIよりは理論寄りだが大いに参考になる。
・ICFP http://icfp06.cs.uchicago.edu/
 関数型言語に関する学会。とても難しい。
・OOPSLA  http://www.oopsla.org/
 オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC http://www.st.cs.uni-sb.de/cc/
 ヨーロッパ系。派手さはないが堅実。

6 :デフォルトの名無しさん: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
 初心者向けの優しい解説本。

7 :デフォルトの名無しさん:2011/01/28(金) 20:35:38
・最新コンパイラ構成技法(Modern Compile Implementation in ML(タイガーブック)の訳)
 http://www.amazon.co.jp/dp/4798114685

・ふつうのコンパイラをつくろう
 http://www.amazon.co.jp/dp/4797337958

・プログラミング言語を作る
 http://www.amazon.co.jp/dp/4774138959

・やさしいインタープリタの作り方入門
・やさしいコンパイラの作り方入門
 http://www.amazon.co.jp/dp/487783219X
 http://www.amazon.co.jp/dp/4877832203

8 :デフォルトの名無しさん:2011/01/28(金) 21:45:32
>>1
スレ立て乙

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

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

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

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

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

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

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

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

残りはわからん。

12 :デフォルトの名無しさん:2011/01/29(土) 11:11:21
算体 object
算帖 file
算程 process
算譜 program
算法 algorithm

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

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

14 :8:2011/01/29(土) 13:24:01
>>12
素晴らしい。全問正解だ。

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

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

15 :デフォルトの名無しさん:2011/02/02(水) 00:51:19
BNFとか全然わかんね

力押しでゴリゴリ動かしてるぜー

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

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

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


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

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

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

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

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

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

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

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

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

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

23 :デフォルトの名無しさん:2011/02/02(水) 20:57:14
スキャナがパーサの状態に依存する言語は多いけどな

24 :デフォルトの名無しさん:2011/02/02(水) 21:08:01
>>22
gccは手書きだよ

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

26 :22:2011/02/02(水) 21:33:40
>>24
えええっ!、そうなんだ。知らんかったよ。

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

28 :デフォルトの名無しさん:2011/02/02(水) 22:28:26
ここはポコポコオレ様言語を作るスレだろ。

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

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

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


31 :デフォルトの名無しさん:2011/02/03(木) 07:49:27
そこで PEG ですよ

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

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

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

13.4 SSA形式での最適化のアルゴリズム の 13.4.6 定数伝播 内の、
b. 条件文を考慮したアルゴリズム の部分です(第2版ではp.367)。

図13.41 の定数伝播の例(その1)(c) にて、
 k3 = φ(k2,k1);
の行を処理した結果が 未→0 となっていますが、この理由が分かりません。
この時点で
 k1→1
 k2→0
なので、表13.1 により、不定(c≠c') になるのではないでしょうか。


35 :デフォルトの名無しさん:2011/02/15(火) 06:57:14
>>22
lispのリーダーマクロみたいな仕組みで別言語に化けられる奴とかってないかな?

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

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

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

38 :デフォルトの名無しさん:2011/02/16(水) 10:43:23
AのFollow-setでいいんじゃない

39 :デフォルトの名無しさん:2011/02/16(水) 13:27:01
ありがとうございます。

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

41 :デフォルトの名無しさん:2011/02/16(水) 20:25:50
L -> E

E -> a
E -> a b

のとき、first(E) in follow(L)なのでしょうか?
Eはepsilonを生成しないのでfollow(L) = phiだと思うのですが...

ドラゴンブックによる解説だと
(1) A -> alpha B betaの時
  follow(B) := first(beta)∪follow(B)\epsilon
(2) A -> alpha B betaでepsilon in first(beta)もしくは A -> alpha Bの時
  follow(A) := follow(B)∪follow(A)\epsilon
なのであっている気がするのですが...

42 :デフォルトの名無しさん:2011/02/16(水) 20:28:29
すみません。言葉足らずでした。

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

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

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

44 :34:2011/02/17(木) 23:42:20
COINSのソースを読んで解決しましたので、質問を取り下げます。

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

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

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

47 :デフォルトの名無しさん:2011/03/08(火) 15:41:47.02
ぷよぷよ

48 :デフォルトの名無しさん:2011/03/08(火) 15:45:30.82
付属のモジュールを組み立てるだけなのにオリジナルとは一体

49 :デフォルトの名無しさん:2011/03/08(火) 15:48:35.94
ウリジナルニダ

50 :デフォルトの名無しさん: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. までしか起こりませんでした。

51 :デフォルトの名無しさん:2011/04/03(日) 14:41:58.25
基本的にCを元に、ちょっと改造したC作ってみたいんだけど、
参考しても(パクっても)GPLに汚染されない、無料なwindows向けのCのソースってない?

52 :デフォルトの名無しさん:2011/04/03(日) 15:26:35.67
>>51
http://pcc.ludd.ltu.se/building/

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

54 :デフォルトの名無しさん:2011/04/03(日) 15:45:39.15
>>53
http://www.mingw.org/license

55 :デフォルトの名無しさん:2011/04/03(日) 15:47:16.95
http://www.mingw.org/license

56 :デフォルトの名無しさん: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?

57 :デフォルトの名無しさん:2011/04/03(日) 16:12:55.55
>>56
自分なら w32api: のパラグラフ全文を入れると思う

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

59 :デフォルトの名無しさん: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.

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

61 :デフォルトの名無しさん:2011/04/05(火) 10:55:07.51
昔SourceForge.jpがやってた。

62 :デフォルトの名無しさん:2011/04/05(火) 20:34:39.93
西日本も福島原発の放射能に曝される。

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

63 :デフォルトの名無しさん:2011/04/06(水) 02:55:03.68
>>61
どうして止めたんだろう

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

65 :デフォルトの名無しさん:2011/05/05(木) 18:19:53.36
hosyu

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

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

エイホは知らんが。

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

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

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

69 :デフォルトの名無しさん: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

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

71 :デフォルトの名無しさん:2011/06/12(日) 03:55:38.58
https://github.com/tolmasky/language

72 :デフォルトの名無しさん:2011/06/14(火) 07:45:32.22
http://chris.wailes.name/?page_id=97

73 :デフォルトの名無しさん:2011/06/14(火) 19:09:26.75
常識無いな
何のコメントも無しにリンク張るなよ紛らわしい。

74 :デフォルトの名無しさん:2011/06/14(火) 19:20:31.08
ご立腹ですねw

75 :デフォルトの名無しさん:2011/06/18(土) 15:52:19.34
>69

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

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

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

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

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

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

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


78 :デフォルトの名無しさん:2011/06/21(火) 06:56:57.61
JITコンパイルについて詳しいことが書かれた成書って無いんじゃないかなぁ

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

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

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


80 :デフォルトの名無しさん:2011/06/21(火) 12:06:28.43
最近だとLLVMを触ってみるのもいいかもしれんねぇ

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

81 :デフォルトの名無しさん: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

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

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

84 :デフォルトの名無しさん:2011/06/21(火) 12:58:12.07
竜虎って言うけどまさに言葉どうりの2冊だな。

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

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

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


ゴミは何いってもゴミ

88 :デフォルトの名無しさん:2011/07/03(日) 15:35:05.84
https://github.com/GenTiradentes/tinyvm

89 :デフォルトの名無しさん: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}

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

90 :89:2011/07/04(月) 11:57:48.68
自己解決しました。

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

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

だと、

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

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

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

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

91 :89:2011/07/04(月) 12:02:36.54
すいません、誤報でした

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

numerator   {uinteger}

になっていました。

92 :デフォルトの名無しさん:2011/07/04(月) 12:06:31.36
Flex「落ち着いて!」

93 :89:2011/07/04(月) 12:15:13.40
やりたいことが単純すぎて、どこに盲点があるのか…

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

94 :89:2011/07/04(月) 12:31:56.41
次こそは間違いないはずだ!

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

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

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

95 :デフォルトの名無しさん:2011/07/06(水) 10:22:42.74
ジャングルブックってのもあるらしいぞ

96 :デフォルトの名無しさん:2011/07/06(水) 18:11:18.05
ジュマンジ。

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

98 :デフォルトの名無しさん:2011/07/12(火) 15:47:12.36
読み直し

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

現代ではぜんぜん大事ではないね。

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

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

101 :デフォルトの名無しさん:2011/07/12(火) 17:48:45.83
ワンパスで処理しきれん時代も今は昔、だな

102 :デフォルトの名無しさん:2011/07/15(金) 12:43:55.55
re2c 0.13.5で使用しています。

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

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


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

103 :デフォルトの名無しさん:2011/07/15(金) 14:30:29.02
re2cには最短一致指定がないしねえ。

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

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

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

107 :デフォルトの名無しさん:2011/08/04(木) 13:52:16.06
オートマトンの定義をみなおしてこい。

108 :デフォルトの名無しさん:2011/08/23(火) 14:28:26.14
新しい言語を作りたいのだけど
関数型とか手続き型とかじゃなくて、既存にない新しい型の言語を作りたいけど
そんな型はもう発見できないのでしょうか?

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

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

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

112 :デフォルトの名無しさん:2011/08/23(火) 16:11:23.23
>>108
頑張って発明しろ

113 :デフォルトの名無しさん: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

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

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

115 :デフォルトの名無しさん:2011/08/27(土) 13:02:13.55
FIFOLか

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

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

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

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

120 :デフォルトの名無しさん: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個というのは複数通りの文法規則があてはまる場合
長い方と短いほうどちらになるのでしょうか?

121 :デフォルトの名無しさん:2011/09/17(土) 09:05:52.81
還元/還元コンフリクト

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


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

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


125 :デフォルトの名無しさん: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つのシフトが衝突している
シフトと還元ではシフトが優先されるので最後のシフトの方法が選ばれる

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

127 :デフォルトの名無しさん:2011/09/18(日) 22:03:31.41
>>125
どうもです。


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

129 :デフォルトの名無しさん:2011/09/19(月) 13:59:37.83
>>125
恐悦至極にございます。

130 :デフォルトの名無しさん:2011/09/19(月) 22:38:31.94
いや、誰も誉めてないから

131 :デフォルトの名無しさん:2011/09/23(金) 13:55:04.37
恐悦至極
意 味: 相手の厚意に大変喜び感謝すること。

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

133 :デフォルトの名無しさん:2011/10/01(土) 14:50:18.01
構文解析関係の本をamazonで探して買えば?

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

135 :デフォルトの名無しさん:2011/10/01(土) 17:03:42.51
a * b; // 掛け算ですか? いいえ、変数宣言です

136 :デフォルトの名無しさん:2011/10/02(日) 00:03:44.98
C++は複雑すぎてないらしい

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

138 :デフォルトの名無しさん: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

139 :デフォルトの名無しさん: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)だと、
「抜け」が出てくるんじゃないかと思います。

140 :デフォルトの名無しさん:2011/10/11(火) 15:19:34.23
そんな最後の方のページまで読んでるなんてすごいね。

141 :デフォルトの名無しさん:2011/10/11(火) 21:10:47.98
え、みんな最後まで行かないで投げちゃうの?w

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

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

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

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

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

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

145 :142:2011/10/12(水) 23:24:56.51
そういうことです。根から順に一度ずつ辿れるんですね。
最適化って、うまく動くとすっごい楽しいです。


146 :デフォルトの名無しさん:2011/10/13(木) 02:39:26.68
   ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
 <SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA!SSA! >
  ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
    、        、        、       、        、
  /っノ      /っノ      /っノ     /っノ      /っノ
 / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧ / /  ∧_∧
 \\(    )\\(    )\\(    )\\(    )\\(    )


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


147 :デフォルトの名無しさん:2011/10/13(木) 04:27:44.86
普通。

148 :デフォルトの名無しさん:2011/10/13(木) 05:30:28.89
flexは?

149 :デフォルトの名無しさん:2011/10/13(木) 12:33:03.10
>>146
ありがちな話

150 :146:2011/10/13(木) 15:42:43.83
やっぱそうなのか。ありがとう。

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

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

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

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

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

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


【分からない理由】

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


ご親切な方のアドバイスをお願いします。

152 :デフォルトの名無しさん:2011/10/20(木) 08:59:10.43
ドラゴンブックのアルゴリズム4.12「先読みの決定」を本にある文法(4.20)に適応させた場合において、
アルゴリズム中に現れるgoto(I, X)(ただしI∋ [B→γ・δ])の結果に一致する主要項の集合がどうしても見つかりません。
自分で走らせたプログラムを実行すると、以下の様になります。
J = {
 [S'→・S, #/$]
 [S→・L=R, #]
 [S→・R, #]
 [R→・L, #]
 [L→・*R, #/=]
 [L→・id, #/=]
}

(1回目の試行) 「[A→α・Xβ, #]がJ'に含まれている(伝搬)」
  [A→α・Xβ, #] = [S'→S・, #/$] (「#」に対して)
  goto(I, X) = {[S'→S・, $]}
(2回目の試行) 「aを#以外の記号として[A→α・Xβ, a]がJ'に含まれている(内部生成)」
  [A→α・Xβ, #] = [S'→S・, #/$] (「$」に対して)
  goto(I, X) = {[S'→S・, $]}
(3回目の試行) 「[A→α・Xβ, #]がJ'に含まれている(伝搬)」
  [A→α・Xβ, #] = [S'→L・=R, #] (「#」に対して)
  goto(I, X) = {[S→・S, $], [S→・L=R, $], [S→・R, $], [R→・L, $], [L→・*R, $/=], [L→・id, $/=]}

三回目の試行で[S'→L・=R, #]がgoto(I, X)に含まれていないためエラーになります。
本を読み進めていくと「I_4の主要項L→*・Rには先読み=が内部生成され、項[L→・id, =]によってI_5のL→id・には先読み=が内部生成される」
とあるので主要項から主要項集合へのマップを考えたのですが、I_2とI_8でR→L・が重複してうまくいきません。
どなたかご教示ください。

153 :デフォルトの名無しさん:2011/10/20(木) 09:11:18.99
すみません、
[A→α・Xβ, #] = [S'→S・, #/$]
[A→α・Xβ, #] = [S'→S・, #/$]
[A→α・Xβ, #] = [S'→L・=R, #]
はそれぞれ、
[A→α・Xβ, #] = [S'→・S, #/$]
[A→α・Xβ, #] = [S'→・S, #/$]
[A→α・Xβ, #] = [S'→・L=R, #]
です。

154 :デフォルトの名無しさん:2011/10/20(木) 12:34:59.11
対象も手順も、根本的にアルゴリズムをちゃんと理解してないように見えるけど。
まず説明を読んで手でやってみたら?
その後に表つきで例として載ってるんだから答合わせも楽でしょう。

155 :デフォルトの名無しさん: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が重複してうまく動作するようには思えません。
何度も何度も申し訳ありません。理解のある方、ご教示ください。

156 :デフォルトの名無しさん:2011/10/21(金) 19:03:44.24
本の読み方と言うか学習の仕方は
各自身につけてないとねぇ…

157 :デフォルトの名無しさん:2011/10/21(金) 21:28:12.37
>>155のような大先生に教示するなんておそれ多くてとてもとても……

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

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

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

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

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

162 :151:2011/10/23(日) 08:12:05.66
>>151 の質問にも回答をお待ちしておりますので、よろしくお願いします。

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

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

165 :デフォルトの名無しさん:2011/10/23(日) 23:01:05.33
そうかなあ

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

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

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

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

167 :デフォルトの名無しさん:2011/10/24(月) 08:59:59.16
迷惑な奴だ

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

169 :デフォルトの名無しさん:2011/10/24(月) 09:48:04.21
金払って大学行けよ

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

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

171 :デフォルトの名無しさん:2011/10/24(月) 13:52:34.48
質問歓迎って書いてるならどんどん質問すればいいんじゃね?

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

172 :デフォルトの名無しさん:2011/10/24(月) 14:01:44.31
所詮は他人事。

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

174 :デフォルトの名無しさん:2011/10/24(月) 19:12:06.44
むしろ、なぜ質問大歓迎の風潮になっていないのか不思議でならん

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

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

176 :デフォルトの名無しさん:2011/10/24(月) 21:00:14.26
>>164 >>171

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

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

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

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


179 :デフォルトの名無しさん:2011/10/24(月) 21:36:46.67
そんな事になったらセンセイは一切本を出せなくなっちまうな
こわいこわい

180 :デフォルトの名無しさん:2011/10/24(月) 21:42:04.24
>>176
そんな義務ないよ。給料分のことはしてるから。
たぶん良質の質問、および質問者ばかり想定して
そういう事言ってるんだろうけど…
金払っていて明確な義務がある学生の中でも基地外対処に苦労してる。
質問および質問者も選別されるのは当然のこと。
それが人と人とのつながりというものですよ。

181 :デフォルトの名無しさん:2011/10/24(月) 21:47:35.41
>>180
自国民の役に立つ義務は必ずあるんですって。

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

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

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

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

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

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

184 :デフォルトの名無しさん:2011/10/24(月) 21:58:53.53
NASAとかは国民の税金で宇宙開発やってるんだから、その成果は
無償で写真とかの著作権を放棄するとか立派だと思うけどな

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

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

187 :デフォルトの名無しさん:2011/10/24(月) 23:50:30.86
>>184
米国民以外の人間も見放題だけどな

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


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

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

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

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

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


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

194 :デフォルトの名無しさん:2011/10/26(水) 01:58:06.30
パナソニックは、ハイブリッド車のリチウム電池を供給してる

195 :デフォルトの名無しさん:2011/10/26(水) 03:57:55.59
そろそろ他の板でやってくれ

196 :デフォルトの名無しさん:2011/10/26(水) 07:51:02.20
>>192 てめえの存在がこのスレの妨害だから消えろヴォケ

197 :デフォルトの名無しさん:2011/10/26(水) 12:18:13.77
>>193
Panasonicをオワコンというなら、日本企業でオワコンで無い物はどこなの?

198 :デフォルトの名無しさん:2011/10/26(水) 12:25:38.60
続けるなアホが

199 :デフォルトの名無しさん:2011/10/26(水) 19:04:23.45
え?

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

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

201 :デフォルトの名無しさん:2011/10/27(木) 10:06:06.43
>>200
具体的にどこ?

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

203 :デフォルトの名無しさん:2011/10/27(木) 10:15:18.23
そろそろスレタイ見ようか (--##

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

馬鹿は自分が馬鹿なことに気付かないらしいから。

205 :デフォルトの名無しさん:2011/10/27(木) 11:27:44.49
まさしく >>204 自身のことだな

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

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

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

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

207 :デフォルトの名無しさん:2011/10/28(金) 08:23:52.35
>>206
>ファナックとか、製薬全般とか、たくさんあるよ

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

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

209 :デフォルトの名無しさん:2011/10/28(金) 10:56:33.14
そろそろスレタイ見ようか (--###

210 :デフォルトの名無しさん:2011/10/28(金) 11:36:08.88
自習で行き詰まった奴の次はスレチな話題かよ

211 :デフォルトの名無しさん:2011/10/28(金) 22:43:23.12
>>206
でおまえはどういう仕事してるの?、自宅警備?

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

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

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

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

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


213 :デフォルトの名無しさん:2011/10/28(金) 23:48:27.37
とスレタイすら読めない馬鹿が喚いてます

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

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

216 :デフォルトの名無しさん:2011/10/30(日) 16:28:53.23
あそこは昔、所長がsmalltalkのVM屋だったことがある。

217 :デフォルトの名無しさん:2011/10/30(日) 18:11:11.18
VisualSmalltalkとかあったねぇ

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

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


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

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

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

221 :デフォルトの名無しさん:2011/11/04(金) 21:29:51.72
中田先生の本に、確かLLパーサを非再帰的に構成する手法の解説があったと思うけど

222 :デフォルトの名無しさん: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(...) ...
....
}
}

こんな感じでできるんですが、この木を非再帰的に評価する方法が分からんです。

223 :デフォルトの名無しさん:2011/11/04(金) 21:57:38.55
再帰なんて自分でスタックフレーム作って地道に積むだけだろ?
中間コード吐けない事情があるなら同情するけど

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

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


226 :デフォルトの名無しさん:2011/11/04(金) 22:19:37.66
あ、上のコード、スタックに積む順序が逆でした。すいません。

227 :デフォルトの名無しさん: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() );
  }
 }
}
こんな感じのコードしか思いつかないんです。

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

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

携帯か組み込み用途か?

230 :デフォルトの名無しさん:2011/11/05(土) 02:08:31.61
再帰パーサをCPS変換してみたら幸せになれるかも

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

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

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

232 :デフォルトの名無しさん:2011/11/06(日) 00:19:06.20
スタック毎保存したら?

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

234 :デフォルトの名無しさん:2011/11/08(火) 03:14:01.16

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

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


235 :デフォルトの名無しさん:2011/11/09(水) 08:41:25.58
面白いな

236 :デフォルトの名無しさん: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

237 :デフォルトの名無しさん:2011/11/11(金) 23:45:31.66
だれかxtextで簡単な言語を実装してみてよ

238 :デフォルトの名無しさん:2011/11/15(火) 13:46:44.45
正規表現で*を連続で2回以上つけることは文法的に無意味だけれど
禁止してはいけませんよね?

239 :デフォルトの名無しさん:2011/11/15(火) 14:02:02.44
アホなユーザーにも判るようにエラーにするべき
無意味なことを許してはいけない

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


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

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

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

効率と柔軟さのバランス次第だね

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

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

246 :デフォルトの名無しさん:2011/11/16(水) 23:17:07.79
決定的にするんだろ
問題ない
出来ないなら適用する文法見直し

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

248 :デフォルトの名無しさん:2011/11/17(木) 18:40:22.35
そうだな。

249 :デフォルトの名無しさん:2011/11/18(金) 00:10:30.47
せやな

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

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

252 :デフォルトの名無しさん:2011/11/18(金) 16:31:10.30
構文論と意味論はごっちゃにしないほうがいいと思うんだけど

253 :デフォルトの名無しさん:2011/11/18(金) 17:13:07.07
せやな

254 :デフォルトの名無しさん:2011/11/18(金) 17:13:27.33
よいよいそれにしとけ

255 :デフォルトの名無しさん:2011/11/18(金) 17:19:58.75
せやろうか?

256 :デフォルトの名無しさん:2011/11/19(土) 01:14:12.51
そこは

  もち論

と返すところだべ

257 :デフォルトの名無しさん:2011/11/24(木) 12:43:06.51
そういうこと書くとスレが止まるからヤメロ

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)