「コンパイラ・スクリプトエンジン」相談室16 (646レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

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
勘違いしたわすれて
131: デフォルトの名無しさん [sage] 2014/12/07(日) 22:37:16.24 ID:bfkTF4nN(3/3) AAS
>>130
130(1): 117 [sage] 2014/12/07(日) 21:58:06.68 ID:OacxF8nB(1) AAS
>>127
選択の衝突でしたね。
間違えて覚えました;
かぶってるらしいからLOOKAHEADで先読みをしなくてはならないのはわかるのですが、
そのコードでどのパターンとどのパターンでかぶってるのかがわからなくて。

>>128
>-(1+2)とか、1+(-2)とかにその定義で対応できる?
1+(-2)のパターンは意識していましたが、-(1+2)のパターンは忘れてました。
きちんと考えなおしてきます。
試しに四則演算のみ行う言語をjavaccで作ってみたけど単行演算子程度ならLookAheadいらないよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.386s*