• 
    

    
    

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

      堆棧在語法分析中的應(yīng)用

      2014-05-14 01:49:22
      天津科技 2014年4期
      關(guān)鍵詞:堆棧文法規(guī)約

      張 媛

      (天津市河?xùn)|區(qū)職工大學(xué) 天津 300162)

      計算機的應(yīng)用中有多種高級語言,把這些高級語言翻譯成對應(yīng)的機器語言,這一過程就是編譯。眾所周知,編譯原理在整個工作過程中通常分為詞法分析、語法分析、語義分析和中間代碼生成,代碼優(yōu)化以及目標(biāo)代碼生成這幾個階段,每一個階段都會實現(xiàn)不同的功能。在整個編譯過程中,堆棧都起著重要的作用,以下將就堆棧在語法分析中的應(yīng)用進(jìn)行說明。

      所謂語法分析,就是在詞法分析的基礎(chǔ)上,通過分析輸入串對高級語言的語法結(jié)構(gòu)進(jìn)行分析,分為自上而下的語法分析和自下而上的語法分析兩種方法。

      1 自上而下語法分析中堆棧的應(yīng)用

      在自上而下的語法分析中,從文法開始符號出發(fā),利用所有的產(chǎn)生式,通過最左推導(dǎo),為輸入符號串自上而下地建立一棵語法樹。在消除回溯和直接左遞歸后,即可利用棧來進(jìn)行分析。自上而下語法分析中的一種有效方法是預(yù)測分析法,需要用到總控程序、預(yù)測分析表和一個先進(jìn)后出棧,如圖1所示。

      圖1 預(yù)測分析模型圖Fig.1 Forecasting analysis model

      在預(yù)測分析法中,棧底中最初存放“#”和文法開始符號,總控程序每次都要根據(jù)棧頂元素和新輸入的符號來進(jìn)行工作,若棧頂元素為終結(jié)符號,則:

      ①若棧頂元素=輸入終結(jié)符號≠“#”,則匹配成功,此時將棧頂元素彈出,將指針指向新的輸入符號進(jìn)行分析。②若棧頂元素=輸入終結(jié)符號=“#”,說明整個輸入符號串分析完成,結(jié)束分析過程。③若棧頂元素是非終結(jié)符號,則需要查看預(yù)測分析表,找到相應(yīng)的產(chǎn)生式,將棧頂元素彈出后,產(chǎn)生式右部的所有符號按照反序依次壓入堆棧中,形成新的棧頂元素。

      假設(shè)有文法 G[S]:S→S+S│S*S│a,該文法存在直接左遞歸,消除直接左遞歸得到新的文法:S→aS’,S’→+SS’│*SS’│ε對輸入符號串 a+a*a 的優(yōu)先分析過程如表1所示,其中棧存放分析過程中出現(xiàn)的文法符號序列。

      表1 自上而下語法分析對符號串a(chǎn)+a*a的分析過程表Tab.1 Table of analysis process for String a+a*a via topdown syntax analysis

      2 自下而上語法分析中堆棧的應(yīng)用

      自下而上的語法分析同樣也是要建立一棵語法樹,但它是從葉結(jié)點出發(fā),利用所有產(chǎn)生式,逐步向上構(gòu)造子樹,直至得到根結(jié)點,也就是文法的開始符號。它的主導(dǎo)思想是“移進(jìn)—規(guī)約”,是推導(dǎo)的逆過程,自上而下分析法是要為輸入符號串找一個最左推導(dǎo),而自下而上分析法則是要找到輸入符號串的句柄,每次都對句柄進(jìn)行規(guī)約,從而得到一個規(guī)范規(guī)約的過程。自下而上分析法中最常用的就是 LR分析法。在LR分析法中,需要用到LR分析程序、分析表和分析棧,如圖2所示。

      圖2 LR分析模型圖Fig.2 LR analysis model diagram

      在該模型中,分析棧分為狀態(tài)棧和符號棧兩部分,狀態(tài)棧中存放輸入過程中的不同狀態(tài),棧頂元素為當(dāng)前狀態(tài),而符號棧中存放的是現(xiàn)行輸入符號,由當(dāng)前狀態(tài)棧的棧頂元素和現(xiàn)行輸入符號來決定下一個動作。分析棧主要包括4種情況:

      ① 移進(jìn)。在這種情況下,當(dāng)前輸入符號進(jìn)入符號棧,而下一個輸入符號則變?yōu)楫?dāng)前輸入符號,查action表,將下一狀態(tài)進(jìn)入狀態(tài)棧,作為新的棧頂元素。

      ② 規(guī)約。按照相應(yīng)的產(chǎn)生式進(jìn)行規(guī)約,若產(chǎn)生式右端共有n個字符,則同時將狀態(tài)棧和符號棧兩個棧頂彈出 n個元素,并將規(guī)約后的符號進(jìn)入符號棧,作為新的棧頂元素,再查goto表,得到新的狀態(tài)進(jìn)入狀態(tài)棧。

      ③ 接受。根據(jù)輸入符號串進(jìn)行移進(jìn)和規(guī)約操作后,在符號棧中得到了開始符號及“#”號,則分析完成,整個字符串匹配成功。

      ④ 報錯。除了以上動作外,其余都屬于出錯情況,此時應(yīng)中止分析,調(diào)用出錯處理程序,進(jìn)行出錯處理。

      對于文法 G[E]:S→S+L│L,L→L*M│M,M→(S)│a及輸入符號串 a*a+a,我們用 LR 分析法的分析過程,如表2所示。

      3 結(jié) 論

      棧在整個編譯原理的各個過程中都起著重要的作用。進(jìn)行語法分析時,在自上而下分析方法中用來存放分析過程中出現(xiàn)的字符串序列,在自下而上分析法中分為狀態(tài)棧和符號棧,分別存放分析過程中的狀態(tài)及即將輸入的字符串序列。

      [1] 黃賢英,曹瓊,王珂珂. 編譯原理及實踐教程(2版)[M]. 北京:清華大學(xué)出版社,2012.

      [2] 王曉斌,陳文宇. 程序設(shè)計語言與編譯(3版)[M]. 北京:電子工業(yè)出版社,2009.

      [3] 何炎祥,伍春香,王漢飛. 編譯原理[M]. 北京:機械工業(yè)出版社,2010.

      [4] 李文生. 編譯原理與技術(shù)[M]. 北京:清華大學(xué)出版社,2009.

      [5] Alfred V Aho,Monica S,etc.Compilers:Principles,Techniques,and Tools(2,nd ed.)[M]. 北京:機械工業(yè)出版社,2011.

      猜你喜歡
      堆棧文法規(guī)約
      關(guān)于1940 年尼瑪抄寫的《托忒文文法》手抄本
      電力系統(tǒng)通信規(guī)約庫抽象設(shè)計與實現(xiàn)
      一種在復(fù)雜環(huán)境中支持容錯的高性能規(guī)約框架
      嵌入式軟件堆棧溢出的動態(tài)檢測方案設(shè)計*
      一種改進(jìn)的LLL模糊度規(guī)約算法
      基于堆棧自編碼降維的武器裝備體系效能預(yù)測
      Similarity measurement method of high-dimensional data based on normalized net lattice subspace①
      A nearest neighbor search algorithm of high-dimensional data based on sequential NPsim matrix①
      文法有道,為作文注入音樂美
      修辭的敞開與遮蔽*——對公共話語規(guī)約意義的批判性解讀
      镇江市| 永嘉县| 临朐县| 梅河口市| 彝良县| 苍梧县| 青冈县| 广东省| 酒泉市| 洱源县| 固阳县| 敦煌市| 茶陵县| 沿河| 柏乡县| 枞阳县| 西华县| 平昌县| 黄陵县| 循化| 永寿县| 霸州市| 闵行区| 诸暨市| 靖江市| 化州市| 阳新县| 新郑市| 缙云县| 舒兰市| 滨海县| 友谊县| 临猗县| 新闻| 楚雄市| 饶平县| 灌南县| 孝义市| 安西县| 黄大仙区| 安仁县|