程序设计语言SP是一门支持简单算术功能的玩具型程序设计语言,易于分析和实现,适合作为语言实现初学者的处理对象。
SP语言的程序中仅允许使用33个变量,其名字分别为X、Y、Z、X0、…、X9、Y0、…、Y9、Z0、…、Z9;所有变量和表达式的类型均为整数类型。
SP语言仅支持四类语句,其语义描述如下:
READ var 从控制台读入一个int 类型的值,并保存在变量var 中
WRITE expr 将表达式expr 的值输出到控制台
LET var = expr 将变量var 的当前值设置为表达式expr 的值
GOTO label [IF expr] 跳转到指定的行;
如果指定表达式expr, 则仅当expr ≧ 0 时才跳转
SP语言语法定义的完整BNF描述如下:
<program> | ::= | <progline> | <program> <progline> |
<progline> | ::= | <number> : <stmt> ; | <stmt> ; |
<stmt> | ::= | READ <var_id> | |
|
| WRITE <expr> | |
|
| LET <var_id> = <expr> | |
|
| GOTO <number> | |
|
| GOTO <number> IF <expr> |
<expr> | ::= | <term> | <term> + <term> | <term> -<term> |
<term> | ::= | <factor> | <factor> * <factor> | <factor> / <factor> |
<factor> | ::= | ( <expr> ) | <number> | <var_id> |
<var_id> | ::= | <letter> | <letter> <digit> |
<number> | ::= | <digit> | <number> <digit> |
<letter> | ::= | X | Y | Z |
<digit> | ::= | 0 | 1 | ... | 9 |
A、输入10个数,输出其中的最大值、最小值。
LET X = 1;
LET Y = 2;
100: WRITE X;
X=X+2;
GOTO 100 IF 98-X;
X =2;
Y = Y-1;
GOTO 100 IF Y-1;
B、Fibonaci数列各项为1, 1 , 2 , 3 , 5 , 8 , 13 , 21, ... ,求第40项。
LET X1 = 1;
LET X2 = 1;
LET X3 = 0;
LET Y = 40;
LET Z = 2;
100:X3 = X2 + X1;
X1=X2;
X2=X3;
Z=Z+1;
GOTO 100 IF Y-Z;
WRITE X3;
C.输入10个数 输出最大的
LET X = 0;
LET Z = 10;
100:READ Y;
Z = Z-1;
GOTO 300 IF X - Y;
X = Y;
300:GOTO 100 IF Z-1;
WRITE X;
D.输入一个整数 计算个位的和 直到结果为一位数 552->12->3
READ X0;
100:LET X = 0;
LET YYY = 0;
LET Z = 0;
200: LET X = X0/10; 除去个位
LET Y = X0-(X*10); 取得个位
LET Z = Z+Y; z保存各位相加结果
LET X0 = X0/10; 取低位完成,改变X0
GOTO 200 IF (X/10-1; 除到为1位数为止GOTO 300 IF (Z/10)-1;
LET X0 = Z;
GOTO 100;
300: WRITE Z;