Closed ochaochaocha3 closed 5 years ago
コマンド実行まで実装できたが、-2d6<-7
のような入力の中置表記において、(-2d6)<(-7)
のように単項マイナスが必ず括弧で囲まれる問題があるため、修正が必要。以下の部分において無条件に前置式を括弧で囲んでいることが問題点だと思われる。
ただ、上記の部分のParenthesizeを除いてしまうと、2*(-3)
のようなパターンで 2*-3
と括弧が除かれてしまう問題がある。比較式は右辺のルートノードが単項マイナスでも括弧で囲わないという点で多項式に含まれる演算子とは異なるため、単に比較式を特別扱いすれば簡潔な書き方で解決できる気がする。
https://github.com/bcdice/BCDice/blob/v2.03.01/docs/README.txt
基本的には比較演算子の実装なので、バラバラロールと同様に以下の演算子を実装すればよい。
<=
>=
<
>
=
<>
抽象構文木の例
2d6>7
(DRollComp (> (DRoll 2 6) 7))
評価の対象とする型、結果の型
単純な成功判定ならば以下でよさそう。とりあえず今は論理型を返すのみにしたい。
object.Integer 演算子 object.Integer -> object.Boolean
TODO:クリティカルやファンブルはどうするか?(必要なゲームシステムのダイスボットを実装するときに考えたい)
結果のメッセージの例
2d6+1>7
DiceBot : (2D6+1>7) > 7[4,3]+1 > 8 > 成功
DiceBot : (2D6+1>7) > 2[1,1]+1 > 3 > 失敗
2d6+1>(2*4)
DiceBot : (2D6+1>8) > 9[6,3]+1 → 10 > 成功
DiceBot : (2D6+1>8) > 4[3,1]+1 → 5 > 失敗