#TIMUS1027. D++ 再临
D++ 再临
1027. D++ 再临
时间限制: 0.5 秒
内存限制: 64 MB
背景
由我们三月份竞赛的参与者完善的语言 D++ 正在持续改进。其创始人试图使语法尽可能清晰,以便将来简化编程。当然,一些最小规则集将保持不变。
你的程序需要检查有关括号和注释排列规则的遵守情况。
问题
一个正确的 D++ 程序文本包含符号部分、算术表达式和注释。注释可以出现在任何地方,并且可以包含任何符号。注释总是由符号对"("打开,并由符号对")"关闭。每个注释都必须被关闭。D++ 中的算术表达式总是由"("打开,由")"关闭,并且只能包含符号"=+-/0123456789)("和"行尾"符号。算术表达式不能以符号对"(*"开头。你可能会在算术表达式中遇到嵌套括号。在这种情况下,这些括号必须是平衡的。这意味着"((1)))"和"(23))((+)"都不是正确的算术表达式。当且仅当括号放置正确时,算术表达式才是正确的。最后,程序文本的其余部分(从初始程序文本中去除所有注释和算术表达式的结果)可以包含除"("和")"之外的所有符号。
我们特别想指出的是,空格可以出现在程序文本的任何地方,除了出现在算术表达式中时。
输入
标准输入中写入了一些文本。文本中不超过 10000 个符号。可能包含拉丁字母、数字、括号、算术运算符号、空格和"行尾"符号。
输出
如果输入的文本是一个正确的 D++ 程序,你的程序应该向输出写入"YES",否则写入"NO"。
样例
输入
Hello, here is a sample D++ program. It contains some arithmetical expressions like
(2+2=4), (2+-/*) and ((3+3)*3=20(*this is not true, but you don’t have to verify it :-) *)+8)
(* the closing bracket in the previous comment is also in order, since this bracket
does not belong to any arithmetical expression*)
输出
YES