Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 10 小时前, 北冥有鱼1573 说道: 真的做起来之后了更多的问题……rd运算符真的很不好搞 比方说,r1d6*r1d6是 (r1d6) * (r1d6),掷两枚六面骰子的结果相乘 r1d(6 * r1d6),先掷一枚6面骰子结果为x,然后掷另一枚6x面骰子 两者中的哪个? 两种掷法结果必然是不一样的,前面一种方法没办法得到大于6的素数,而后一种可以 我本来想说这里有一个文法二义性的问题来着,后来拿antlr4跑了一遍发现其实没有 因为运算符rd的优先级没有运算符*高,所以*会先算,因此实际运算是2 附一个生成的文法树: 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 10 小时前, 北冥有鱼1573 说道: 其实我遇到的最大的问题是,使用栈计算表达式时,d运算符的优先级最低,因此四则运算先被算好,roll点会在最后从右到左计算(从右到左是因为栈后进先出,表达式最右边的最先出来) 因此当遇到像r(r1d6)d20这样的嵌套roll点时,需要先算外层的r x d20,这就没法继续算了…… 这就是为啥我要设置一个运算符rd(笑 没错,就是为了给标准的表达式求值板子制造困难 链接到点评
PhoeniXLL 发布于五月 7, 2020 分享 发布于五月 7, 2020 · 只看该作者 于 2020/5/6 于 AM12点55分, 北冥有鱼1573 说道: 其实我遇到的最大的问题是,使用栈计算表达式时,d运算符的优先级最低,因此四则运算先被算好,roll点会在最后从右到左计算(从右到左是因为栈后进先出,表达式最右边的最先出来) 因此当遇到像r(r1d6)d20这样的嵌套roll点时,需要先算外层的r x d20,这就没法继续算了…… (r1d6)都被括号括起来了你扫到)的时候应该弹栈了 链接到点评
PhoeniXLL 发布于五月 7, 2020 分享 发布于五月 7, 2020 (已修改) · 只看该作者 21 小时前, Mr.K 018 说道: 这就是为啥我要设置一个运算符rd(笑 没错,就是为了给标准的表达式求值板子制造困难 不不不,我前天试着写的时候发现讨厌的是SE 五月 7, 2020,由PhoeniXLL修改 链接到点评
北冥有鱼1573 发布于五月 7, 2020 分享 发布于五月 7, 2020 · 只看该作者 2 小时前, PhoeniXLL 说道: (r1d6)都被括号括起来了你扫到)的时候应该弹栈了 恍然大悟 链接到点评
北冥有鱼1573 发布于五月 7, 2020 分享 发布于五月 7, 2020 · 只看该作者 改好了应该没什么问题了 一股没什么意义的成就感涌了上来( roller.py 注释 Mr.K 018 40.00节操 成功实现 链接到点评
Mr.K 018 发布于五月 7, 2020 作者 分享 发布于五月 7, 2020 · 只看该作者 1 小时前, 北冥有鱼1573 说道: 改好了应该没什么问题了 一股没什么意义的成就感涌了上来( roller.py 2.58 kB · 1 download 题意其实是输出操作序列,而不是out一个结果…… 不过挺不错的,程序也很完整 链接到点评
PhoeniXLL 发布于五月 7, 2020 分享 发布于五月 7, 2020 · 只看该作者 1 小时前, 北冥有鱼1573 说道: 改好了应该没什么问题了 一股没什么意义的成就感涌了上来( roller.py 2.58 kB · 5 downloads 棒! python好方便,学到了不少 链接到点评
推荐贴