#P3695. CYaRon!语

    ID: 2628 远端评测题 1000ms 125MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>模拟字符串洛谷原创O2优化洛谷月赛

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

提示

对数据做出以下保证:

  1. 输入数据一定是合法的CYaRon!语程序,不包含注释,代码、缩进风格 (四个空格)与上述样例相同。但不保证逗号、运算符前面的空格数量和有无一定相同

  2. 变量名在10个字符以下,仅包含小写英文,数组最大大小为1000,变量最多50个,所有表达式的运算结果,包括变量的值一定在int范围内。 (但数组可能是类似于[2001..3000]的,下标可能范围为0到1亿)

  3. 所有指令小写。

  4. 该程序一定能够在合理的时间、内存限制内执行完毕。

  5. hor语句执行过程中,循环变量、初始值、结束值不会被循环中的代码改变。

  6. 该程序最多500行