#YDRS007A. [花式编译 #1] 成为初级表达式大师
[花式编译 #1] 成为初级表达式大师
题目背景
《编译原理》是一门非常有意思的课程。整门课程的关键任务在于:搞清楚编译器是如何实现的,并实现它。其中涉及了很多精妙的算法、有趣的设计和伟大的灵魂(e.g. Mr. Knuth) 。
我们也希望正在做题的你,也能在 OI 这方乱世中领略到一些编译器的美。当然,千里之行,始于足下。所以,我们的挑战,将会是以渐进式的方式来进行。
To be continued ... !
题目描述
本题是云斗【花式编译】系列题目的 #1 题。
本题的任务非常简单:输出给定程序的运行结果。如果将任务划分的更详细一点,那便是:识别出一些变量的值,并且计算出表达式的最终结果。
具体的,你会接收到形如以下格式的输入:
int main() {
int a = 5 ;
int b = 4 ;
int c = 3 ;
int d = 2 ;
int e = 1 ;
printTheRes(a * b + c - d / e) ;
return 0 ;
}
其中:
- 第一行
int main(){
用于声明主函数。保证大括号不会换行(谨遵教义)。 - 第 行,每行都是一个形如
int x = [数字] ;
的语句,用于定义变量。- 保证变量名
x
仅包含一个英文字母,且[数字]
仅为个位数。
- 保证变量名
- 第 行,保证只有一个形如
printTheRes(表达式);
的输出语句。printTheRes()
函数是一个默认预设函数,可以理解为是一个用于输出表达式结果的超级输出函数。代码中默认可以直接调用这个函数。- 具体用法可以通过如下例子说明:
printTheRes(X)
和cout << (X) << endl
在语义上是等价的,其中 X 是符合题目要求的合法表达式。
- 第 行,保证只有一个合法的返回值语句,即
return 0;
。 - 第 行,保证只有一个
}
。 - 有关表达式的格式:
- 表达式中仅包含字母(变量名)和运算符。不包含数字或未预先定义的变量名。
- 本题的测试数据中不会出现括号
()
或[]
。 - 本题的测试数据中包含以下运算符:
+
,-
,*
,/
,%
,<
,>
,>=
,<=
,!=
,==
。 - 表达式的语法保证正确,即符合 C 语言的语法规则。
- 最后,我们不能限制程序员的 coding 喜好,对吧?因此,本题的测试数据中,会存在一些不影响代码本身正确性的多余空格(但显然,不会有多余的空行)。这部分可能会对你的算法存在一定影响。也就是说,你需要为以下代码风格做好准备:
int main() {
int a = 5 ;
int b = 4 ;
int c = 3 ;
int d = 2 ;
int e = 1 ;
printTheRes(a * b + c - d / e) ;
return 0 ;
}
给出的代码,保证在补足缺省函数实现的前提下,能够直接在 C 语言编译环境中正确运行。
输入输出格式
输入
输入包含多行字符串(一个 C 语言程序)。具体的输入格式参考【题目描述】中的解释。
输出
共一行 个数字,表示输入程序的运行结果。
样例
int main() {
int a = 5 ;
int b = 4 ;
int c = 3 ;
int d = 2 ;
int e = 1 ;
printTheRes(a * b+c-d/e) ;
return 0 ;
}
21
int main() {
int a = 5 ;
int B = 4 ;
int c = 3 ;
int D = 2 ;
int E = 1 ;
int F = 0 ;
printTheRes(a<=B>c+F-E%D*c-F!=B-a<c) ;
return 0 ;
}
1
数据范围
对于 的数据,保证只存在 +
,-
两种运算符。
对于 的数据,保证只存在 +
,-
,*
,/
,%
五种运算符。
对于全部 的数据,保证全部赋值语句的右值只会是 的非负整数,保证全部的变量名均为单个英文字母,保证总代码长度不会超过 1.5 KB,保证只存在以下运算符: +
,-
,*
,/
,%
,<
,>
, >=
,<=
,!=
,==
。
注意:作为输入数据的 C 语言代码中,可能存在多余但不影响语义的空格。