「コンパイラ・スクリプトエンジン」相談室16 (649レス)
上下前次1-新
1(5): 2014/07/20(日)11:16 ID:p6eMVAxc(1/2) AAS
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。
Wikiのまとめページ
外部リンク:www6.atwiki.jp
2: 2014/07/20(日)11:18 ID:p6eMVAxc(2/2) AAS
誰も立てないので立てた。
需要なければこのまま放置ということで。
3: 2014/07/20(日)11:19 ID:b1uNa6xY(1) AAS
前スレ
「コンパイラ・スクリプトエンジン」相談室15
2chスレ:tech
4: 2014/07/20(日)13:22 ID:6KMBfrlQ(1) AAS
前スレ落ちたの気づかなかった>>1乙
5: 片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/22(火)13:31 ID:itpt16Wl(1) AAS
というわけでCaperをRubyで使えるようにしなきゃいけない。。。
6: 2014/07/23(水)00:33 ID:6DA6PhLu(1) AAS
最近はみんなLLVMに集まる流れなのかな
7(1): 2014/07/24(木)10:32 ID:w2uo6knu(1) AAS
お手軽に言語作ってみますた なら
バックエンドは インタプリタか JVM かLLVM のどれかになるべ
あとは JSへのトランスレータか
意外に選択肢多いな
8: 片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/27(日)13:36 ID:YSqiGYKe(1) AAS
jonigataさん、Rubyのサポートを追加しました。
9(1): 2014/07/27(日)21:59 ID:aStfmk5+(1) AAS
JVM上で動く言語をガチで作ってる人ってバイトコードを直接出力するコンパイラ作ってるのかな。
JVM上で動くエンジン用のコードじゃなくて。
10(1): 2014/07/27(日)22:00 ID:UgznbaEB(1) AAS
そりゃそうだ。
11: 片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/28(月)14:12 ID:DUvGztkP(1) AAS
jonigataさんと連絡取れない。。。
12: 片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/28(月)16:55 ID:SnQo0cO4(1) AAS
caperにRubyサポートが追加されたよ
13(2): 9 2014/07/28(月)21:54 ID:zEAFz2i4(1) AAS
>>10
やっぱりですか。
ただ目標がゲームエンジンで将来的にスマホも視野に入れると直接バイトコードってのもどうかという気もします。
ただクッション入れると速度的にどうなんだろう、悩ましい。
14: 片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/07/29(火)01:15 ID:qgm2mseY(1) AAS
>>1
もっと参考URLを置いてほしいぜ
15(1): 片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/08/01(金)11:03 ID:fIgY7BmT(1) AAS
caperにPHPサポートが追加されたよ!
16: 2014/08/01(金)15:28 ID:ARdX3qTq(1) AAS
>>15
サポートヨロっていわれてんじゃん、がんばれ
17: 2014/08/02(土)16:23 ID:jWpcYE6C(1) AAS
>>13
俺は前に自作スクリプト→Javaソース→javassistでバイトコードに変換と
やってたけど遂に完成させずに投げてしまったxp
18(1): 2014/08/03(日)01:07 ID:MH7BOvZw(1) AAS
つかC並にJVM上で低レベルに動く言語が・・・ってどっかにありそうな気がする。
19: 2014/08/03(日)12:20 ID:q8fBalr7(1) AAS
ちょっと何言ってるかわかりませんね
20: 2014/08/03(日)16:19 ID:/m+nZnOr(1) AAS
>>18
日本語でおk
21: 2014/08/04(月)00:28 ID:5WaCX4TM(1) AAS
JVMのバイトコード吐くライブラリってもあるけど
こっちはバイトコードの知識必須
言語仕様だけ考えて満足しようぜw
22: 2014/08/04(月)02:12 ID:BTc2ko+M(1) AAS
どうせ中間言語に落とし込むんだしバイトコードくらい余裕だろ
23(2): 2014/08/08(金)03:06 ID:W/TCi66w(1) AAS
画像リンク[png]:www.buzzword.jp
24: 2014/08/08(金)08:30 ID:pWDxpd5M(1) AAS
guro
25: 2014/08/08(金)08:47 ID:19ZqYpH8(1) AAS
>>23
あんた誰?
26: 2014/08/08(金)12:06 ID:MJ5RFc2h(1) AAS
>>13
まず簡単なのを作って、次は作りなおせばいいじゃん。
27: 2014/08/08(金)12:31 ID:U1h/L2RD(1) AAS
>>7
最近はasm.jsみたいなのもあるしね。
28: 2014/08/08(金)16:22 ID:F5/v+VI2(1) AAS
>>23はウィルス注意
29(1): 2014/08/12(火)11:48 ID:AbgWlUoH(1) AAS
マークスイープのようにGC以外のところでGCを考えずに済み
参照カウントみたいに最大停止時間が短いGCってある?
速度は問いません
30: 2014/08/12(火)12:44 ID:A03Bg3Wq(1) AAS
GCアルゴリズム詳細解説
外部リンク:seesaawiki.jp
なんと日本語!! …俺はまだ少し読んだだけだが
31(1): 2014/08/12(火)12:44 ID:+sDF17YZ(1) AAS
>>29
実装簡単なのだとCOPY GCかぬ?
これに寿命を意識すると世代別GCに発展したのがある。
コレより先は実は最先端だったり
32(1): 2014/08/13(水)00:05 ID:5Fn9SOB/(1) AAS
>>31
コピーgcはやっぱメモリ効率がーんー
今のところ遅延マークスイープをなんとか使おうかと思うけどーなー
悩ましい。。。
33: 2014/08/13(水)00:29 ID:IvuVUKO/(1) AAS
>>32
EdenだけCopy GC,OLDに行ったらMarkSweepとか色んな掛け合わせもあるみたいだね
34: 2014/08/14(木)01:15 ID:nk1V5Hss(1) AAS
mostly-concurrentマーク&スイープGCは?
1. ミューテータを止めてルートセットをマーク
2. ミューテータと並行に別スレッドでマーク
3. ミューテータを止めて再度ルートセット+残り全部をマーク
4. ミューテータと並行に別スレッドでスイープ
ってやるやつ
ライトバリアがいるからGC以外のところでGCを考えずには済まないけど (そのへんは世代別も一緒だが)
最大停止時間は短いと思うよ
35: 2014/09/20(土)16:42 ID:Vt9JAeIo(1) AAS
caperが改善されて大規模なパーサーでも
早く生成できるようになったようです。
36: 2014/09/20(土)17:18 ID:INF4B04G(1) AAS
あんまりでっかいの書かないんで今まで困った事ないのだが、吉報には違いなかったりするのでお礼を述べさせて貰います、ありがとう。
>>Thanks for ジョニガタさんとMZさん
37: 2014/09/21(日)00:08 ID:+YftySIr(1) AAS
やること
★Ruby RaccとCaperの比較レビュー。
★CaperでCSVパーサーの作成。
★CaperでXMLパーサーの作成。
38: sage 2014/09/26(金)04:19 ID:VUi+/UsP(1) AAS
winXP visual studio 2010 expressで
antlr4の導入できた方いらっしゃいませんでしょうか?
39: 2014/09/26(金)10:04 ID:8tItaSRz(1) AAS
ANTLRWorks とか言うヤツはダメなん?
40: 2014/09/27(土)01:39 ID:oNml76ai(1) AAS
バッチファイルみたいなのに定義ファイルかませば出せると思いきや、
JAVAしか出てこない。。。
英語よく読めない
41: 2014/09/27(土)01:53 ID:PIGMRS01(1) AAS
akiramero
42: 2014/10/12(日)13:57 ID:fouZ38nR(1) AAS
やっと簡単な電卓インタプリタができたー
43: 2014/10/12(日)15:26 ID:s0CJmRCd(1) AAS
おめおめ
四則演算と簡単な制御構造が実装できると
あとは応用だから
扱う型の種類が増えない限り楽に拡張できそうだね
44: 2014/10/13(月)01:35 ID:UPM0IlOC(1) AAS
演算子って四則演算以上のことやらすと必ずそいつが決めた優先順位に縛られて破綻するし
電卓ならLISPの(+ 1 2 3 4 5)みたいに演算子相当が無くてオペランド側をいくらでも増やせる構文の方が楽
45: 2014/10/19(日)05:56 ID:irMeVnbo(1) AAS
それもそいつが決めた優先順位なわけだが
46(1): 2014/10/19(日)07:29 ID:Ww99Jszp(1) AAS
LISPはLISPで解析器に都合の良い構文だと思う
もちろんそういう意味で(作る側が)楽と言ってるんじゃないのは分かっているが
もう少し使う人間のことも考えてやれと
……で行き着くのも例えばpythonだったりするのでそれはそれでうーん
47: 2014/10/19(日)19:43 ID:U9zncy/O(1) AAS
古代言語なんだから人間向きなわけがない
48: 2014/10/19(日)19:50 ID:wwCHsqfk(1) AAS
慣れたら何とも無いけど
49: 2014/10/19(日)23:32 ID:zZJPnNDh(1) AAS
>>46
FORTHが一番解析器に優しいと思う、Lispは少なくとも関数に渡す引数の数は解析で判断できるけど、FORTHはそれすら捨ててる
あとLispは支援するエディタがあれば書く事に戸惑いは殆どないよ。
読むのは適切なインデントがされていないと辛いのは本当だけどそれだってRubyやらCやらでインデント無しと変わらないと思う。
なお、Pythonはインデントが構文に含まれているのが嫌い(エディタで再フォーマットできない)
50: 2014/10/20(月)07:07 ID:vNvY5rmm(1) AAS
ある海外のファンタジー小説で、異世界召喚されたプログラマが魔法でFORTHを実装して
最強魔導師になってた。
51: 2014/10/20(月)07:26 ID:fcKonDPy(1) AAS
May the forth be with you.
52(1): 2014/10/20(月)11:16 ID:6/LNQkyp(1) AAS
Lispは見た目的に「目にひっかからない」(関数もマクロもみんな同じようにしか見えない)のが問題なんだけど、
最近流行ってる(?)みたいに ( ) と [ ] を使い分けるとかすると、だいぶ感じが違うと思う。
53: 2014/10/20(月)16:23 ID:s/tFnXbk(1) AAS
>>52
Clojureが凄い良くできてる
()でリスト,[]でベクタ,{}でマップ、#{}でセットとリテラルの扱いが凄い綺麗
54: 2014/10/25(土)10:10 ID:9gGhLYaB(1) AAS
{} はすごくいいね。素の lisp だとほとんど使われない記号でもったいなかった。しかも数式とも合ってる。
ただ[] は好きになれないなぁ。個人的趣味だけど。
55: 2014/10/25(土)13:15 ID:rVCkRMh+(1) AAS
変わった趣味だw
56(1): 2014/11/01(土)16:34 ID:5yNYNAVX(1) AAS
エラーメッセージを楽して、素晴らしく表示したいんですけど
いい方法を教えてください。
57: 2014/11/01(土)18:28 ID:yfMW+WpF(1) AAS
>>56
センスのいい奴に頼む
58: 2014/11/01(土)19:12 ID:md1XyPQH(1) AAS
言うても行桁理由以外に何か必要かね
59: 2014/11/01(土)19:25 ID:etXlBO/A(1) AAS
ファイル名…かな
60: 2014/11/01(土)20:57 ID:68QCuiUg(1) AAS
エラー表示は?だけでいい
というネタがあったな
61: 2014/11/02(日)00:04 ID:FPvqJpqA(1/3) AAS
人間が見てるのとコンパイラが解釈してるので大きくズレがある場合とか
エラーメッセージ見てわからんことが多々ある
xxの前にxxがあります/ありません系のエラーはウンザリ
62: 2014/11/02(日)00:22 ID:E/aMB+tP(1) AAS
print " _人人 人人_ \n",
"> 突然の死 < ", col, ",", row, " in ",filename,":", reason, "\n",
"  ̄Y^Y^Y^Y ̄\n";
die;
楽して素晴らしい方向を考えた
63: 2014/11/02(日)04:19 ID:l3Xq9EsR(1/2) AAS
$ nmlc -run examples/lablgl/triangle.nml
Fatal error: exception Failure("
_人人 人人_
> 突然の死 < parse error line 33
 ̄Y^Y^Y^Y^Y ̄
")
って出るようにしてみた。
64(1): 2014/11/02(日)07:10 ID:Pf8ySLA3(1) AAS
何のエラーか
なぜ起こったか
どうすれば良いか
のうちどこまでエラー表示するか
表示しないものはマニュアルに書くか
統一しておくと良い
65: 2014/11/02(日)10:22 ID:P2QTHoYV(1) AAS
何のエラーか数字で提示
あとはknowledge baseで
knowledge baseは迷宮
66: 2014/11/02(日)11:43 ID:6U4Atlhd(1) AAS
基本的には書いた人の頭のエラーだからな。
コンパイラ的には「チェンジ!チェンジ!この子変えて!!!」
だけでいい。
67: 2014/11/02(日)12:31 ID:4dYx0WR7(1) AAS
> 関西型プログラミング言語のひとつ Kyoto のコンパイラは,文法ミスのあるコードを与えると「ふうがわりなコードどすなぁ」とだけ返すので,何が間違っているかはこちらで推測する必要がある.
68: 2014/11/02(日)12:39 ID:FPvqJpqA(2/3) AAS
何回も間違ったらぶぶ漬けが出てきそうだな
69: 2014/11/02(日)12:58 ID:i2BOrYsG(1) AAS
>>64
> どうすれば良いか
これは余計なお世話だわ
70: 2014/11/02(日)13:03 ID:FPvqJpqA(3/3) AAS
この道路は工事中なので次の迂回路をご利用ください
71: 2014/11/02(日)16:35 ID:l3Xq9EsR(2/2) AAS
コンパイル速ければ、エラーは1個で十分だったりするよなぁっとか。
大量に出すなら、一番先頭のエラーを一番下に出すと嬉しいとか。
72: 2014/11/03(月)12:49 ID:ljM6XCm0(1) AAS
>> 70
迂回は出来ないんだなぁ
73: 2014/11/03(月)18:22 ID:6fFurIEN(1) AAS
最近のghcとかだと、関数名をタイポすると似た存在する関数名を示してくれる。外してる時もあるけど。
ああいう親切さをもっと充実させるのも方向性としてはありだと思う。
あらゆるコンパイルエラーがクラウドサーバに送られ続けて典型的なミスを蓄積し続ける、とかね。
74: 2014/11/04(火)11:17 ID:bZGUB4M2(1/3) AAS
大量のデータをまとめて整理した結果をどこかで見たけど
よくあるスペルミス・インポート忘れ・宣言忘れが飛び抜けていて
それ以外はごくわずかでどうでもいいという印象だった
75: 2014/11/04(火)11:19 ID:bZGUB4M2(2/3) AAS
中級者以上と入門者はつまずく所が全く違うから
後者のデータだけを集めれば「入門者に最適」な言語やツールが作れるかもしれない
76(1): 2014/11/04(火)13:56 ID:OXvDS9Yh(1) AAS
C言語は、研究結果;はあった方が良いみたいな話を聞いた事があるような気がする。
けど、最後だけ無しとかだったのかもしれないし、良く覚えてないなぁ。
今作ってる言語は必要な所だけ;を書くって作ってるのだけど。
初心者には難しいのかもしれないです。
77: 2014/11/04(火)15:36 ID:bZGUB4M2(3/3) AAS
気の利いたエディタサポートまで考えるなら改行をまたぐ構文を禁止すべき
VBはそうなってる
78(1): 2014/11/04(火)15:58 ID:vqrMdBMn(1) AAS
lispとかでマクロ展開したときに中でエラーが起こったら行と桁の表示は諦めるしかないのかな
前に作ったとき展開後も展開前の行を引き継ぐやり方をしてたけど
79: 2014/11/04(火)17:04 ID:99dxtSJ/(1) AAS
>>78
トークンに文字列だけじゃなく、もとあった位置の情報も付けたら?
>>76
どんな言語でも、ある程度本格的なプロダクトなら、たいてい、「やたら長くなるから改行を挟みたい式」と
「やたら短くて似たようなのが連続するから1行にまとめたい文」の両方が出てくるので、
どちらを強制するのも一長一短。
構文的には (a, b, c, d) と {a; b; c; d;} の、どちらも似たようなものだけど、機械的なコード生成では
後者のほうが以前は楽だった(最近は可変長配列みたいなオブジェクトに入れて、最後に
joinとか、ライブラリが充実してる言語を使うのが普通なので、あまり差は無い)。
人間の作業としては、複数行にまたがるものでは前者のほうはちょっとめんどい。
省6
80: 2014/11/04(火)23:11 ID:DC7Ttoit(1/2) AAS
Lispマクロのデバッグはちょっと難しいよな。
backquoteのように構文上の構造を引き継ぐような奴ばかりならいいんだけど。
81: 2014/11/04(火)23:12 ID:DC7Ttoit(2/2) AAS
デバッグ→デバッグ情報
82: 2014/11/04(火)23:31 ID:6PskSs9/(1) AAS
複雑なマクロでもたいていは展開系見れば何とかなるね。それでも動かないマクロがたまーにあって辛いけど。
83(1): 2014/11/04(火)23:40 ID:cufVHbaO(1) AAS
自作のコンパイラなりなんなりはデバッグと最適化を考えたらなにも出来ない
むしろ潔く投げ捨てる勢いと割り切りで走らないとダメっしょ
俺様考えたルールで動いた万歳終わりな感じ
四則演算と条件文、あとGOTOなりCALLなりがあれば立派
それ以上の高度化は努力しだいってことで
それとも大人しくCommon Lispあたりを使って妥協するとか
Lispだと関数を生成して実行できるんだよね
例えば入力画面の項目数とか要件とかを与えて関数の形で生成して実行な感じの
俺様コンパイラ、Lispコード生成するからコンパイルや実行デバッグはそちらでオネガイみたくw
84: 2014/11/05(水)01:50 ID:j8mQRcC4(1) AAS
そこまで楽するなら構文をリードマクロで定義したほうが早そう
85(2): 2014/11/05(水)07:49 ID:xr1YCX3/(1) AAS
xmlってスクリプト言語なの?データ構造なの?
xmlを使ったスクリプト言語らしきモノもあるみたいだし、よーわからん
86: 2014/11/05(水)08:22 ID:Fpn6fvq+(1) AAS
>>83
C とかのソース吐いて、最適化よろしくね(はーと)でいいだろ
87: 2014/11/05(水)09:54 ID:gfolKTI3(1) AAS
>>85
データ構造だろ
パーサ作るのが楽というか有りものが使えるからxxxxMLみたいに拡張して使われるんだろう
88(1): 2014/11/05(水)11:54 ID:bBYPRYMe(1) AAS
>>85
プレーンテキストってスクリプト言語なの?データ構造なの?
89: 2014/11/05(水)17:03 ID:I87EWij/(1) AAS
>>88
只の文字列だよ
そこに意味を付けるのはまた別の事
90: 2014/11/05(水)17:58 ID:uuXXn0N9(1/2) AAS
シェルスクリプトとかみたいな意味でスクリプトではない。
XSLTとか、あとワドラー氏が冗談で提案していたと思うがXMLで表現するプログラミング言語と
いうものもありうるけど、XML自体は単なるデータ構造でしかない。
91: 2014/11/05(水)21:09 ID:WN8UKbpt(1) AAS
XMLにロジックを書く者は呪われる。やめておいた方がいい。あれはデータ形式としても冗長すぎるし、良いところはない。
S式を使うといい。
92: 2014/11/05(水)21:32 ID:uuXXn0N9(2/2) AAS
XSLTは割とよくできてるよw
93: 2014/11/06(木)01:58 ID:Rw7wEfhr(1) AAS
閉じ括弧重ね書き文化は誰も止めなかったのかねえ))))))))))))))))))))
94: 2014/11/06(木)02:08 ID:rrEEAzVB(1) AAS
Cみたいな中括弧、改行、インデントを繰り返すのもイマイチ
95: 2014/11/07(金)19:44 ID:XxPyN8W7(1) AAS
整ってると思うがなあ
switch, caseだけはアレだが
96(1): 2014/11/07(金)20:31 ID:sXupdHKX(1) AAS
switchとcaseは同じインデントにしてbreakだけ字下げだよね?ね?
97: 2014/11/07(金)20:52 ID:4yd7iQ66(1) AAS
>>96 に一票
98: 2014/11/07(金)22:25 ID:fMVGCDH+(1) AAS
(,)は特別な意味持たせたいとかあるので難しいですね。
(a,)はタプルにしようか、タプルじゃないのかとか。(,a)はタプルとか。
99: 2014/11/09(日)11:22 ID:/PoG0aeo(1) AAS
Pythonの「1要素のタプル」はトリッキーだが面白いとは思った。
kなんとかの人が言ってるように、カッコなしでもそうなるのは罠だがw
100(1): 2014/11/09(日)12:10 ID:6nixZySy(1) AAS
lispだと(a)とaの違いかな
101(1): 2014/11/09(日)16:44 ID:7O7eobU9(1) AAS
>> 100
そんな感じ。名前のない構造体
102: 2014/11/09(日)20:23 ID:15ZMIIuR(1) AAS
いや名前ある、タプル
103(1): 2014/11/10(月)01:34 ID:zIX5GD/A(1) AAS
ここって正規表現エンジンの話もいいのかな
nfaとdfaのハイブリッドエンジンを実装したいんだけど
dfaの中にnfaがあったらどう処理するかとかどこまでdfaにしていいかとかさっぱり分からない
調べてもon-the-flyという単語ぐらいしか出てこなくて実装方法とかは見つからない
知ってる人いたら教えてほしい
104: 2014/11/10(月)07:33 ID:XDoaKxdi(1) AAS
schemeの自作コンパイラ作成の過程で、cps変換につまづいています。
よくネット上で「簡単な処理で実現できる」という感じで書いてあるのを良く見るのですが、
実際にやろうとするとなかなかできません。
具体的に何をやったらいいのでしょうか?
ちなみにlambdaでのcps変換はぎりぎり理解できてると思います。
105: 2014/11/10(月)09:06 ID:hP+YfTbo(1) AAS
Scheme使ってるならEoPLの最後のほうの章読んだらええで。
106(1): 2014/11/10(月)12:08 ID:s3EMdqhf(1) AAS
>>103
つ ドラゴンブック, lazy transiyiOn evaluation
古典実装だとoriginal egrep
107: 2014/11/10(月)17:06 ID:G4zfChd8(1) AAS
>>100
Lisp の (a) は (a . nil) だからちょっと違う。
>>101
構造体とかそういう別の名前を持ち出したりするとややこしくなるだけ。
108(1): 2014/11/11(火)02:10 ID:85SNGvMw(1) AAS
>>106
ありがとう
でも自分の望んでるのとは違うみたい
109(1): 2014/11/12(水)01:44 ID:DTrQhtqP(1) AAS
>>108
この延長線上にある話だと理解できてないか、
SFA(semi-deterministic finite automata)を勘違いしてon-the-flyだと思っている。
前者ならGNU Rxを読めばいい。
110: 2014/11/12(水)01:57 ID:/4vNcbkH(1/2) AAS
>>109
多分後者かもしれない
自分の考えてるのは(X)*aときたら
1 ==(X)==> 1
1 ==a==> 2
というdfaを作って次のノードへの遷移条件が文字じゃなくてnfaなら
それを優先して見てマッチしたらその先に行く方法を考えてた
それならnfaとdfaをうまく組みあわせられると思って
あとsfaは今初めて知った
sfaとかon-the-flyは調べてもちゃんとした説明が出てこなくて困る
111: 2014/11/12(水)01:59 ID:/4vNcbkH(2/2) AAS
あとnfaだけかdfaだけなら偶然持ってたドラゴンブックやネットの情報が十分にあって実装出来た
ハイブリッドにする方法が分からなくて途方に暮れてる
112: 2014/11/12(水)11:39 ID:b8dDlQST(1) AAS
SFAでググったらランク上位の日本語の記述がこれだった
外部リンク:www.slideshare.net
役に立つかは知らないけどマッチングの並列実行だってさ
113: 2014/11/15(土)04:11 ID:2wuAQ8Y6(1) AAS
DFAで出来ないこと、やると遅いことをNFAでやる。
DFAにならない正規表現の拡張や状態が爆発するn回繰り返しなど。
114: 片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/29(土)15:46 ID:AWiICJMh(1) AAS
Caperで、Haxe用のパーサーが作れるようになったらしいぞ!!!
外部リンク[html]:jonigata.github.io
115: 2014/11/29(土)19:24 ID:bjHueY84(1/2) AAS
ということはjavaとphpとC#に対応したということか
116: 2014/11/29(土)19:25 ID:bjHueY84(2/2) AAS
って元からしてんじゃん…
117(18): 2014/12/04(木)17:14 ID:hjxCxC4V(1/2) AAS
スレ立てるまでもない質問はここで 139匹目から来ました。
JavaCCで負の数と引き算を識別したいんですけど、どう定義したらいいでしょうか?
以下現状の一部抜粋(メソッド名についてはスルーしてください)
void enzan3() :
{}
{
enzan4()((<TASU>|<HIKU>)right=enzan4())*
}
void enzan4() :
{}
省8
118(1): 2014/12/04(木)18:52 ID:jHjIGczB(1) AAS
>>117
そのスレの997以降のはやってないの?
number=0..9
plus::=<expr> + <expr>
minus::=<expr> - <expr>
expr::=<number>|<plus>|<minus>
な感じになるだろうし
単項のマイナスはexprにかからない形式で-が出てきた時だし間違いようがなさそうに思うんだけど
119(1): 2014/12/04(木)20:49 ID:hjxCxC4V(2/2) AAS
あ。
そこの
>単項演算子と二項演算子の区別
についてはまだ調べてないです。
調べてみます。
二項演算子+,-の間に二項演算子*,/を含む式があって、
その中にカッコか数字か変数呼び出しなどがあるように定義するのではないのですか?
例えば
-1
1-2
省6
120(2): 2014/12/06(土)17:09 ID:evyQIgPT(1) AAS
みんなBNFとかやってるのか
char配列にして解析してるから常に最後が';'だと楽なんだよね
'{'で+1、'}'で-1、+-0の状態で';'がきたらその構文が完結する
int a;, class {}; switch{}; void hey(){}; if(true){}; for(){};
121(2): 2014/12/06(土)17:17 ID:djm9MkQZ(1) AAS
演算子の優先順位はどうしてんの?
122: 2014/12/06(土)17:30 ID:5oGFUyw+(1/2) AAS
べつに区切り文字が = だろうが : だろうが ::= だろうが BNF は BNF だ
123(1): 117 2014/12/06(土)23:05 ID:BPhK2Nlg(1/3) AAS
>>120
>みんなBNFとかやってるのか
JavaCCの場合字句解析でトークン列に分解してくれて、
>>117にあるようにそのトークンの並びを書いて構文解析の定義をします。
なのでBNF記法とは違った書き方になります。
>>121
>演算子の優先順位はどうしてんの?
いい説明文が思い浮かばないので、
まずは例として1+2*3/4-5という式を構文木にしたものを以下にアップします。
外部リンク:fast-uploader.com
省5
124: 117 2014/12/06(土)23:06 ID:BPhK2Nlg(2/3) AAS
とりあえずenzan3の定義の先頭にマイナスの記号があるかもしれないという意味合いで
以下のようなコードに変えてみました。
void enzan3() :
{}
{
[<HIKU>]enzan4() //★
((<TASU>|<HIKU>)enzan4())*
}
void enzan4() :
{}
省10
125: 117 2014/12/06(土)23:07 ID:BPhK2Nlg(3/3) AAS
すると、以下のような警告が出ました。
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>トークンが共通点らしいです。
そもそもの考え方が間違っているかもしれませんが、
省2
126: 2014/12/06(土)23:08 ID:q7blqefO(1) AAS
>>120
java(というよりC)のforは()の内部に;が出てくるのが
>>119
javaccの書き方と大差ないみたいよ
127(1): 2014/12/06(土)23:27 ID:5oGFUyw+(2/2) AAS
この文脈でconflictは「衝突」と言う。
そのメッセージの通り、複数の定義で共通してるトークンがあるから、どっちの定義のほうだとして
解釈していいかわからないからエラーになる。
そのメッセージでは「Consider using a lookahead of 2 or more for nested expansion.」2個あるいはそれ以上の
先読みを使うことを検討してみろ、と言っているが、それに従ったところでうまくいくかどうかは
わからんけどね。
上下前次1-新書関写板覧索設栞歴
あと 522 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.040s