1 名前:デフォルトの名無しさん mailto:sage [2014/07/20(日) 11:16:19.37 ID:p6eMVAxc.net] プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 Wikiのまとめページ www6.atwiki.jp/compilerandscriptengine/
128 名前:117 mailto:sage [2014/12/06(土) 23:06:51.00 ID:BPhK2Nlg.net] とりあえずenzan3の定義の先頭にマイナスの記号があるかもしれないという意味合いで 以下のようなコードに変えてみました。 void enzan3() : {} { [<HIKU>]enzan4() //★ ((<TASU>|<HIKU>)enzan4())* } void enzan4() : {} { enzan5() ((<KAKERU>|<WARU>)enzan5() } void enzan5() : {} { <MOZI>|<SUUZI>|"(" enzan3() ")" } <>:トークン |:左右のどちらかの構文(||やOr演算子のようなもの) []:省略可能構文
129 名前:117 mailto:sage [2014/12/06(土) 23:07:27.16 ID:BPhK2Nlg.net] すると、以下のような警告が出ました。 Warning: Choice conflict in (...)* construct at line 608, column 9. Expansion nested within construct and expansion following construct have common prefixes, one of which is: <HIKU> Consider using a lookahead of 2 or more for nested expansion. 内容は選択の突出(Choice conflict)と言うもので、 私が作った構文の定義があいまいのようで 608行目(ここでは★を付けた行)の定義が他の定義とかぶっているらしく、 先頭に出てくる<HIKU>トークンが共通点らしいです。 そもそもの考え方が間違っているかもしれませんが、 それを抜きにしてもまずなぜこのような警告が出ているかわかりません。 一体なぜ出ているかわかる人いれば教えてださい。
130 名前:デフォルトの名無しさん mailto:sage [2014/12/06(土) 23:08:41.58 ID:q7blqefO.net] >>120 java(というよりC)のforは()の内部に;が出てくるのが >>119 javaccの書き方と大差ないみたいよ
131 名前:デフォルトの名無しさん mailto:sage [2014/12/06(土) 23:27:12.88 ID:5oGFUyw+.net] この文脈でconflictは「衝突」と言う。 そのメッセージの通り、複数の定義で共通してるトークンがあるから、どっちの定義のほうだとして 解釈していいかわからないからエラーになる。 そのメッセージでは「Consider using a lookahead of 2 or more for nested expansion.」2個あるいはそれ以上の 先読みを使うことを検討してみろ、と言っているが、それに従ったところでうまくいくかどうかは わからんけどね。
132 名前:デフォルトの名無しさん mailto:sage [2014/12/07(日) 01:31:54.20 ID:bfkTF4nN.net] >>123 >>121 は重要なヒント -(1+2)とか、1+(-2)とかにその定義で対応できる? たとえば★の行をenzan5に移してみるなり、演算子の優先順位を変えてやりなおすとか それとは関係ないけど、3*2/4って直感的には( (3 * 2) / 4 )になりそうだけどその構文木だと右から左なのね
133 名前:デフォルトの名無しさん mailto:sage [2014/12/07(日) 01:36:47.04 ID:bfkTF4nN.net] >>128 勘違いしたわすれて
134 名前:117 mailto:sage [2014/12/07(日) 21:58:06.68 ID:OacxF8nB.net] >>127 選択の衝突でしたね。 間違えて覚えました; かぶってるらしいからLOOKAHEADで先読みをしなくてはならないのはわかるのですが、 そのコードでどのパターンとどのパターンでかぶってるのかがわからなくて。 >>128 >-(1+2)とか、1+(-2)とかにその定義で対応できる? 1+(-2)のパターンは意識していましたが、-(1+2)のパターンは忘れてました。 きちんと考えなおしてきます。
135 名前:デフォルトの名無しさん mailto:sage [2014/12/07(日) 22:37:16.24 ID:bfkTF4nN.net] >>130 試しに四則演算のみ行う言語をjavaccで作ってみたけど単行演算子程度ならLookAheadいらないよ
136 名前:117 mailto:sage [2014/12/08(月) 00:25:52.66 ID:yQ2quuvD.net] いろいろ考えているうちに構文規則がおかしなことになってきました; とりあえず負の数やかっこを含む数式の構文木を一通り考えてみたつもりなんですけど、 以下のような感じであっているでしょうか? fast-uploader.com/file/6973521373227/ また、他に欠けているパターンはないでしょうか?
137 名前:デフォルトの名無しさん mailto:sage [2014/12/08(月) 18:02:04.16 ID:3czqE9B9.net] >>132 単項演算子はどこに行ったんだ
138 名前:117 mailto:sage [2014/12/08(月) 21:29:48.11 ID:yQ2quuvD.net] >>133 あれは構文木と言うより抽象構文木というか内部構造と言うかそんなかんじのものですね; 負の数をどう計算するか考えてたらその式や数字に-1をかければいいかなと思って作ってました。 今度はきちんと抽象じゃない構文木を考えます。 はい。
139 名前:117 mailto:sage [2014/12/08(月) 23:27:15.44 ID:yQ2quuvD.net] とりあえず自分がわかっている範囲で -(1+2)*4 の解析木を作ってみました。 fast-uploader.com/file/6973604307310/ enzan番号という名前はやめてみました。 空欄部分は下位置調節のためや何を入れたらいいかわからない部分です。
140 名前:117 mailto:sage [2014/12/09(火) 21:43:09.57 ID:KYZ3f1RL.net] 構文規則作ってみましたが、選択の衝突が消えません。 tasuhikuのkakewaruをkakewaru2に変えると消えます。 kakewaruで呼んでるminusの[<HIKU>]がtasuhikuの<HIKU>と競合しているのかと思いましたが、 なぜなのかわかりません。 どこが間違っているでしょうか? 警告なのでとりあえず無視してjavacコンパイルして解析&実行させてみると、以下の式はきちんと実行できました。 1+2+3 -9-3 1+2*3/4-5 7+(-2) -6*2 -(1+2)*4 (-1+2)*4 -1+2*4 4-(-2/5) -(-(-39))/13 一応ある程度のパターンを網羅していると思います。 Warning: Choice conflict in (...)* construct at line 608, column 9. Expansion nested within construct and expansion following construct have common prefixes, one of which is: <HIKU> Consider using a lookahead of 2 or more for nested expansion.
141 名前:117 mailto:sage [2014/12/09(火) 21:44:56.07 ID:KYZ3f1RL.net] void tasuhiku(): {} { kakewaru() //608行目 ((<TASU>|<HIKU>)kakewaru2())* } void kakewaru(): {} { minus() ((<KAKERU>|<WARU>)sikikakko())* } void kakewaru2(): {} { sikikakko() ((<KAKERU>|<WARU>)sikikakko())* }
142 名前:117 mailto:sage [2014/12/09(火) 21:45:41.74 ID:KYZ3f1RL.net] void minus(): {} { [<HIKU>]sikikakko() } void sikikakko(): {} { ("(" tasuhiku() ")" |atai()) } void atai(): {} { <SUUZI> }
143 名前:デフォルトの名無しさん [2014/12/10(水) 06:22:59.98 ID:ICK0nNNi.net] 荒らされてるなぁ・・・
144 名前:デフォルトの名無しさん [2014/12/10(水) 14:14:42.32 ID:lFxVBhH5.net] >>136 文法作るのはものすごく難しいんだよ。 同じ文書を受理する複数の文法が存在し、複数の間で優劣がある。 しかも、優劣を機械的に評価することが難しい。 「こいつを使えば簡単にできる」というようなソフトウェア紹介を見かけると 思うけど、そんな魔法の杖みたいなソフトは無いから。 そういうこと言ってる人は、付属してきたサンプルを動かして簡単といってるだけ。 信じちゃだめだ。 構文解析器の生成系を自分で作れるようにならないと文法を作れないと思っていい。 少なくともその程度の理解は必要。 まずドラゴンブックを買ったらどうかと思うんだが。
145 名前:デフォルトの名無しさん [2014/12/10(水) 14:18:41.54 ID:lFxVBhH5.net] まずドラゴンブックを買う。 実際に作ってみる。 この作ったものは実用にはならないよ。 テーブルが大きすぎるからね。 それでも作ることが重要。 その後に、市中に出回る生成系を使ってみたらどうだろう。 俺はこの順番が良いと思うよ。 中身の動作を知らないと使えないって、ツールとしては下等だけど、 今はまだその程度の世界なんだよ。
146 名前:117 mailto:sage [2014/12/10(水) 16:50:00.17 ID:pQyEQrGQ.net] >>139 私のことだったら荒らそうと言うつもりは全くありません。 でも荒らしに見えてしまっていたならすいません。 >>140-141 ドラゴンブックってこれのことですかね? www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E2%80%95%E5%8E%9F%E7%90%86%E3%83%BB%E6%8A%80%E6%B3%95%E3%83%BB%E3%83%84%E3%83%BC%E3%83%AB-Information-Computing-A-V-%E3%82%A8%E3%82%A4%E3%83%9B/dp/478191229X (私にとって)安くないですし今そこから勉強している余裕はないので・・・。 すいません。 よそでパーサジェネレータ使った方がいいとか言われて、 Javaが好きなどの理由でJavaCCを使うようになりました。 なんにせよ周りに作ったことある人とかいないので、 www.sbcr.jp/products/4797337958.html とか item.rakuten.co.jp/books-sanseido/ebm-techno03/ とか片手に独学でやってます。
147 名前:デフォルトの名無しさん [2014/12/10(水) 17:17:43.47 ID:lFxVBhH5.net] >>142 そこが勘違いなんだよ。 JavaCCを使うにはJavaCCを作れる程度の知識が必要。 だからドラゴンブックが必須。 ドラゴンブックは決して読みやすい書籍ではないよ。 どうとでもとれる表現がいくつもある。 読み解きながら理解する必要があるので、結局生成系を自分で一つ書き上げる必要がある。 「JavaCCを使えば知識がなくてもこんなに簡単」的なことを書く人は 実はJavaCCを使っていないんだよ。 そこに騙されてはいけない。 文法を作るには深い理解が必要なんだよ。 簡単にできる方法はない。
148 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 18:27:22.40 ID:eXNtCHKb.net] 誰か別の人にやってもらえばいいんだよ。クラウドソーシングとかあるじゃん。
149 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 21:11:35.37 ID:Lctd7lUm.net] 荒らされてるんじゃなくて話題がなさすぎるから一人が専有してるように見えるだけだろ?
150 名前:117 mailto:sage [2014/12/10(水) 21:46:27.74 ID:pQyEQrGQ.net] >>143 >「JavaCCを使えば知識がなくてもこんなに簡単」的なことを書く人は そこまで言われたことはないです。 一番最初は文字列を自分で解析するところからやろうとしてましたけど、 パーサジェネレータを知ってからわたしにとってはそっちの方が楽だと感じています。 ここで質問したこと以外でも詰まったりもしましたけども、 もし構文解析ツールを1から作っていたらきっとここまでたどり着くまでにもっと詰まっていると思います。 >>144 すいません。 実はこれ卒業研究なので・・・。 自分で作ってみたい→卒研のテーマに悪くないよね? な感じで決めてしまったテーマです。 >>145 連投とかしすぎましたかね・・・; [] [ここ壊れてます]
152 名前:デフォルトの名無しさん [2014/12/10(水) 21:57:46.01 ID:dcz7kjCK.net] 指導教授に聞けば。
153 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 22:28:57.42 ID:ZSLSh1LL.net] www 卒研なら自分で考えいw
154 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 22:32:59.96 ID:eXNtCHKb.net] >>146 まさか卒業研究の本体がなんの新規性もない構文解析なわけじゃないだろう。 それが本質的な部分じゃなければ人に手伝ってもらうのもありだよ。 もし、構文解析そのものが君の卒業研究なら…… 楽してでっち上げるという考えは即座に捨てて、143のいうようにちゃんと勉強して理解しな。
155 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 22:55:57.69 ID:Lctd7lUm.net] 卒研かよ フォローして損した
156 名前:117 mailto:sage [2014/12/10(水) 23:23:29.27 ID:pQyEQrGQ.net] >>147 Javaの研究室ではありますけど、先生は構文解析などの経験はないそうなので・・・。 ゼミのときに負の数と引き算の問題も一応聞いてみたんですけど、 残念ながら大したアドバイスをもらえませんでした。 ちなみに、研究室ではネットワーク関連のことやってる人が多いです。
157 名前:デフォルトの名無しさん mailto:sage [2014/12/10(水) 23:27:11.16 ID:bWIayA6r.net] うーん、その卒業研究、どこか新規性あるの?
158 名前:デフォルトの名無しさん [2014/12/10(水) 23:46:18.31 ID:lFxVBhH5.net] 文法を作ることの難しさを理解できていないんだよ。 嘘ではなく、本当に難しい。 実用性は無くとも理論通りに動作する生成系を自分で作るのは絶対必要。 遠回りに見えるだろうけど、これが最短の道なんだよ。 「俺の考えた言語」の文法をきちんと作れるなら、生成系程度すぐ作れる。 その逆は無いよ。 何か考え違いをしてるんだと思う。 文法程度すぐ作れるけど、生成系を作るのは難しいと思っていそう。 まるっきり逆。
159 名前:デフォルトの名無しさん [2014/12/10(水) 23:48:44.51 ID:lFxVBhH5.net] さらに言えば、理論通り動く生成系を作っても、それは実用性を持たない。 学習のために作るんだ。 実用には、既存の生成系を使うんだよ。 そういう順番が良い。
160 名前:117 mailto:sage [2014/12/11(木) 00:04:58.83 ID:TxaNdaYp.net] >>148 >>150 すいません・・・。 >>149 >>152 "こういうところが新しいです" と言える自信はありません・・・。 すいません。 一番の理由は"自分で作ってみたい"と思ったからです。 あと、先生に止められることもなかったですし。 構文解析が目的と言うよりは、半分ノリで付けてしまったテーマが 「初めでも使いやすい日本語で書けるプログラミング言語を作る」 なんてテーマです。 "日本語なら初めてでもとっつきやすいかな?"なんて安易な考えで 「初めてでも」なんてつけて付けてしまいました。 構文を考える上で自分で後悔してたりします; >>153 文法を考えるのも構文規則を作るのも楽なものではないと思ってます。 それよりも構文解析器を作るほうが難しそうと感じてしまっているのは事実です。
161 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 01:55:24.44 ID:pP5Pqqse.net] >>153 =154が優しく言ってくれてる あなたが本当に本気なら明日にでも図書館行って、ドラゴンブック借りるといいよ 難しいけど必ず価値はあるから
162 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 06:06:17.74 ID:sSshpgwI.net] 数学の知識もないのにアンチョコ片手にMathematica使えば何でもできると思ってるようなもんだな。まあ、無理。
163 名前:117 mailto:sage [2014/12/11(木) 07:22:36.95 ID:TxaNdaYp.net] >>156 プログラミングの棚にはなかったと思うんですけど、 とりあえず今日大学の図書館探してみます。 「ふつうのコンパイラをつくろう」の方は図書館にも置いてあったので。
164 名前:デフォルトの名無しさん [2014/12/11(木) 07:41:13.71 ID:JXHpp2tS.net] 空気読め
165 名前:117 mailto:sage [2014/12/11(木) 17:45:33.30 ID:TxaNdaYp.net] ドラゴンブックは残念ながら大学の図書館にはありませんでしたが、 市内(他区)の図書館にはあるとのことなので取り寄せて読みます。 1万円ほどの本を買うには残念ながらお金がないもので・・・; 他に大学にあった以下のコンパイルの本び中でおすすめってありますか? コンパイラの基礎 / 徳田雄洋著 命令レベル並列処理 : プロセッサアーキテクチャとコンパイラ / 安藤秀樹著 コンパイラ入門 : 文法から設計・製作まで / 小田一博著 Cコンパイラ設計 : yacc/lexの応用 / A.T.シュライナー,H.G.フリードマン 著 ; 矢吹道郎 〔ほか〕訳 超並列処理コンパイラ / 村岡洋一著 コンパイラ / 疋田輝雄 著 DIANA入門/言語仕様/応用 : Adaコンパイラ実現のための中間言語 やさしいコンパイラの作り方 / 中西正和 共著 ; 大野義夫 共著 新言語作成の技法 : オリジナル・コンパイラ / 大貫広幸 著 N88日本語BASIC(86)コンパイラ活用法 : Personal computer MS-DOS版 / 肥田野登 著 コンパイラの技法 / 中田育男 著 コンパイラのうちとそと / 島内剛一ほか共著 コンパイラの設計と構築 / Arthur B.Pyster 著 ; 松尾正信 訳 コンパイラの技法 / F.R.A.ホップグッド著 ; 首藤勝, 関本彰次共訳 コンパイラ構成法 / 原田賢一著 コンパイラ : プログラム言語処理の基礎 / 井上謙蔵著 コンパイラ設計技法 : 理論と実践 / T. ピットマン, J. ピーターズ著 ; 今泉貴史訳 dBASE ・ PLUSコンパイラ & アセンブラ ゜ / 桑村幸雄,池端良一 著. -- 2版 コンパイラ・コンパイラ / 井上謙蔵著. -- 産業図書, 1970. Let's C(Ver3.0)プログラミングハンドブック : MS-DOS用Cコンパイラ / PMC研究所 編 やさしいコンパイラの作り方 / 中西正和,大野義夫 共著 Microsoft QuickC コンパイラ Ver.2.0 ランタイム ライブラリ リファレンス コンパイラ作成の技法 / David Gries著 ; 牛島和夫訳 コンパイラ / 中田育男著
166 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 18:35:53.94 ID:yZEE5pFs.net] 文芸的なcobol+日本語ななでしこ? >>160 あるなら手にとって読んでみればいいのに アドバイスはできないすまん
167 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 18:43:18.72 ID:tbxqmm74.net] >>160 中田先生の本は良い本(というか国内で学者が書いてる数少ない本) 買うかどうかとは別に読んで損はしない。 先生は多忙なのか執筆が遅いので最新を追うとちょっと遅れるけど
168 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 20:08:42.05 ID:O2yGUM7o.net] >>143 んなアホな
169 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 20:21:08.66 ID:ED9Fc+9a.net] 中田本は結構いいね。でもドラゴンブックも読んどくべきだけどね。
170 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 20:26:34.20 ID:URNWWvBk.net] ドラゴンブックに限らずあの手の堅い文章は頭に入りにくい
171 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 20:51:29.95 ID:HAPX7Bnj.net] >>162 > 先生は多忙なのか執筆が遅いので最新を追うとちょっと遅れるけど まだ執筆してるの? 最初に買った真っ白表紙のコンパイラなんて 30年以上前だったのに
172 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 20:58:28.23 ID:hXJaCtwW.net] やさしいコンパイラの作り方と コンパイラのうちとそとは 読み物として面白い。 でもたぶん(今じゃ)なんの役にも立たないw
173 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 21:22:50.68 ID:tbxqmm74.net] >>166 2011年が最後かな 言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで ってのをオライリーから共著で出してたはず でも一番読み応えあるのは1999年発行の コンパイラの構成と最適化 だと思う、この本はドラゴンブックと一緒に是非買うべきって
174 名前:言っても良い [] [ここ壊れてます]
175 名前:117 mailto:sage [2014/12/11(木) 21:35:13.25 ID:TxaNdaYp.net] >>161 >文芸的なcobol+日本語ななでしこ? cobolやなでしこは使ったことないのでわかりませんが、 私は英語を用いた言語よりはわかりやすいと思います。 コメント文での説明が要らないかどうかは作るものによりますけど。 >あるなら手にとって読んでみればいいのに いろんな図書館に点々としてるそうで、 中にはどこにあるのかわからない図書館にある本だったりも・・・; ちなみに、上げた24冊のうち私の工学部の校舎にある図書館に絞ると3冊しかないそうです。 >>162 >>164 中田先生の本読んでみます。 ドラゴンブックの方も取り寄せが届いたら読みます。 >>167 面白いならその2冊も読んでみます。
176 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 21:37:16.34 ID:Q8kAUXaJ.net] >>167 > やさしいコンパイラの作り方と > コンパイラのうちとそとは > 読み物として面白い。 両方読んだ気がするが、内容覚えてないわ > でもたぶん(今じゃ)なんの役にも立たないw 色々な人を呼び込むと言うのも、重要な役目だと思う 誰か「漫画で読むコンパイラ」とか書かないかなぁ w
177 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 21:40:57.95 ID:KrH9mSC/.net] まともにやる気あるなら、その中のどれでも一つ真剣に取り組めばいいよ。 迷うのはそれからでも遅くない
178 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 21:42:20.07 ID:tbxqmm74.net] >>170 麻宮騎亜がアップを始めたようです。
179 名前:デフォルトの名無しさん mailto:sage [2014/12/11(木) 21:57:20.15 ID:JvQXLAia.net] CPUの創り方が萌えキャラで出る時代だから コンパイラ版が出る日も近いな
180 名前:デフォルトの名無しさん mailto:sage [2014/12/12(金) 03:52:20.71 ID:yYnp70gr.net] 疲れた時は白と黒のとびらとか。読み物だけど
181 名前:デフォルトの名無しさん mailto:sage [2014/12/13(土) 11:59:00.15 ID:KEKavmkB.net] >>168 共著じゃなくてAntlrの作者が書いた本の監訳だよ
182 名前:名無しさん@そうだ選挙に行こう mailto:sage [2014/12/13(土) 19:31:14.67 ID:LmsGKyNP.net] 正直ドラゴンブックって内容はともかく説明はとても優しいよね 洋書はIT系に限らず懇切丁寧な事が多いと思う
183 名前:名無しさん@そうだ選挙に行こう mailto:sage [2014/12/13(土) 22:13:39.97 ID:aWFoLZL3.net] 虎も仲間に入れてやってください サンプルがアレだが
184 名前:デフォルトの名無しさん mailto:sage [2015/01/19(月) 11:19:23.48 ID:cYd/ZsDZ.net] kmoriさん亡くなったって。
185 名前:デフォルトの名無しさん [2015/01/19(月) 11:34:19.54 ID:CzsUjspG.net] yaccの一実装書いてた人か。南無 https://web.archive.org/web/20080206191946/d.hatena.ne.jp/kmori58/20060702/p3
186 名前:デフォルトの名無しさん mailto:sage [2015/01/19(月) 15:30:26.84 ID:cYd/ZsDZ.net] kmyaccも有名だが、「LSI-Cの作者の一人」だった。
187 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 21:04:04.33 ID:wHr1vYS1.net] 熊ヤックと読んでいた
188 名前:片山博文MZ ◆T6xkBnTXz7B0 [2015/02/18(水) 16:40:51.07 ID:9VF3MRJc.net] C++11の正規表現でCのスキャナーをスマートに書きたい。 しかし、コメントの扱いがややこしく、また、行番号の情報を取得する必要がある。 一行ごとに読み込むべきか、従来どおりトークンに切り分けて読み込むべきか。 全部をいっぺんに読み込んで'\n'でsplitする方法は実行時のメモリーと時間がかかると思う。 どういう戦略にすべきか?
189 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/18(水) 17:03:37.74 ID:9VF3MRJc.net] 改行に特別なトークンを割り当てて、すべてのトークンを読み 込んだ後でトークンに行番号をつけてから改行のトークンを取り除くという 方法についてはどう思いますか?
190 名前:デフォルトの名無しさん mailto:sage [2015/02/18(水) 21:19:15.31 ID:po3oOzQK.net] Cってマクロとかインクルードとか有るん?
191 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/19(木) 01:08:43.02 ID:XXveEoOV.net] マクロやインクルードは、プリプロセッサーがやってくれるよ
192 名前:デフォルトの名無しさん mailto:sage [2015/02/19(木) 12:19:19.08 ID:b9Ke1XGw.net] プリプロセッサーの展開後の行番号って要るのかね?
193 名前:デフォルトの名無しさん mailto:sage [2015/02/19(木) 19:51:00.22 ID:rp3PUwqb.net] 無かったらエラー表示するとき不便だろ
194 名前:デフォルトの名無しさん mailto:sage [2015/02/19(木) 21:27:05.57 ID:wg16DBik.net] 展開後の行番号の方がいらなくね? プリプロセッサ文てコンパイラ側でも処理するよね? #line とか
195 名前:デフォルトの名無しさん mailto:sage [2015/02/19(木) 21:31:56.28 ID:uOq48O3O.net] コメントはプリプロセサで置き換えたらいかんのか
196 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 01:08:42.33 ID:XnZFjwve.net] SmalltalkのVM上にJavaVMを構築してんだけど、 VMの話もここで良いんだよね。
197 名前:デフォルトの名無しさん [2015/02/21(土) 12:59:06.48 ID:eVOI8zE3.net] OK
198 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 23:58:08.89 ID:bst4VCEg.net] >>182 Cのスキャナって正規表現だけで表現できるんか?(構文解析しないで良いエディタのhilightingとかは大丈夫だけど)
199 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 01:27:09.68 ID:0QFgdJ2i.net] >>191 了解。 SmalltalkのVM上でDalvik VM用のclassも動かしたいんですが、 いちいちDalvik用のVMまで作るのがメンドイです。 Dalvik用のclass形式からJavaVM用のclass形式に変換するオススメのLibraryを教えて下さい。 Libraryの言語はSmalltalkに書き直しますので何でもいいです。
200 名前:デフォルトの名無しさん [2015/02/23(月) 17:30:23.57 ID:FikKUZMK.net] >>192 scannerってlexerの一部。 lexer=scanner+tokenizer
201 名前:デフォルトの名無しさん [2015/02/23(月) 17:38:19.44 ID:FikKUZMK.net] >>193 JEBはDalvikのdecompilerだから、コンパイルすればJVMのbytecodeに出来る。 https://www.pnfsoftware.com/
202 名前:デフォルトの名無しさん [2015/02/23(月) 17:41:10.47 ID:FikKUZMK.net] javaで書いたDalvikのVM www.eflow.jp/topics/090317.html
203 名前:デフォルトの名無しさん mailto:sage [2015/02/23(月) 22:14:05.07 ID:Fe2dvIpV.net] C++で完結するって所に惹かれてboost::spiritを試してみたが…、これは死ねる。
204 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 01:43:04.58 ID:f8A7qwV2.net] 共通部分式の除去のやり方がわかんねえ 定数伝播、四則演算も含む組み込み関数の畳み込み、使わない変数の除去、 ループ展開等を同じパスでやってるんだけど 共通部分式の除去とそれをやるのに必要な不変式の判定はまた別でやった方がいいのかな 不変式かどうかはループ最適化でも使えそうなんだけど混乱してきた
205 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/24(火) 08:04:58.95 ID:UGr8Bbp/.net] >>198 ある計算式eについて、eの部分式を互いに参照するエントリーとして再帰的にテーブルに登録する。 登録するときにソートと重複チェックを行えば、テーブルは一意化できる。 テーブルの各エントリーの参照構造は、木構造のノードを成す。
206 名前:デフォルトの名無しさん [2015/02/24(火) 11:33:08.23 ID:wemgVVUb.net] >>198 式の属性に関する再帰方程式の近似解をニュートン法のように求めること、 これがデータフロー計算解法の本質と理解できてないんじゃない? ドラゴンブックのavailable, killedの説明の所読んでみれば? 同じパス内でループしながら収束するまで計算するのよ。
207 名前:デフォルトの名無しさん [2015/02/24(火) 11:35:18.85 ID:wemgVVUb.net] ドラゴンブックのどの節か書こうとしたけど本が見つからない... とりあえず、ここのp.10から。 dragonbook.stanford.edu/lecture-notes/Stanford-CS143/20-Optimization.pdf
208 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 17:44:49.00 ID:H95vOz7j.net] >>199 そのテーブルに式を入れるときその式が不変かどうかを判断する部分でわからなくなってくる >>200 ほとんど読んでないドラゴンブック見たら最適化部分についても書いてるな これ読むの辛いな 頑張って読んで出直すか
209 名前:デフォルトの名無しさん [2015/02/24(火) 17:53:23.22 ID:avE+zAm1.net] 多分ちゃんと読んだ方がかえって早い。 共通部分式A,Bがあって、例えばBの方の除去をやると、 Bの到達性がAの到達性にも付与される。 このことは他の属性に影響を及ぼしうる。 よってもう一度計算をしないとより正確な属性を求められない。 以下ループ。 よって収束するまで繰り返すことになる。
210 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 18:04:39.54 ID:H95vOz7j.net] 変化がなくなるまで最適化処理を繰り返すのはわかった
211 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 19:26:42.04 ID:wUDy2moe.net] >>197 コンパイル時間がか?
212 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/02/24(火) 20:45:40.84 ID:UGr8Bbp/.net] __declspecとか__attribute__などをパースできないと正確な構造体型のサイズ を求めることができない。しかしattribute周りの文法がメチャクチャやなあ。
213 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/03/03(火) 01:05:04.60 ID:t6l1EelO.net] 次は"typed value"の扱いだな。定数にも型がある。型付きの値を 扱えなければ、正確な定数値を求めることはできない。
214 名前:デフォルトの名無しさん mailto:sage [2015/03/03(火) 04:49:45.03 ID:ZU1MaIS8.net] 最適化なんてイラナイよね、何処まで処理系に依存する気なんだよw
215 名前:デフォルトの名無しさん mailto:sage [2015/03/08(日) 14:52:45.39 ID:u8r5MR2m.net] 初心者だがHSPって凄いね 自分でHSPみたいなの作ろうとすると途端につまづくw 内部でメッセージハンドルに登録していく言語だと思うんだけど こんなにwinを感じさせない文法でwinと親和性高く作れるとは
216 名前:デフォルトの名無しさん mailto:sage [2015/03/08(日) 17:15:18.44 ID:8c6PRT7L.net] ランタイムの機能の量で躓くならともかくあの文法でつまづくなら>>1 で概要把握して本読めば
217 名前:デフォルトの名無しさん [2015/03/09(月) 14:52:03.75 ID:MIZIuI1f.net] 文法とOSに何の関係が?
218 名前:デフォルトの名無しさん mailto:sage [2015/03/09(月) 16:12:25.65 ID:J8WIpDef.net] いただきジャンガリアンに辛酸をなめさせられたのだろうよ
219 名前:デフォルトの名無しさん mailto:sage [2015/03/09(月) 17:25:40.74 ID:VM1FVYaf.net] うーん初心者だから言い方わかんないんだけど コマンドプロンプトのスクリプトってコマンドに従って単に実行していくだけだよね でもwinだと実行されるのは素直に考えるとメッセージが来たとき cでウインアプリつくるときはメッセージ毎に処理を書くけど上から順に読むスクリプトは それはできないわけだからどう整合性取るのかなってことで悩んでた 結局メッセージ毎にリストがあってコマンドを読んだらそのリストに関数ポインタ名で追加、 メッセージ毎に呼ばれる関数はその種別のリストを上から順に実行していく こんな感じで作ったけどこれでいいのかな
220 名前:デフォルトの名無しさん [2015/03/12(木) 21:28:48.21 ID:BlO2EFmA.net] そりゃ文法じゃなくて実行モデルだな。 イベント駆動ってことでしょ。
221 名前:デフォルトの名無しさん [2015/04/13(月) 21:09:38.60 ID:qtTodoaL.net] 「Cのコンパイラなら何日かかけて作っても良いが、C++は、一人で 作るのは嫌だ。文法をきちんとカバーするのに日数がかかりすぎるから」 と言われたよ。
222 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 02:22:50.19 ID:eOWj6Ffd.net] javaに近い構文の言語をつくろうとしてるんだけど、 ようやくchar配列に変換したソースから関数の外側を構文解析できた。 山括弧<>、文字列リテラル、コメントに気をつけつつ、 なんとか関数の中を無視してクラス・変数・関数の名前や型名を取得して 関数の中身にとりかかるところ。 関数の中身は丸括弧()が難関になりそう。 AAAA bbbb = ((HHHH)cccc.dddd.eeee(ffff.gggg(), jjjj)).iiii(); bbbb.kkkk = -10/(8-3)-9/-3
223 名前:デフォルトの名無しさん [2015/04/22(水) 20:33:48.48 ID:rBARkljm.net] >>216 まるで違う言語に見えてしまうのだが。
224 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 21:30:55.14 ID:eOWj6Ffd.net] >>217 最初はクラス名、メンバ変数、メンバ関数を全部調べてからじゃないと 関数の中身に取り掛かれないと思ってた。 でもクラス名・変数名・関数名に区別は不要で、記号をヒントに階層を分解して、 それから型名の存在の有無・整合性を調べるという風にフェーズを分けれそう。 でも()が演算の優先順位、型キャスト、メソッド...どれに使われているのか 区別できるかは不安。for文とかは最初に予約語が入るからやりやすそうだけど。 Person person = ((Factory)group.cache.getFactory(provider.getResource(), url)).create(); person.id = -10/(8-3)-9/-3;
225 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 22:59:19.66 ID:LKLiXgla.net] いまいち分からないけど、識別子の次にあったら関数呼び出しで それ以外は式とかでいけないの
226 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 23:28:51.38 ID:eOWj6Ffd.net] いけるか分からない。とりあえずやってみるってところ
227 名前:デフォルトの名無しさん mailto:sage [2015/04/23(木) 08:14:58.39 ID:+O6VWDUu.net] >>219 構文次第 てか、普通識別子に続くカッコを見て初めて関数/メソッドってわかるわけだし
228 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 01:02:40.49 ID:RiYFohCl.net] メソッドの中が上手くいかんというか何から始めたら良いのか分からん コンパイル速度が遅くなるけど、分解フェーズを何層にも分けて 何度もループで調べていけば良いのかな