「コンパイラ・スクリプトエンジン」相談室16 (648レス)
「コンパイラ・スクリプトエンジン」相談室16 http://mevius.5ch.net/test/read.cgi/tech/1405822579/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
268: デフォルトの名無しさん [sage] 2015/09/19(土) 10:26:16.30 ID:7hgo9IJ4 >>267 列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの? http://mevius.5ch.net/test/read.cgi/tech/1405822579/268
270: 261 [sage] 2015/09/19(土) 12:48:32.00 ID:YlOPp2hb >>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の実装が楽になるので。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/270
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.201s*