• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      編譯技術(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)容中間代碼、目標代碼的生成打下更為堅實的理論和實踐基礎(chǔ)。

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

      一、語言定義

      (一) 字符集的定義:

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

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

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

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

      (二) 單詞集的定義:

      <單詞集>:= <保留字> | <雙界符> | <標識符> | <常數(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.<標識符> := 〈字母〉| 〈標識符〉〈數(shù)字〉| 〈標識符〉〈字母〉

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

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

      (三) 表達式的定義

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

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

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

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

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

      (四) 語句定義

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

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

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

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

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

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

      (一)單終結(jié)符

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

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

      其基本思路是每次從源文件中讀一行放入緩沖區(qū)。再從緩沖區(qū)中每次讀取一個字符進行判斷,為方便判斷,每次多讀一個字符,根據(jù)不同的字符進入不同的處理過程。將識別出的每一個單詞(標識符,立即數(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é)果直接在標準輸出上輸出。解釋程序結(jié)束后,對資源進行回收。

      四、測試數(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.

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

      參考文獻:

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

      猜你喜歡
      解釋
      憲法司法化研究
      馬克·吐溫的墓中回憶錄:《戲謔人生》
      侵犯商業(yè)秘密罪的無罪辯護
      關(guān)于民事訴訟法司法解釋重點問題的思考
      大學(xué)英語閱課教學(xué)中的3+1
      別讓“解釋”傷了愛
      以“歷史性”視角解讀譯作中的翻譯活動
      關(guān)于近地天體撞擊地球原理的猜想
      《拯救乳房》對創(chuàng)傷性體驗與創(chuàng)傷后成長的書寫
      貪污賄賂:兩高發(fā)布新“解釋”
      富川| 左贡县| 崇信县| 岳阳市| 芜湖县| 吉水县| 临湘市| 左贡县| 平度市| 泗阳县| 新田县| 清原| 芦溪县| 泌阳县| 武川县| 湟中县| 资中县| 雷州市| 华容县| 高平市| 海南省| 怀来县| 华池县| 务川| 龙海市| 余江县| 迭部县| 汕尾市| 明光市| 商南县| 钟山县| 河曲县| 丹寨县| 东山县| 乐清市| 博湖县| 交城县| 永川市| 信阳市| 江北区| 金门县|