数式整形クラスの説明が最後にあった
case BinOp(op,left,right) =>
val opRec =precedens(op)
val l= format(left,opPrec)
val r=format(right,opPrec+1)
val oper =l beside elem(" "+op" ") beside r
if (enclPrec <= opPrec) oper
else elem("(") beside oper beside elem(")")
BinOp(”-”、Var("a"),BinOp("-",Var("b"),Var("c")))
がa-(b-c)となる。
rのほうはopPrec+1となっている理由が説明されているが、ちょっとみただけではわからない。
そこで、例によって丁寧にゆっくりたどってみると。。。
l=format(Val("a"),5) r=format(BinOp("-",Var("b"),Var("c")),5+1)
となる
BinOp("-",Var("b"),Var("c"))は
l=format(Val("b"),5) r=format(Val("c"),5+1)
Oper= b -c
enclPrec=5+1 opPrec=5なので
elseのほうになり、(b-c)
確かにそうなることが確認はできる。。でも、なんかすっきりしない。
左側は当然優先だから、+1しなくてもいいけど、右側は優先したいとき、はっきりわかるように+1とするという とらえ方でいいのだろうか?
0 件のコメント:
コメントを投稿