#P1156. 解释

解释

说明

lxd对编译原理一直很感兴趣,他想自己设计一种语言,但是他的字符串算法学的不好,于是他只能先写一个比较简单的语言解释器来练练手。

这种语言包含以下基本元素:

  • 常量(包括整数、小数和字符串)

  • 变量

  • 关键字

  • 内置函数

而你需要来实现这个解释器,使其支持以下语句:

| 作用 | 形式|解释|

|-----|-----|----|

|定义变量|类型 变量名 值|定义一个变量,如果出现重复定义则覆盖原有的变量|

|读入变量|read 变量|从键盘读入这个变量|

|输出变量|print 值|在屏幕上打印这个值|

|整数加|iadd 变量 值 值|变量=值1+值2|

|整数减|isub 变量 值 值|变量=值1-值2|

|整数乘|imul 变量 值 值|变量=值1*值2|

|整数除|idiv 变量 值 值|变量=值1/值2|

|整数模|imod 变量 值 值|变量=值1%值2|

|小数加|fadd 变量 值 值|变量=值1+值2|

|小数减|fsub 变量 值 值|变量=值1-值2|

|小数乘|fmul 变量 值 值|变量=值1*值2|

|小数除|fdiv 变量 值 值|变量=值1/值2|

|字符串相加|scat 变量 值 值|变量=值1+值2|

|整数小于|iless 变量 值 值|变量=(值1<值2?1:0)|

|整数大于|ilarge 变量 值 值|变量=(值1>值2?1:0)|

|整数等于|iequal 变量 值 值|变量=(值1==值2?1:0)|

|小数小于|fless 变量 值 值|变量=(值1<值2?1:0)|

|小数大于|flarge 变量 值 值|变量=(值1>值2?1:0)|

|小数等于|fequal 变量 值 值|变量=(值1==值2?1:0)|

|字符串小于|sless 变量 值 值|变量=(值1<值2?1:0)|

|字符串大于|slarge 变量 值 值|变量=(值1>值2?1:0)|

|字符串等于|sequal 变量 值 值|变量=(值1==值2?1:0)|

|如果|if 值|如果值不等于0,则执行该语句下面一句语句|

|跳转|jump int常量|调到第i行继续执行(行号从0开始)|

|结束程序|end|结束程序|

类型有:

  • int

  • float

  • string

值是指其既可以是变量,也可以是常量。

常量的表达形式:

|类型|例子|

|----|----|

|int|0|

|float|0.0f|

|string|"0"|

错误处理:如果某行语句出错,输出error:行号,其中行号从0开始。并结束运行

注:所有的逻辑操作的值(比如比较的返回值,和if的值)都是int类型

输入格式

一直读入多行程序,整个程序以`end`结尾,保证每行一个语句。

接下来是程序的输入(对应read)。

输出格式

输出程序中的输出(对应print),每一次输出换一次行。如果程序出错,按照错误处理部分的说明处理。

样例

print "hello world"
end
hello world

样例

int a 0
int b 0
int c 0
read a
read b
iadd c a b
print c
end
2 3
5

样例

int a 0
read a
print a
end
abcdefg
error:1