#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