sdut 2099 小型Basic編譯器問題

2021-08-10 17:43:30 字數 2349 閱讀 3247

time limit: 1000ms

memory limit: 65536kb

submit

statistic

problem description

編寫乙個tinybasic語言的解釋程式,對於任何乙個給出的正確的tinybasic語言的程式,你的程式能執行它並得到正確的結果。那麼,怎樣的tinybasic的程式叫做正確的呢? 

(1)符合tinybasic語言的語法規則; 

(2)程式執行時會產生乙個或多個輸出,可以中斷(即程式不會進入無限迴圈狀態)。 

tinybasic語言的語法規則: 

(1)每一行的tinybasic程式都是下面這樣的形式(所有出現的字母均為大寫)

[《空格》]《行號》《空格》《語句》 

其中,[《空格》]中可以有任意個空格,當然也可以沒有;

《行號》中一定要有行號,從1開始,依次遞增1; 

《空格》中至少有乙個空格; 

《語句》應為下面的語句之一:

let《空格》《變數》=《表示式》 

print《空格》《變數》 

goto《空格》《表示式》 

if《空格》《表示式》 

stop 

(2)定義變數和表示式的規則為 

《變數》必須是單個的大寫英文本母,儲存乙個整數值; 

《表示式》為   

《常量》 範圍在[-10000…10000]內的整數常量,比如0,-5,34  

《變數》+《變數》 兩個變數所代表的是有符號整數   

《變數》《變數》 大於號,真為1,假為0 

(3)表示式中和let語句的=(等號)兩邊沒有空格; 

(4)tinybasic的程式最多只有100行。 

執行tinybasic語言程式的規則: 

(1)從程式中的第1行開始執行; 

(2)程式中用到的所有變數的初始值均為0; 

(3)語句連續執行除非碰到if或goto語句; 

(4)5種語句的定義 

let 給變數賦值。若兩個變數相加,相加的結果在[-10000…10000]之內。  

print 《變數名》=《值》的格式列印變數的值。左對齊,並單獨占用一行;行中無任何多餘空格。 

goto 跳到行號為《表示式》的值的一行。《表示式》不需要是乙個常量;《表示式》的值是程式中的有效行號。  

if 如果表示式的值非0繼續執行下一行;如果表示式的值為0跳過下一行,執行下一行的下一行。在if語句以下至少還應該有兩條語句。

stop 終止執行。tinybasic程式一定會執行到stop語句(如果你的解釋程式是正確的話);tinybasic程式可能包含乙個以上的stop語句;程式的最後一句不一定是stop語句。

input

輸入資料只有一組,包含乙個程式,沒有多餘的空行,每一行為一條語句,具體要求按上面的解釋。你編寫的程式要正確地執行該tinybasic程式。

output

輸出程式的執行結果,檔案頭尾都不需要多餘空行。

example input

1 let a=10

2 let i=0

3 let x=i+i

4 let t=1

5 let x=x+t

6 print x

7 let t=1

8 let i=i+t

9 if a>i

10 goto 3

11 stop

example output

x=1

x=3x=5

x=7x=9

x=11#include #include #include using namespace std;

struct node p[128];

int value[128]; //儲存所有變數,ascll碼作為下標

int run(int j,node a)

if (!strcmp(a.sign,"goto"))

if (!strcmp(a.sign,"let"))

} else //輸出

printf("%c=%d\n",a.opera[0],value[(int)a.opera[0]]);

return j+1;

}int main()

while(j) //j為下一次執行的行數,為0則終結

j=run(j,p[j]);

return 0;

}

x=13x=15x=17x=19

sdut 懶蟲小鑫

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 小鑫是個大懶蟲,但是這一天媽媽要小鑫去山上搬些礦石去城裡賣以補貼家用。小鑫十分的不開心。不開心歸不開心,小鑫還是要做這件事情的。我們...

魔法少女小瑩瑩 SDUT

problem description 小瑩瑩被困在了乙個由 n 個石柱圍成一圈組成的迷宮裡,也就是 1,2,3,n,1,2,3,這樣一直迴圈。她起始位置是 1,每次只能沿著順時針方向選擇飛躍 a 或者 b 距離的魔法,也就是從當前石柱 i 飛往 i a 石柱或者 i b 石柱。第 m 個石柱有傳送...

C 小I選賓館 SDUT

time limit 1000 ms memory limit 65536 kib problem description 小 i 去天津玩啦,一路上,他跟他的同學發生了許多有趣的事。到了晚上了,小 i 跟他的同學們要選乙個賓館住下了。但是形形色色的賓館讓小 i 不知所措。對於乙個賓館來說,有許多特...