編譯原理-語法分析學(xué)習(xí)筆記


語法分析的目的

? ? 詞法分析與語法分析處于編譯器的前端踪古,對輸入的源程序進(jìn)行分析。詞法分析钟沛,類似于將語句切分為關(guān)鍵字畔规、記號、操作符等助于語法分析識別的記號流讹剔;而語法分析油讯,是將記號流生成抽象語法樹详民,便于后面語義分析。



語法分析的工具

? ? 數(shù)學(xué)理論

? ? ? ? 上下文無關(guān)文法(CFG)

? ? 自頂向下分析

? ? ? ? 遞歸下降分析法

? ? ? ? LL分析算法

? ? 自底向上分析法

? ? ? ? LR分析算法

上下文無關(guān)文法

? ? 上下文無關(guān)文法G={T,N,P,S},T表示終結(jié)符集合陌兑,N表示非終結(jié)符集合沈跨,P表示一組運(yùn)算規(guī)則,S為唯一開始符號兔综。

? ? 對于一個句子饿凛,它首先由開始符號S為開端,并不斷地轉(zhuǎn)化為非終結(jié)符软驰,最終轉(zhuǎn)為終結(jié)符涧窒。而它們的轉(zhuǎn)化,并填充產(chǎn)生式規(guī)則集合锭亏。

? ? 非終結(jié)符只有E纠吴,而E可以推出:E->num,E->id,E->E+E,E->E*E;最后推出上圖左邊的式子慧瘤。一個具體的例子戴已,就是3+4*5這個例子。

? ? 對于上述文法锅减,使用最左推導(dǎo):

? ? ? ? ? ? E->E+E,

? ? ? ? ? ? E->3+E,

? ? ? ? ? ? E->3+E*E,

? ? ? ? ? ? E->3+4*E,

? ? ? ? ? ? E->3+4*5.

? ? 對于語法分析程序糖儡,回復(fù)YES。

? ? 而另一種推導(dǎo):

? ? ? ? ? ? E->E*E,

? ? ? ? ? ? E->E+E*E,

? ? ? ? ? ? E->3+4*5.

? ? 這兩種推導(dǎo)的結(jié)果是一樣的怔匣,但是表達(dá)式的運(yùn)算取決于語法分析樹的后序遍歷握联。

? ? 對于存在二義性的文法,編譯器是不可接受的每瞒,只能重寫文法金闽。

文法重寫

? ? 我們將上述文法重寫為左遞歸文法

? ? E-> E+T | T,

? ? T-> T*F | F,

? ? F-> id | num

? ? 根據(jù)上述文法,我們的表達(dá)式可以遞歸擴(kuò)展独泞,比如E->E+T呐矾,右邊的E又可以替換為E+T,所以我們得到E->E+E+T懦砂,累加符號就解決了蜒犯。同理,T=T*...F荞膘,連乘符號解決了罚随。

? ? 對于上述3+4*5的文法推導(dǎo),為E->E+T->T+T->T+T*F->T+F*F->F+F*F羽资,而F為數(shù)字或者id淘菩,從而得到分析樹。


自頂向下分析法

????通過對文法的不斷推導(dǎo),來匹配輸入的這個字符串是否為可匹配的文法潮改。譬如文法G,和輸入s汇在,通過G的不斷嘗試回溯生成t,以匹配文法s亩鬼。

? ? 例子:G -> N V N ,N -> a | b | c,V -> e | f雳锋。

? ? 輸入cfc羡洁,首先通過棧存儲開始符號G筑煮,并通過循環(huán)轉(zhuǎn)化為下一個推導(dǎo)咆瘟,N V N诽里,注意這里是從右往左入棧谤狡;隨后,對每一個棧頂?shù)姆墙K結(jié)符進(jìn)行嘗試焰宣,找到終結(jié)符匹配捕仔。比如轉(zhuǎn)化為a V N榜跌,與輸入第一位c匹配不上,觸發(fā)回溯嘗試下一個句子翻譯 b V N悄蕾,不斷往復(fù)直到匹配出cfc為止帆调。

????因為編譯器需要處理大量的程序番刊,回溯是一個比較昂貴的過程撵枢,避免回溯,就是在替換終結(jié)符的時候直接拿到對應(yīng)的終結(jié)符號潜必,按照寫代碼的理解磁滚,就是對符號集合存儲使用的是HashMap而不是Array垂攘。

遞歸下降分析算法

對每一個token晒他,對應(yīng)的是一個分析函數(shù)逸贾,而文法的未終結(jié)符之間都是分析函數(shù)的關(guān)聯(lián)铝侵。? ??

LL(1)分析算法

L采用左遞歸咪鲜,以及從左讀入一個前看符號的分析算法疟丙。

每次分析token輸入符號的時候,回溯將會造成大量的資源損耗发皿,此算法提出是基于表驅(qū)動的解決方案拂蝎,也就是通過當(dāng)前符號與輸入符號的映射來確定解析路徑。不需要使用next一個前看符號皇钞,而是使用correct一個前看符號夹界。



使用一個非終結(jié)符左看第一個符號生成FIRST集合可柿,進(jìn)而生成LL(1)表复斥。LL(1)表中表示的是第幾條產(chǎn)生式規(guī)則目锭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痢虹,一起剝皮案震驚了整個濱河市主儡,隨后出現(xiàn)的幾起案子糜值,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異累贤,居然都是意外死亡少漆,警方通過查閱死者的電腦和手機(jī)示损,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仔掸,“玉大人起暮,你說我怎么就攤上這事负懦“啬澹” “怎么了葫盼?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵抛猫,是天一觀的道長孩灯。 經(jīng)常有香客問我败匹,道長讥巡,這世上最難降的妖魔是什么掀亩? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮槽棍,結(jié)果婚禮上炼七,老公的妹妹穿的比我還像新娘布持。我一直安慰自己题暖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著裂问,像睡著了一般堪簿。 火紅的嫁衣襯著肌膚如雪椭更。 梳的紋絲不亂的頭發(fā)上虑瀑,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音扔水,去河邊找鬼主届。 笑死君丁,一個胖子當(dāng)著我的面吹牛绘闷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燎潮,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼除呵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泛豪?” 一聲冷哼從身側(cè)響起诡曙,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盖文,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年郭毕,在試婚紗的時候發(fā)現(xiàn)自己被綠了显押。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扳肛。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乘碑,靈堂內(nèi)的尸體忽然破棺而出挖息,到底是詐尸還是另有隱情,我是刑警寧澤兽肤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布套腹,位于F島的核電站绪抛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏电禀。R本人自食惡果不足惜幢码,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尖飞。 院中可真熱鬧症副,春花似錦、人聲如沸葫松。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腋么。三九已至咕娄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珊擂,已是汗流浹背圣勒。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摧扇,地道東北人圣贸。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宣旱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 詞法分析與語法分析區(qū)別 詞法分析:字母是元素,組成字符串用含,記號的集合,線性結(jié)構(gòu) 語法分析:記號是元素帮匾,組成句子啄骇,句...
    有苦向瓜訴說閱讀 1,667評論 0 1
  • 語法分析的基本任務(wù)就是根據(jù)給定的文法識別數(shù)據(jù)中的各類短語并構(gòu)造它的分析樹。如果輸入串的各個單詞恰好自左向右地分布在...
    衣忌破閱讀 1,335評論 0 0
  • 一瘟斜、緒論 編譯程序 功能:高級pro轉(zhuǎn)低級目標(biāo)pro 形式編譯執(zhí)行轉(zhuǎn)obj在執(zhí)行缸夹,效率高跨平臺性差解釋執(zhí)行逐行解釋...
    rh_Jameson閱讀 3,592評論 0 10
  • 大學(xué)畢業(yè)的這兩年,我一直在問自己一個問題螺句,為什么活著虽惭。各種各樣的聲音在耳邊回響:因為想活著;活著為了更好的生活蛇尚;欲...
    為什么小姐閱讀 195評論 0 0
  • 今晚芽唇,媽媽買回了一袋石榴,我看了以后佣蓉,我對媽媽說“我回家一定要吃最大的石榴披摄。”媽媽沒注意勇凭,到了家當(dāng)我拿起大石...
    GK張祖福閱讀 166評論 0 0