国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

編譯技術(shù)——SIMPLE語言的語法制導(dǎo)翻譯程序的設(shè)計

2009-04-29 07:17賈燕梅
管理觀察 2009年10期
關(guān)鍵詞:解釋

賈燕梅

摘 要:近年來,信息技術(shù)的迅猛發(fā)展,對軟件技術(shù)和軟件工具的需求急劇增加,編譯技術(shù)已大量應(yīng)用于各種各樣軟件工具的研制和開發(fā)中。本課程設(shè)計從最初語言的定義開始,終結(jié)符號的說明,到驗證詞法分析器、語法分析器功能和語義分析功能的實現(xiàn),為后續(xù)內(nèi)容中間代碼、目標(biāo)代碼的生成打下更為堅實的理論和實踐基礎(chǔ)。

關(guān)鍵詞:編譯原理 編譯程序 解釋 詞法分析器 語法分析器

一、語言定義

(一) 字符集的定義:

1.<字符集>:= <字母> | <數(shù)字> | <單界符>

2.<字 母> := A | B…….| Z | a | b | ……….| z

3. <數(shù)字> := 0 | 1 | 2 |……| 9

4.<單界符> := ' | ( | ) | * | + | , | - | . | / | : | ; | < | = | > | [ | ] _ //15-31

(二) 單詞集的定義:

<單詞集>:= <保留字> | <雙界符> | <標(biāo)識符> | <常數(shù)> | <單界符>

6.<保留字> := and | array | begin | bool | call | case | char | constant | do | else | end | false | for | if | input | integer | not | of | or | output | read | real | repeat | return |set | then | to | true | until | main | void | while | write//32-64

7. <雙界符> := <> | <= | >= | := | /* | */ | ..// 1-7

8.<標(biāo)識符> := 〈字母〉| 〈標(biāo)識符〉〈數(shù)字〉| 〈標(biāo)識符〉〈字母〉

9.〈常數(shù)〉:= 〈整數(shù)〉|〈布爾常數(shù)〉|〈字符常數(shù)〉|〈常數(shù)標(biāo)識符〉|〈實數(shù)〉

10.<整數(shù)〉:=〈數(shù)字〉|〈整常數(shù)〉〈數(shù)字〉

(三) 表達(dá)式的定義

11. <表達(dá)式>:=<算術(shù)表達(dá)式>|<布爾表達(dá)式>|<字符表達(dá)式>

12.<算術(shù)表達(dá)式>:=<算術(shù)表達(dá)式>+-<項>|+-<項>|<項>

13. <項>:=<項>* <因子>|<項>/<因子> | <因子>

14. <因子>:=<算術(shù)量> | (<算術(shù)表達(dá)式>)

15.<算術(shù)量>:=<整數(shù)標(biāo)識符>|<實數(shù)標(biāo)識符> | <正整數(shù)常數(shù)> | <正實數(shù)常數(shù)>

(四) 語句定義

16. <語句>:=<變量聲明語句>|<函數(shù)聲明語句>|<賦值語句>|<布爾表達(dá)語句>|

<函數(shù)調(diào)用語句>|<輸入語句>|<輸出語句>|<return語句>|<復(fù)合語句>

17.<類型>:= integer | char | real | bool

18. <變量聲明語句>=<類型><賦值表達(dá)式>;|<類型><賦值表達(dá)式>,<賦值表達(dá)式>;

19. <輸入語句>:=input:<變量表>;

二、各終結(jié)符說明

(一)單終結(jié)符

三、各功能模塊的實現(xiàn)

(一)詞法分析器的實現(xiàn)

其基本思路是每次從源文件中讀一行放入緩沖區(qū)。再從緩沖區(qū)中每次讀取一個字符進(jìn)行判斷,為方便判斷,每次多讀一個字符,根據(jù)不同的字符進(jìn)入不同的處理過程。將識別出的每一個單詞(標(biāo)識符,立即數(shù))都填入符號表中,并返回符號表的入口以作為TOKEN的第二個分量。這樣構(gòu)成的TOKEN的第一個分量是種別碼,如果是關(guān)鍵字,第二個分量為空,否則,TOKEN的第二分量為該單詞在符號表中的入口地址。

(二)語法分析器的實現(xiàn)

本編譯器采用語法語義分析在同一遍中完成。所用中間代碼為四元式序列。語法分析階段采用LL(1)分析法,采用算符優(yōu)先的至頂向下分析法,但是不使用堆棧保存各種狀態(tài),而是設(shè)置一個字符變量表示當(dāng)前狀態(tài),再根據(jù)所出現(xiàn)的符號,判斷是否規(guī)約和執(zhí)行各種語義動作,直到出現(xiàn)終結(jié)狀態(tài)。在識別出合法的語義后,如果有四元式產(chǎn)生,則寫入中間代碼文件parser.txt中。

(三)四元式解釋器的實現(xiàn)

本編譯器直接將中間代碼四元式解釋執(zhí)行。四元式的結(jié)構(gòu)為:(運算符,direction,source1,source2)。

解釋程序?qū)懺趀xceut.h中,其就為一個switch語句,根據(jù)不同的四元式操作而執(zhí)行相應(yīng)的操作。源程序的執(zhí)行結(jié)果直接在標(biāo)準(zhǔn)輸出上輸出。解釋程序結(jié)束后,對資源進(jìn)行回收。

四、測試數(shù)據(jù)及結(jié)果

由于系統(tǒng)龐大,受篇幅的限制,僅選取了比較有代表性的幾個測試結(jié)果作為說明。

輸入源程序所在文件:我們選擇soure.txt內(nèi)容為

{函數(shù)調(diào)用}

Procedure add(x,y);

Begin

x:=x+y;

end;

{主函數(shù)}

Program exp;

Var a,b:integer;

begin

a:=4*(2-3)/2;{測試優(yōu)先級}

b:=10;

b:=a+b;

write(b);{測試輸出語句}

if a>b then{測試if-then-else}

a:=b;

else

b:=a;

write(b);

call add(a,b);{調(diào)用函數(shù)}

write(a);

While a<b do{測試while-do}

a:=b-a*2;

write(a);

end.

開始?xì)g迎界面,輸入1,我們看見符號表已近生成。當(dāng)然由于屏幕的原因,顯示不全。輸入2, 輸入1, 繼續(xù)執(zhí)行結(jié)果,我們發(fā)現(xiàn)實現(xiàn)正確的結(jié)果?!?/p>

參考文獻(xiàn):

[1] 賀汛.《編譯方法學(xué)習(xí)指導(dǎo)與實踐》,機械工業(yè)出版社

猜你喜歡
解釋
憲法司法化研究
馬克·吐溫的墓中回憶錄:《戲謔人生》
侵犯商業(yè)秘密罪的無罪辯護(hù)
關(guān)于民事訴訟法司法解釋重點問題的思考
大學(xué)英語閱課教學(xué)中的3+1
別讓“解釋”傷了愛
以“歷史性”視角解讀譯作中的翻譯活動
關(guān)于近地天體撞擊地球原理的猜想
《拯救乳房》對創(chuàng)傷性體驗與創(chuàng)傷后成長的書寫
貪污賄賂:兩高發(fā)布新“解釋”
元谋县| 广昌县| 尼勒克县| 农安县| 山阴县| 库尔勒市| 广河县| 中西区| 南昌县| 平昌县| 邳州市| 咸丰县| 延安市| 东光县| 金华市| 昌邑市| 钟山县| 合川市| 盐亭县| 山阳县| 阳曲县| 黎城县| 陇南市| 韩城市| 胶南市| 盐池县| 略阳县| 夹江县| 浙江省| 杂多县| 邹平县| 云和县| 犍为县| 荃湾区| 团风县| 道孚县| 新河县| 呼玛县| 华蓥市| 彭山县| 保康县|