#P3695. CYaRon!语
CYaRon!语
题目背景
「千歌です」(我是千歌)、「曜です」(我是曜)、「ルビィです」(我是露比)、「3人合わせて、We are CYaRon! よろしくね!」(三人在一起,我们是CYaRon!多多指教哦!)
CYaRon!的三人在学习了编程之后,决定发明一种自己的编程语言,她们称为CYaRon!语。
(ltt: 明明是我帮她们发明的。)
可是,因为洛谷评测机这时候突然爆了,ltt没有时间再帮CYaRon!的三位小姐姐写CYaRon!语的解释器了。
于是ltt就出了这样一道题,然后等着有人交了AC程序就偷走给小姐姐们。
题目描述
以下是一个典型的CYaRon! 语程序。
{ vars
chika:int
you:int
ruby:array[int, 1..2]
i:int
}
# 以上变量默认值均为0
# 变量名只可是英文字母。
# yosoro语句可以输出一个数字,随后跟一个空格。
:yosoro 2
# 输出2和一个空格(以下不再提到空格)。
# set语句可以为变量赋值。
# 运算符只支持加减号即可。
:set chika, 1
:set you, 2
:yosoro chika + you
# 上一条语句将输出3
# 以下的判断语句均使用以下的格式:
# 操作符,表达式,表达式
# 例如eq, a, 1即C语言中 a==1
# 所有操作符包括: lt: < gt: > le: <= ge: >= eq: == neq: !=
# 日本来的CYaRon三人没法正确地发出if这个音,因此她们就改成了ihu。
{ ihu eq, chika, 1
:set you, 3
:yosoro 1
}
# 输出1
# 以上是ihu语句,无需支持else。
# hor语句同理,
# for i=1 to you如下
{ hor i, 1, you
:yosoro i
}
# 输出1 2 3
# 如下是while和数组的使用方法。
:set i, 1
{ while le, i, 2
:yosoro i
:set ruby[i], i+1
:yosoro ruby[i]
:set i, i+1
}
# 输出1 2 2 3
# 数组不会出现嵌套,即只会有a[i]、a[i+2]而不会有类似于a[i+b[i]]这样的。
# CYaRon语的最后一行,一定是一个换行。
你的任务是写一个CYaRon!语的解释器,实现输入CYaRon!语的程序,解释之执行后输出执行结果。
输入格式
输入文件全部为CYaRon!语程序,最后一行保证是个空行。
请处理输入的时候,一直读到EOF为止。
输出格式
该CYaRon!语程序的执行结果。
具体上,是该CYaRon!语程序所有:yosoro语句的输出。
{ vars
a:int
b:int
}
:set a, 1
:set b, 2
:yosoro a+b
3
提示
对数据做出以下保证:
-
输入数据一定是合法的CYaRon!语程序,不包含注释,代码、缩进风格 (四个空格)与上述样例相同。但不保证逗号、运算符前面的空格数量和有无一定相同。
-
变量名在10个字符以下,仅包含小写英文,数组最大大小为1000,变量最多50个,所有表达式的运算结果,包括变量的值一定在int范围内。 (但数组可能是类似于[2001..3000]的,下标可能范围为0到1亿)
-
所有指令小写。
-
该程序一定能够在合理的时间、内存限制内执行完毕。
-
hor语句执行过程中,循环变量、初始值、结束值不会被循环中的代码改变。
-
该程序最多500行