SP6690 BOCOMP - A - Comparison Expressions

题目描述

**问题 A** **比较表达式** 自动化编译器制造公司正在研制一种新的智能编译器。科学家们遇到的一个问题是如何判断两个表达式是否是等价的。一个表达式由一个或多个小写字母组成,表示变量,并用加号(+)或乘号(*)完全括起来。递归地,一个表达式可以是一个单独的变量,或者是一个形如 (E1 + E2) 或 (E1 \* E2) 的完全括号表达式,其中 E1 和 E2 也是表达式。比如,表达式可以是:a, (a+b), ((a\*b)\*b);而非表达式示例有:ab, a\*(b+c)。 两个表达式如果在对所有变量赋予任意整数值的情况下,都能得出相同的结果,就被认为是等价的。例如,((a+b)\*c) 和 ((b\*c)+(c\*a)) 是等价的,但 (a+(b\*c)) 和 ((a+b)\*c) 则不等价。你的任务是编写一个程序,判断给定的两个表达式是否等价。

输入格式

输入包含多组测试数据,每组数据占一行,由两个用空格分开的表达式组成。表达式中的变量以小写字母表示。每个表达式中变量出现的次数最多为 20 次(例如,((a+b)\*a) 中变量共出现三次)。因此,一个表达式最多由 77 个字符组成,包括变量、括号、加号和乘号。输入以一个只包含数字 0 的行结束。

输出格式

对于输入中的每组测试数据,输出一行。如果两个表达式等价,输出 Y;否则,输出 N。 **样例输入** ``` (a+(b\*c)) ((a+b)\*c) ((a+b)\*c) ((c\*b)+(a\*c)) 0 ``` **样例输出** ``` N Y ``` **本翻译由 AI 自动生成**