Mr.K 018 发布于五月 6, 2020 分享 发布于五月 6, 2020 (已修改) · 只看该作者 第21期来啦!本题是接着第20期继续出的一道题,所以本题要连着20期的题干一起读。 第21期 冰系魔法2b 各位已经见过了基本款的魔法骰子。实际上,魔法骰子还有更多改进款,支持很多更为复杂的功能。之前说的异世界来客就有这么一款骰子,她向我们展示了这个骰子的用法。 这个骰子依然可以像前一款那样计算表达式。它一次可以顺序处理多个掷骰表达式,每个掷骰表达式都需要用分号;结尾。同时,这个骰子还支持流程控制(不愧是魔法师的骰子),就是if,while和for语句。同时,多个语句还可以用大括号括起来,成为一个语法上的整体。它们的语法也不复杂,上例子: r1d6; if (r1d6-3) { while(r1d6-3) 15; (r3d20)*(r1d6); } else for(r1d6) if(r12d10-60) 1+1; r2d6; for (5) { r1d2; } 我们的异世界来客是个冰元素使,这个魔法骰子的语法和她魔法咒语的语法很接近,所以她很喜欢这个骰子。唯一美中不足的是,这个骰子没有判断输入是否合法的能力。如果输入了不正确的掷骰程序,魔法骰子就可能坏掉。因此,她打算编制一个魔法,可以预先判断输入是不是合法的。 输入 一段魔法骰子的输入程序。 输出 如果输入程序合法,就输出一行OK,否则输出一行Fail。 样例输入 r1d6;if (r1d6-3){while(r1d6-3) 15; (r3d20)*(r1d6);}else for(r1d6) if(r12d10-60) 1+1;r2d6;for (5){ r1d2;} 样例输出 OK 读到这里的朋友,是不是觉得这个题里魔法骰子的语法似曾相识?没错,这个语法是有意仿照C语言函数定义的部分来编制的。把rd运算符改成别的C语言运算符之后,甚至可以在C语言里跑起来(当然,要放在某个函数的函数体里才行,而且后面要加上return)。其实C语言的语法没那么难,不是么? 另外,总觉得今天这道题,非相关专业的学生应该不太好答出来了……那么,如果觉得自己不太会答这个题,那么可以试试ANTLR4. 微型召唤阵: @yhz012 五月 6, 2020,由Mr.K 018修改 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 (已修改) · 只看该作者 6 分钟前, yhz012 说道: 我这是被钦定了吗,瑟瑟发抖 没错,你已经在名单(指参与者名单)里了 这个题其实跟上一期是同一道题,区别无非是语法的复杂程度不同 当然,这并不意味着这个题是个表达式求值( 五月 6, 2020,由Mr.K 018修改 链接到点评
yhz012 发布于五月 6, 2020 分享 发布于五月 6, 2020 (已修改) · 只看该作者 17 分钟前, Mr.K 018 说道: 没错,你已经在名单(指参与者名单)里了 这个题其实跟上一期是同一道题,区别无非是语法的复杂程度不同 当然,这并不意味着这个题是个表达式求值( 上一题我可以绕开有限状态机,纯靠栈来写,这个我大概是真的绕不开了吧…… 另外至少把上一期的参与者也拉来啊(x不能只有我一个人面对恐惧(x @北冥有鱼1573 五月 6, 2020,由yhz012修改 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 18 分钟前, yhz012 说道: 上一题我可以绕开有限状态机,纯靠栈来写,这个我大概是真的绕不开了吧…… 另外至少把上一期的参与者也拉来啊(x不能只有我一个人面对恐惧(x @北冥有鱼1573 这个题DFA实际上是不够的(笑 需要下推DFA才行,就是DFA加一个符号栈 链接到点评
北冥有鱼1573 发布于五月 6, 2020 分享 发布于五月 6, 2020 · 只看该作者 我是谁我在哪 不懂编译原理啊……但是光是做检查的话,先用分割成一个个语句,分别检查每个语句合法性,再检查大括号匹配,说不定能成?可惜我接下来几天应该没空搞这个了 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 1 小时前, 北冥有鱼1573 说道: 我是谁我在哪 不懂编译原理啊……但是光是做检查的话,先用分割成一个个语句,分别检查每个语句合法性,再检查大括号匹配,说不定能成?可惜我接下来几天应该没空搞这个了 没事,不懂编译原理就用ANTLR硬上 Mr.K 018穿越到里区后,遇见了一只九尾狐狸,完成了她交付的汉化任务后被抚摸。4节操 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 14 分钟前, 莫得姓名 说道: 建议改成: 万 魔 百 鬼 召 来 术 可是有一说一,我也没召来几个魔鬼啊…… 你看一共就四个人回,两个都是说骚话的,还有一个卖弱的 链接到点评
Mr.K 018 发布于五月 6, 2020 作者 分享 发布于五月 6, 2020 · 只看该作者 28 分钟前, 莫得姓名 说道: 卖弱的就是我 毕竟你的题看着就让人头大,能招来四个就已经很魔鬼了 是吗? 那我以后出简单一点吧 链接到点评
PhoeniXLL 发布于五月 7, 2020 分享 发布于五月 7, 2020 (已修改) · 只看该作者 啊这……这已经不是算法了吧回想起被编译器支配的恐惧 诶不对,我只需要检测语法上ANTLR4不是大材小用,语法不多硬判说不定更好写 五月 7, 2020,由PhoeniXLL修改 链接到点评
推荐贴