logo AlgoBeat OnlineJudge
登录 注册

#10030. [NaOI R4T2] Kill it

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Misserina 社交名媛小娜

题目描述

为了成为一名成功的淑女,米塞莉娜正在学习自创编程语言。

米塞莉娜自创的编程语言语法如下:

分隔符

行与行之间用换行符 \r\n 分隔,行内用 _ 分隔。

关键字

  • int,后接变量名表示整数变量,如 int_a 表示定义整数变量 ,值为 int_a_2 表示定义整数变量 ,赋值为 int_a_b 表示定义整数变量 ,赋值为已定义的整数变量 的值。
  • str,后接变量名表示字符串变量。如 str_a 表示定义字符串变量 ,值为空字符串;str_a_2 表示定义字符串变量 ,长度为 str_a_b 表示定义字符串变量 ,当 为整数变量时表示 的长度为 的值,当 为字符串变量时表示将 赋值为 的内容。
  • add,后接两个整数或两个字符串,如果是整数返回两个整数相加的结果,如果是字符串返回后一个字符串连接到前一个字符串后产生的新字符串,如 add_a_b 表示 相加或者将字符串 连接到 后的结果,add_2_3 返回 5,add_add_3_4_5 或者 add_5_add_3_4 返回
  • sub,后接两个整数,返回前面的整数减去后面的整数的结果。如 sub_a_b 返回 的结果。
  • mul,后接两个整数返回相乘结果,或后接一个字符串一个整数 返回字符串复制 次的结果,如 mul_3_4 返回 mul_s_3mul_3_s 返回字符串 重复 次的结果。
  • div,后接两个整数,返回前一个整数整除后一个的结果,例如 div_3_2 返回
  • to,表示赋值,例如 1_to_a 表示将 赋值给整数变量 add_a_b_to_c 表示将 add_a_b 的结果赋值给变量类型相同的变量
  • define,结构必须满足 define_a_b 形式,表示将语句 a 定义为语句 b,语句 a,b 内不得含有下划线。例如:
define_hgoi_sty //编译时将语句 hgoi 替换为 sty
int_hgoi_567 //等于 int_sty_567
define_hgoi_kachang //等于 define_sty_kachang,将语句 sty 替换为 kachang
int_sty_234 //等于 int_kachang_234
define_234_int //将语句 234 替换为 int
234_Hgoi_sub_sty_1 //等于 int_Hgoi_sub_kachang_1

此时定义了三个 int 类型变量,变量名分别为 sty,kachang,Hgoi,值分别为

  • return,表示程序返回一个值后终止,返回值为 表示正常退出程序,否则抛出对应代码的错误,例如 return_add_11_22 会抛出代码为 的错误。

变量名定义

一切非整数非关键字均视为变量名。

当定义重复变量名时,会先对新的变量赋值再将该变量覆盖,例如:

int_a_1
int_a_2

此时的 为整数

int_a_1
str_a_2

此时的 为长度 的字符串。

int_a_1
str_a_a

此时的 为长度 的字符串。

抛出错误

当代码编译或运行出现错误时,会返回一个错误代码,程序直接终止。

  • 错误代码 :返回类型错误,即返回了一个 str 类变量。
  • 错误代码 :爆范围,即运算结果(包括某一步运算结果)中出现大于 或小于 的整数出现大于 的字符串长度,或者 return 了一个小于 或大于 的整数,例如 add_2147483647_1mul_123456_123456return_-1,但是运算过程中不算,例如 sub_1234567890_2345678901 能正常运行,因为它虽然出现了越界的数据,但是没有任何一步结果越界;而 sub_1234567890_add_1111111111_1111111111 算,因为第一步 add_1111111111_1111111111 的结果越界了。
  • 错误代码 :出现未定义变量名。
  • 错误代码 :赋值出错,例如将一个 int 值通过 to 赋值给 str 变量,或者将一个 str 值通过任意方式赋值给 int 变量。
  • 错误代码 :语法错误,例如一个语句中包含多余的部分或缺少的部分,或者将整数或关键字作为变量名,例如 define_a,或者 int_2_3
  • 错误代码 :运算类型错误,例如两个 str 相减。
  • 错误代码 :除数为 ,如 div_1_0
  • 错误代码 define 成环导致编译永无休止,如 define_a_a

抛出错误优先顺序:先检查语法,若有语法错误则报错(代码 );否则爆出运行中遇上的第一个错误。

例如 add_add_add_2147483646_1_1_div_1_0 抛出越界错误而非除数为 错误。

输入格式

第一行:两个整数 为测试点编号(样例为 ), 为代码行数。

接下来 行,每行一个字符串,表示输入的代码。

输出格式

如果程序能在第 行正常结束,输出:

EXIT on line n
exit code 0

如果程序在第 行因为代码为 的错误终止,输出:

KILL on line n
exit code m

特别的,如果程序一直运行到最后依然没有正常退出或报错,若程序共有 行,输出:

EXIT on line n+1
exit code 0

即相当于在程序末尾添上一句 return_0

样例

样例 #1

输入 #1

0 5
int_a_4
int_b_5
3_to_aa
int_c
add_a_b_to_c

输出 #1

EXIT on line 6
exit code 0

样例 #2

输入 #2

0 5
int_a_4
int_b_5
6_to_c
int_c
add_a_b_to_c

输出 #2

KILL on line 3
exit code 3

样例 #3

输入 #3

0 7
int_a_4
int_b_5
return_0
int_c
add_a_b_to_c
I_AK_IOI
div_9_0_to_2

输出 #3

EXIT on line 3
exit code 0

数据范围与提示

测试点编号 分数 特殊性质
,不含嵌套结构,保证程序正常退出
,不含嵌套结构,保证程序出错
不含 define 语句
保证不存在语法错误
全部变量为 int 类型
保证不 define 到关键字
保证有效 define 后的两个都是关键字
保证数据随机生成

对于 的数据,满足 。保证任何变量名中不含 _