为了成为一名成功的淑女,米塞莉娜正在学习自创编程语言。
米塞莉娜自创的编程语言语法如下:
分隔符
行与行之间用换行符 \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_3 或 mul_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 会抛出代码为 的错误。
变量名定义
一切非整数非关键字均视为变量名。
当定义重复变量名时,会先对新的变量赋值再将该变量覆盖,例如:
此时的 为整数 。
此时的 为长度 的字符串。
此时的 为长度 的字符串。
抛出错误
当代码编译或运行出现错误时,会返回一个错误代码,程序直接终止。
- 错误代码 :返回类型错误,即返回了一个
str 类变量。
- 错误代码 :爆范围,即运算结果(包括某一步运算结果)中出现大于 或小于 的整数出现大于 的字符串长度,或者
return 了一个小于 或大于 的整数,例如 add_2147483647_1,mul_123456_123456,return_-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 抛出越界错误而非除数为 错误。