「コンパイラ・スクリプトエンジン」相談室16 (648レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
128
(2): デフォルトの名無しさん [sage] 2014/12/07(日) 01:31:54.20 ID:bfkTF4nN(1/3) AAS
>>123
123(1): 117 [sage] 2014/12/06(土) 23:05:55.88 ID:BPhK2Nlg(1/3) AAS
>>120
>みんなBNFとかやってるのか
JavaCCの場合字句解析でトークン列に分解してくれて、
>>117にあるようにそのトークンの並びを書いて構文解析の定義をします。
なのでBNF記法とは違った書き方になります。

>>121
>演算子の優先順位はどうしてんの?

いい説明文が思い浮かばないので、
まずは例として1+2*3/4-5という式を構文木にしたものを以下にアップします。
外部リンク:fast-uploader.com
こんなかんじのまとまりです。
演算子:/ 左辺:3(enzan5) 右辺:4(enzan5) → ?(enzan4)
演算子:* 左辺:2(enzan5) 右辺:?(enzan4) → ?(enzan4)
演算子:- 左辺:?(enzan4) 右辺:5(enzan5) → ?(enzan4)
演算子:+ 左辺:1(enzan5) 右辺:?(enzan4) →?(enzan3)
>>121
121(2): デフォルトの名無しさん [sage] 2014/12/06(土) 17:17:29.59 ID:djm9MkQZ(1) AAS
演算子の優先順位はどうしてんの?
は重要なヒント
-(1+2)とか、1+(-2)とかにその定義で対応できる?

たとえば★の行をenzan5に移してみるなり、演算子の優先順位を変えてやりなおすとか
それとは関係ないけど、3*2/4って直感的には( (3 * 2) / 4 )になりそうだけどその構文木だと右から左なのね
129: デフォルトの名無しさん [sage] 2014/12/07(日) 01:36:47.04 ID:bfkTF4nN(2/3) AAS
>>128
勘違いしたわすれて
130
(1): 117 [sage] 2014/12/07(日) 21:58:06.68 ID:OacxF8nB(1) AAS
>>127
127(1): デフォルトの名無しさん [sage] 2014/12/06(土) 23:27:12.88 ID:5oGFUyw+(2/2) AAS
この文脈でconflictは「衝突」と言う。
そのメッセージの通り、複数の定義で共通してるトークンがあるから、どっちの定義のほうだとして
解釈していいかわからないからエラーになる。
そのメッセージでは「Consider using a lookahead of 2 or more for nested expansion.」2個あるいはそれ以上の
先読みを使うことを検討してみろ、と言っているが、それに従ったところでうまくいくかどうかは
わからんけどね。
選択の衝突でしたね。
間違えて覚えました;
かぶってるらしいからLOOKAHEADで先読みをしなくてはならないのはわかるのですが、
そのコードでどのパターンとどのパターンでかぶってるのかがわからなくて。

>>128
>-(1+2)とか、1+(-2)とかにその定義で対応できる?
1+(-2)のパターンは意識していましたが、-(1+2)のパターンは忘れてました。
きちんと考えなおしてきます。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s