小型basic編譯器問題
time limit: 1000ms memory limit: 65536kb
problem description
編寫乙個tinybasic語言的解釋程式,對於任何乙個給出的正確的tinybasic語言的程式,你的程式能執行它並得到正確的結果。那麼,怎樣的tinybasic的程式叫做正確的呢?
(1)符合tinybasic語言的語法規則;
(2)程式執行時會產生乙個或多個輸出,可以中斷(即程式不會進入無限迴圈狀態)。
tinybasic語言的語法規則:
(1)每一行的tinybasic程式都是下面這樣的形式(所有出現的字母均為大寫)
[《空格》]《行號》《空格》《語句》
其中,[《空格》]中可以有任意個空格,當然也可以沒有;
《行號》中一定要有行號,從1開始,依次遞增1;
《空格》中至少有乙個空格;
《語句》應為下面的語句之一:
let《空格》《變數》=《表示式》
print《空格》《變數》
goto《空格》《表示式》
if《空格》《表示式》
stop
(2)定義變數和表示式的規則為
《變數》必須是單個的大寫英文本母,儲存乙個整數值;
《表示式》為 //(這個地方不知道為啥題目少了一塊。。。請自行yy);
《常量》 範圍在[-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=1x=3
x=5x=7
x=9x=11
x=13
x=15
x=17
x=19
hint
這個題麼,,,就是一道純粹的模擬題,最近刷poj太累,所以就刷了個水題玩玩,哈哈哈。。。
具體的模擬過程題目裡面已經說的很清楚了,只需要注意幾點:
鑑於題目裡面用到的變數全是只有一位的大寫字母,所以用乙個陣列存下所有可能出現的變數,用ascll碼作為下標;
stop作為終結語句,但並不一定在最後,所以要輸入結束後再從第一句開始執行;
所有變數初始值為0,先清空陣列;
其他的只需要按照平時程式設計的思路走即可,細節不用多說。
#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;
}---------------------
原文:
小型Basic編譯器問題
time limit 1000ms memory limit 65536kb submit statistic problem description 編寫乙個tinybasic語言的解釋程式,對於任何乙個給出的正確的tinybasic語言的程式,你的程式能執行它並得到正確的結果。那麼,怎樣的tin...
sdut 2099 小型Basic編譯器問題
time limit 1000ms memory limit 65536kb submit statistic problem description 編寫乙個tinybasic語言的解釋程式,對於任何乙個給出的正確的tinybasic語言的程式,你的程式能執行它並得到正確的結果。那麼,怎樣的tin...
編譯器優化問題
今天遇一程式,unsigned char a,b,c a 0x89 b a 1 c a b 在單步除錯的時候,觀察數值發現b的值為0,分析b的值應當為0x44,百思不得其解,通過檢視其彙編語句,發現問題所在。彙編語句如下 mov r7,tmod 0x89 mov a,r7 clr c rrc a a...