「コンパイラ・スクリプトエンジン」相談室16 (646レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
128(2): デフォルトの名無しさん [sage] 2014/12/07(日) 01:31:54.20 ID:bfkTF4nN(1/3) AAS
>>123123(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は重要なヒント
-(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
>>130130(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*