亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

遞歸下降純解釋器編寫的困惑

2019-11-17 05:16:45
字體:
來源:轉載
供稿:網友

  python,lua還有javascript這些腳本語言其實是通過編譯成中間碼,然后再解釋這個中間碼來執行的,所以并不是純解釋的腳本。假如要寫一個純解釋的腳本語言解釋器,這種解釋器的速度肯定不會很快,但是程序可以更簡單一些。這對于需要小型的腳本解釋器的情況比較適用,因為一個人只要幾天就可以完成。比如unix的shell,windows中的cmd等。當然,對于一般的程序員來說,主要是為了嵌入自己的程序。假設我們的腳本包含變量,基本表達式,順序,分支,循環語句,goto等。手工編寫,當然是采用遞歸下降方法。

  變量用一個鏈表或數組就可以解決。解釋賦值語句時,將變量存在符號表中?! ?br />
  表達式已經有很成熟的解決方法,就是一個算符堆棧,一個操作數堆棧,然后按算符優先級來做就可以了  

  然后我們討論基本語句的執行  

  statements==>if_statements,for_statements,goto_statements等

  我們用c函數exec_if,exec_for,exec_goto來分別解釋它們,用exec_statements()函數來遞歸調用前面這些函數?! ?br />
   假如是如下順序執行的腳本,實現是比較輕易的,就是順序執行?! ?br />
  COMMAND:statements;  

  就是前面是命令后面是語句,在c語言中可以用一個switch輕松搞定。但是假如出現了分支與循環,函數的時候,情況就變得復雜了。先看循環語句,比如如下腳本  

  for i= 1 to 100 do  

  statements;  

  end  

  假設現在我們已經將腳本都加載到內存中了,有一個char *指針current指向當前的腳本的位置。這個解釋執行并不難。先解釋for i=1 to 100 do這句,將自變量i保存到符號表中,這時候current已經指向statements了。循環解釋執行的c程序偽碼如下:  

  char *old=current;  

  for(i=自變量開始值;i++;i<自變量目標值)  

  {  

   current =old;  

   執行 statements;(這個過程中current會變化)  

  }  

  其中自變量開始值和自變量目標值都可以解釋獲得,每次執行完statements后在開始循環時恢復current指針即可?!?br />
   但是分支語句可沒這么簡單,比如腳本  

  if eXP1 then  

   statements1;  

  elseif exp2 then  

  statements2;  

  end  

  假設exp1為真則執行statements1,exp2為真則執行statement2。那么解釋執行的時候問題就來了,當exp1為真時,執行完statements1后,我們要跳過statements2到end,然后再執行,同樣exp1為假,exp2為真的時候,問題也同樣存在,需要跳過statements1.問題是怎么跳過?statements1,statements2均可能包含嵌套的分支或循環。在編譯型的腳本中,其實不管是statements1,statements2在編譯的時候都是需要編譯的,在編譯完這些語句后再進行代碼回填。這樣在執行中間碼的過程中exp1,exp2執行完后,就知道跳到哪里執行了,實際上在執行中間碼的時候腳本編譯器已經進行了一次源碼的掃描了,執行的函數不關心這些。但是我們現在是純解釋執行,就是一次掃描了。除了編譯成中間碼這個方法外,我沒有想到更優雅的辦法,這個方法因為涉及到編譯,不是純解釋因此排除掉。對每種語句都有一個解釋執行該語句的函數,例如  

  for 語句我們用exec_for()函數來執行,if我們用exec_if來執行。一種方法是可以對應編寫一個pass函數,例如pass_for(),pass_if(),這樣對于statements我們只需要一個pass_statements()函數就可以了,pass_statements()遞歸調用pass_for,pass_if,這樣就可以過濾掉不需要執行的語句了。pass函數只改變current的值而并不執行被pass掉的那些語句?! ?br />
  顯然pass_statemts除了不修改符號表,不做其它動作外,其它邏輯流程與exec_statements函數相同。這顯然不夠優雅。
  
  goto則需要先掃描行號,執行goto時跳到對應的行?! ?br />
   不知有沒有更好的coding技巧,探索中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品成人av| 7777免费精品视频| 69影院欧美专区视频| www欧美日韩| 欧美日韩精品在线视频| 日韩视频在线免费观看| 中文字幕日韩电影| 亚洲电影免费观看高清完整版在线| 亚洲情综合五月天| 国产精品爽爽爽爽爽爽在线观看| 欧美日韩在线视频首页| 精品日韩中文字幕| 欧美精品一区在线播放| 国产欧美日韩综合精品| 欧美成人中文字幕| 欧美国产亚洲视频| 欧美精品xxx| 91精品国产91久久久久久久久| 疯狂欧美牲乱大交777| 亚洲天堂av在线免费| 欧美成人精品激情在线观看| 7777免费精品视频| 欧美日韩国产精品一区二区三区四区| 国产精品久在线观看| 亚洲欧美精品一区二区| 中文字幕欧美专区| 91黄色8090| 亚洲视频自拍偷拍| 国产精品久久婷婷六月丁香| 欧美成人精品一区| 欧美日韩电影在线观看| 亚洲成色777777女色窝| 欧美一级淫片播放口| 国产mv免费观看入口亚洲| 欧美性做爰毛片| 日韩在线观看免费网站| 国产精品色悠悠| 日韩av快播网址| 欧美成人亚洲成人日韩成人| 亚洲新声在线观看| 亚洲视频在线视频| 中日韩午夜理伦电影免费| 91在线观看免费高清| 国产精品视频精品视频| 久久精品福利视频| 91社影院在线观看| 精品久久久久久国产| 亚洲国产欧美自拍| 91在线观看免费观看| 亚洲精品福利在线观看| 日韩美女毛茸茸| 国产精品成人播放| 国产精品久久久久久久久久ktv| 亚洲精品不卡在线| 日韩有码片在线观看| 欧美性极品xxxx娇小| 亚洲天堂色网站| 色综合天天狠天天透天天伊人| 久久琪琪电影院| 亚洲精品v天堂中文字幕| 亚洲女同精品视频| 精品久久久久人成| 精品欧美激情精品一区| 亚洲成人激情在线| 91高潮精品免费porn| 欧美成人黄色小视频| 国内精品视频一区| 久久久91精品国产一区不卡| 国产精品一区电影| 日韩免费看的电影电视剧大全| 久久伊人色综合| 57pao国产成人免费| 日韩在线播放一区| 成人亚洲欧美一区二区三区| 欧美日韩国产色视频| 在线日韩精品视频| 久久好看免费视频| 这里只有精品视频| 亚洲伊人一本大道中文字幕| 亚洲电影第1页| 亚洲一区二区中文字幕| 精品久久久久久久久久久久久久| 日韩中文字幕免费看| 91久久久久久| 97在线免费观看| 欧美视频中文字幕在线| 97视频免费在线看| 久久av红桃一区二区小说| 国产精品一区二区三区毛片淫片| 日韩高清中文字幕| 日韩av免费在线观看| 亚洲热线99精品视频| 久久亚洲影音av资源网| 国产精品亚洲视频在线观看| 亚洲精品黄网在线观看| 久久久av电影| 国产精品精品视频一区二区三区| 91国产精品视频在线| 欧美福利视频网站| 欧美在线观看网址综合| 亚洲成人动漫在线播放| 欧美午夜电影在线| 久久久99免费视频| zzijzzij亚洲日本成熟少妇| 91精品国产91久久久| 久久久久久久久久久免费| 九九热99久久久国产盗摄| 精品日韩美女的视频高清| 亚洲国产精品久久久久秋霞蜜臀| 日韩一区二区三区国产| 九九热这里只有精品免费看| 日韩亚洲欧美中文在线| 国内精品免费午夜毛片| 国产欧美亚洲视频| 国产一区二区香蕉| 北条麻妃一区二区三区中文字幕| 亚洲最大中文字幕| 日韩大胆人体377p| 俺去亚洲欧洲欧美日韩| 亚洲欧美一区二区精品久久久| 国产精品成人va在线观看| 精品亚洲va在线va天堂资源站| 欧美做受高潮1| 日韩美女av在线| 日韩中文字幕网站| 日本中文字幕久久看| 欧美电影免费观看网站| 成人美女av在线直播| 亚洲娇小xxxx欧美娇小| 欧美在线观看日本一区| 日韩亚洲综合在线| 午夜精品久久久久久久久久久久久| 亚洲精品国精品久久99热一| 欧美高清videos高潮hd| 日本高清久久天堂| 久久久久久久一区二区三区| 国产精品女视频| 国产日韩在线亚洲字幕中文| 最近2019好看的中文字幕免费| 91精品国产综合久久香蕉最新版| 国产精品亚洲综合天堂夜夜| 91成人福利在线| 日韩美女在线观看| 海角国产乱辈乱精品视频| 欧美日韩在线观看视频小说| 91欧美精品成人综合在线观看| 91在线免费观看网站| 色偷偷9999www| 欧美尺度大的性做爰视频| 欧美高清在线视频观看不卡| 亚洲成人黄色网| 亚洲人线精品午夜| 欧美视频免费在线观看| 亚洲情综合五月天| 国产精品视频1区| 久久6免费高清热精品| 91国内揄拍国内精品对白| 亚洲一区av在线播放| 91网在线免费观看| 欧美精品激情在线观看| 啊v视频在线一区二区三区| 98精品在线视频| 亚洲社区在线观看| 97精品伊人久久久大香线蕉|