[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2ch.scのread.cgiへ]
Update time : 07/24 14:25 / Filesize : 172 KB / Number-of Response : 672
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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/

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]
メソッドの中が上手くいかんというか何から始めたら良いのか分からん
コンパイル速度が遅くなるけど、分解フェーズを何層にも分けて
何度もループで調べていけば良いのかな

229 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 06:59:39.15 ID:EFAP6joI.net]
コンパイラの教科書の一冊でも読んで構文解析を勉強してみ

230 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 09:38:16.26 ID:ZDDsb7dY.net]
C系のクソみたいな構文ルールをそのまま真似てどうすんの
自作なら作りやすいようにキーワード追加すればいいのよ

キャスト式にキーワード付けなかったのは最大の誤りの一つ

231 名前:デフォルトの名無しさん [2015/04/27(月) 09:56:10.90 ID:qDIHhHi0.net]
SSA形式からスタックマシンのコード生成の最適化みたいなのに参考になる文献ってないかな?

232 名前:デフォルトの名無しさん mailto:sage [2015/04/27(月) 14:22:00.53 ID:RiYFohCl.net]
>>224
そうだね。HaxeとかFlashからぱくって、C形式のキャストは無くしてみるわ
int i = cast Integer ( 0.005f );
int i = 0.005f as Integer;

233 名前:デフォルトの名無しさん [2015/04/28(火) 18:20:14.24 ID:PlNb5vya.net]
最終的に何を目指そうかしら

1)LLVMで動かす 
→ 超難しそう

2)Luaのように組み込みスクリプトとして動かす 
→ 重そう。メモリ管理は全部ウィークポインタで良いのかな
(C/C++組み込みならnew&deleteするようなスクリプトでも良さそう)

3)JavaScriptなどに変換 
→ たぶん例外のバックトレースとかを変換するデバッグ環境が必須

234 名前:片山博文MZ ◆T6xkBnTXz7B0 [2015/05/05(火) 23:02:55.34 ID:p1RbtT4Y.net]
コンパイラーの品質保証は、数学で証明する時代だ!!!
Coqと数学でコンパイラーが作れる!!!
compcert.inria.fr/compcert-C.html



235 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 18:57:31.49 ID:SYpntI8c.net]
バイトコードインタプリタつくっているんだけど
スタックマシンのコンパイラについて
パラメータスタック(データスタック)はヒープ上におくべき?
それともネイティブの領域におくべき?

236 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 19:41:52.28 ID:SYpntI8c.net]
>>229
訂正
コンパイラー>仮想機械

237 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 20:41:51.08 ID:DhZyBtDK.net]
>>230
ネイティブスタックにデータも置くって事だよね?
データスタックは分けておいた方がイロイロ楽だったので列挙
たしかこんなの

GC使う様な実装の時の仕分け
実行パスがJITでコンパイルコードと非コンパイルVMコードの行ったり来たりするとき
例外のスタックトレース(これもJIT時のアレコレあり)
チープマシンにVM仕込むときアセンブラで書くのが楽しい

最後はちげぇけど

238 名前:デフォルトの名無しさん mailto:sage [2015/05/09(土) 21:02:43.06 ID:SYpntI8c.net]
>>231
自分のVMは典型的なスタックマシンで
パラメータスタック(データスタック)とコールスタックは別です。
そのうちデータスタックをヒープ内におくか
アセンブリでかかれたほうのネイティブの領域におくかってことです。
ネイティブ領域においたほうが実際のアドレスとVM上でのアドレスの変換がないので
速度としては速いのですが
欠点としてバイトコードからスタックを参照することができません
焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
基本的になければネイティブ領域におこうかとおもっています
これまでつくった経験がないので設計としてどちらがよいかわからずお聞きしました

239 名前:デフォルトの名無しさん mailto:sage [2015/05/10(日) 09:31:50.02 ID:ZQGgJB6p.net]
>>232
> 焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
バイトコードの設計は終わってるんじゃないのか?
バイトコードの設計終わってりゃ参照の必要があるかどうかはわかってるだろうし、バイトコードの設計終わってないのに VM の構成考えてるならお前が終わってる

240 名前:デフォルトの名無しさん mailto:sage [2015/05/10(日) 09:50:11.77 ID:YKkUWNQO.net]
>>233
その通りわ
出直して来ます

241 名前:デフォルトの名無しさん [2015/05/19(火) 18:50:21.34 ID:a+aajTcz.net]
番兵の文字は
utf-8でも16でも32でも-1でいいんですか?

242 名前:デフォルトの名無しさん mailto:sage [2015/06/24(水) 17:14:03.39 ID:ZsIPeucp.net]
動的型付けってLLVMだとどうやって実装するんだろ

243 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 19:59:28.32 ID:h+kJ9m+3.net]
構文解析+Cに変換して内部でgcc呼んでコンパイルするプログラムはコンパイラって呼んでいいの?

244 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 20:11:15.28 ID:tLjH7MQJ.net]
トランスレータじゃねえの



245 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 08:23:11.34 ID:SvdcMd32.net]
>>238
変換したCコードを出すならトランスレーターだけどバイナリまで出すならコンパイラーでいいだろ

246 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/07/28(火) 03:30:13.81 ID:92wk7rzR.net]
果たして文法を仮想化できるか

247 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:24:37.58 ID:zh/OeKTd.net]
凄いこと発見したんだけれどもΛの記号は上の尖がったところがルートで
下の二つの棒が辺を表しているんだな

248 名前:デフォルトの名無しさん [2015/08/19(水) 22:05:03.04 ID:caRlC37E.net]
言語非依存の仮想マシンっていうアイデアがいまいち大成功していないように見えるのって
なんか理由があるのかな。

249 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 22:59:51.18 ID:7Z0FzJPx.net]
落ちてたllvmスレを立て直した

【最速へ】LowLevelVirtualMachine 2【LLVM】
peace.2ch.net/test/read.cgi/tech/1439992758/

250 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/08/19(水) 23:17:16.98 ID:ynuNSl9L.net]
>>242
めちゃくちゃ成功してまんがな。LLVM,clang知らないの?

251 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 00:06:05.42 ID:BI1Ot8hx.net]
>>244
実際に成功していても成功していないよ・う・に・見・え・るって話

252 名前:じゃないの?
XCodeのコンパイラがllvm,clangだってのは開発者にしか見えないしclangの話だけ聞いているとgccが組み込み機のCPUに対応してたころみたいに派手に活躍してるとは感じられないって事じゃ無いの?
[]
[ここ壊れてます]

253 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 04:55:31.33 ID:uOqBPetd.net]
たぶん外国には、CASL2のような仮想アセンブラを使う、
情報処理試験が無いのだろう

2人の大学生が作ったLLVMに、Appleが飛びついた。
それで、Lattner はAppleに就職した

254 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 11:06:47.70 ID:XXXu8/KU.net]
良く言えば新世代の輝き
悪く言えば発展途上の不安定さ
さらに組み込みで言えばカバー範囲の幅広さは犠牲にされがち

将来性でメシが食えるのはごく一部



255 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 11:31:12.43 ID:WmW0wMbd.net]
痛い文章だ

256 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 00:47:20.35 ID:OjRQ25eS.net]
マルチメソッドを効率よく実装するにはどのようにすればよいですか?

257 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 01:10:40.39 ID:YG1kZeuQ.net]
マルチメソッドって何?

258 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 01:36:14.61 ID:OjRQ25eS.net]
OOPの最も基本的な機能です
引数によって、メソッドが切り替わります
多態といいます

259 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 02:01:55.26 ID:YG1kZeuQ.net]
オーバーロードのことですか?
ではマングリング

260 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 02:21:03.16 ID:OjRQ25eS.net]
マルチメソッドはオーバーロードでは無いです
一般にオーバーロードは静的ですが、
マルチメソッドは動的です

261 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 08:00:36.10 ID:WVPITNbu.net]
>>251
> 引数によって、メソッドが切り替わります
はい?

262 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 08:19:25.57 ID:jJXNOMmM.net]
clojureのdefmultiみたいな奴じゃないの?

263 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 11:49:46.23 ID:BYoao/vR.net]
多重ディスパッチのニッチな要求に応えるものか
それとも単純な動的バインディングだけの問題なのか

264 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 18:36:02.43 ID:XR0u/yGZ.net]
マルチメソッドはC++相談室を検索すればなんなのかがわかる



265 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/08/30(日) 17:45:45.69 ID:bYlp1Mb/.net]
>>249
パターンマッチを効率よく行う

266 名前:デフォルトの名無しさん [2015/08/30(日) 19:15:42.50 ID:nhXJHOe7.net]
型を連想配列やトライ木で管理すればO(1)

267 名前:デフォルトの名無しさん mailto:sage [2015/08/30(日) 20:08:17.93 ID:brcjELIg.net]
>>259
clojureはソレだね

268 名前:デフォルトの名無しさん [2015/09/17(木) 12:38:19.48 ID:mHCGeegj.net]
中間言語の設計に関するノウハウとかアンチパターンとかが書かれた本誰か知ってる?
LLVMとかP-codeとかJava VMとか、あるいはKnuthのMIX/MMIXみたいな機械語に近いレベルの言語を
ソフトウェア実装すること前提に設計する場合について知りたい。

今言語設計してて、そろそろ構文解析できそうだから学んでおきたいんだけど。

269 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 19:56:34.99 ID:7ftMaB4B.net]
最初はネイティブに落とした方がいいぞ
中間言語とか遠回りしてたらアホみたいだぞ

270 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 15:07:01.58 ID:QAQ6VXx0.net]
そんな物他人に教わるくらいならおとなしく既存のを使っとけ

271 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 20:35:24.73 ID:F4ynHS7Z.net]
本として出して需要あるか?もしかしたらサーベイ論文なら探せばあるかも

272 名前:261 mailto:sage [2015/09/18(金) 21:16:12.07 ID:ArWsl8Ey.net]
>>262
素直にコンパイル出来ない言語を設計してるので(clispのような)、snippetの表現をx86/amd64表記にする意義が薄いんですよね。

>>263
凝り性なもので。

>>264
一応ciniiは一通り眺めたけど、中間言語の設計に関する論文って無いんですよね。
素直に

273 名前:「中間言語」で調べると自然言語の翻訳に使う方が大量に引っかかってつらい…… []
[ここ壊れてます]

274 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 22:17:11.93 ID:i7DEL3du.net]
>>265
動的型付け必須系?
ならErlangの論文とか資料あさるといいかも



275 名前:261 mailto:sage [2015/09/19(土) 09:19:04.79 ID:YlOPp2hb.net]
>>266
swiftのように演算子をユーザー定義出来て、
c++のように同名異引数の関数を定義出来て、
Lispのように引数間のカンマが要らず、
Rubyのようにカッコを省ける
そんな言語を設計中です。

それらの両立のために実行中に文法を書き換えて構文解析器を再構成するという手法を採ってるので、コンパイル出来ないんですよね……
clispのリードマクロを文脈依存に拡張したものだと言えば大体あってるかと。

ちょっとErlang関連の資料を見てみます。

276 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 10:26:16.30 ID:7hgo9IJ4.net]
>>267
列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの?

277 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 11:29:33.20 ID:I9CWDfzW.net]
>>267
コンパイル時の都合だよね?
VMの設計とはなんの関係もなさげなんだけど

278 名前:261 mailto:sage [2015/09/19(土) 12:48:32.00 ID:YlOPp2hb.net]
>>268
今考えてる言語では、演算子の扱いが関数を引数の場所に関して一般化した第一級オブジェクトなので
前置引数の個数や後置引数の個数は実行してみるまで分からないので
コンパイル時の識別子を用いた構文解析は無理です。
前置演算子と一引数関数が別物って変だと思ったのでそうしました。

c++風に書くと、こんな感じのが通るイメージです。
g = [](a,b){return a - b;};
if (複雑な式) {
 f = [](a|b,c){return a + b + c;}; // (a|b)で前置引数としてa、後置引数としてbと示すものとする。
} else {
 f = [](a,b|c){return a + b + c;};
}
// gは2引数演算子、fは3引数演算子。
// ここではgの優先順位はfより低いものとする(c++での表現方法が無いので)。
// カッコやカンマを省いてある場合、上の条件のどちらが走っても構文上は受理される。
// 複雑な式の結果によって、これはg(1, f(2, 3, 4))及びg(f(1, 2, 3), 4)のどちらにもなりうる。
cout << (g 1 2 f 3 4) << endl;

>>269
そういうわけで一度に全部読み込んでコンパイルしてから実行するという事が出来ないので、
折角だからVMも設計しようと思った次第です。
ASTから中間言語に落とすとcontinuationの実装が楽になるので。

279 名前:デフォルトの名無しさん [2015/09/19(土) 13:15:38.32 ID:hJISNbn0.net]
g 1 2 f 3 4は構文解析後にはどういうツリーになっているの?
フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?

280 名前:261 mailto:sage [2015/09/19(土) 13:24:30.87 ID:YlOPp2hb.net]
>>271
字句解析でばらばらにしてLL(1)でカッコの対応等について解いた背の低い木にして、その後実行時にLR(1)で式毎に再度解析するので
> フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?
これであってます。

281 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 14:10:09.60 ID:I9CWDfzW.net]
おもしろい事かんがえてるなー
ElixirとかBEAM-VMとか参考になるんじゃねぇの?

282 名前:261 mailto:sage [2015/09/19(土) 15:18:02.65 ID:YlOPp2hb.net]
>>273
高信頼・並列分散に特化したVMのようにあちこちで言われてるみたいですね、ErlangのBEAM-VM.
そう考えるとLLVMは解析容易性特化、JVMはVM自体の実装容易性特化といった所でしょうか。

VMを作るなら何かに特化させるべきなような気がしてきました。

283 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 00:52:44.57 ID:m4tWKm8w.net]
演算子に限定する意味は何だろう
cout << (g 1 2 f 3 4) << endl;
こんなの一見して何してるのか判らないしいっそ構文ごと第一級にすればいい
そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
クロージャじゃあかんのかね

284 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 09:22:45.62 ID:tHziPwGz.net]
この程度のアイデアしかないようじゃ才能ないわな



285 名前:261 mailto:sage [2015/09/20(日) 11:27:11.87 ID:oZCwg6h7.net]
>>275
今作ってる実装だと構文はhead, body, precedence, directionをキーとするオブジェクトの配列になってるので
構文も第一級オブジェクトのインスタンスになっています。
説明不足ですんません。
コードは現在こんな感じ。もし読みたければどうぞ。
https://gist.github.com/pixie-grasper/d07388493204a5e370a2
debug-printが多かったりコメントが少なかったりしますが……

> そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
必要性については私にはまだ分かりませんが、
私は昔レキシカルスコープもクロージャもポインタも継続もマクロも無い素晴らしく酷い言語(古いBASIC)で全てを考えていたので、
その経験から、どんな機能も使い慣れると必要になってくると思っています。

>>276
私馬鹿なもんで。
いいアイデアがあったら是非とも実現してくだされ。

286 名前:デフォルトの名無しさん mailto:sage [2015/09/20(日) 11:30:35.69 ID:O6Xw3ijC.net]
>>275-276
俺にも意味があるようには見えないけど、俺の知らない用途があるのかもしれない
とにかくわからないならスルーしとけよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<172KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef