語法分析基本概念

語法分析的前提:對語言的語法結構進行描述,采用正規式和有限自動機描述和識別語言的單詞符號, 用上下文無關文法來描述語法規則



語法分析的任務:分析一個文法的句子的結構
語法分析器的功能 :按照文法的產生式(語言的語法規則),識別輸入符號串是否為一個句子(合式程序)

自下而上(Bottom-up):從輸入串開始,逐步進行歸約,直到文法的開始符號,歸約:根據文法的產生式規則,把串中出現的產生式的右部替換成左部符號,從樹葉節點開始,構造語法樹,算符優先分析法、LR分析法
自上而下(Top-down):從文法的開始符號出發,反復使用各種產生式,尋找"匹配"的推導,推導:根據文法的產生式規則,把串中出現的產生式的左部符號替換成右部,從樹的根開始,構造語法樹,遞歸下降分析法、預測分析程序
自上而下分析面臨的問題
基本思想:從文法的開始符號出發,向下推導,推出句子,針對輸入串,試圖用一切可能的辦法,從文法開始符號(根結點)出發,自上而下地為輸入串建立一棵語法樹



多個產生式候選帶來的問題,
回溯問題:分析過程中,當一個非終結符用某一個候選匹配成功時,這種匹配可能是暫時的,出錯時,不得不“回溯”





文法左遞歸問題: 一個文法是含有左遞歸的,如果存在非終結符P

- 面臨的問題
- 文法左遞歸問題
- 回溯問題
- 構造不帶回溯的自上而下分析算法
- 消除文法的左遞歸性
- 消除回溯
消除文法的左遞歸
直接左遞歸的消除


間接左遞歸的消除



消除左遞歸的算法

由於對非終結符排序的不同,最后所得的文法在形式上可能不一樣。但不難證明,它們都是等價的
消除回溯
為了消除回溯必須保證:對文法的任何非終結符,當要它去匹配輸入串時,能夠根據它所面臨的輸入符號准確地指派它的一個候選去執行任務,並且此候選的工作結果應是確信無疑的
FIRST和FOLLOW集合的構造

FIRST集合
令G是一個不含左遞歸的文法,對G的所有非終結符的每個候選α定義它的終結首符集FIRST(α)為:


提取公共左因子

FOLLOW集合


L: 從左到右掃描輸入串 L: 最左推導 1:每一步只需向前查看一個符號

FIRST和FOLLOW集合的構造


構造每個文法符號的FIRST集合


構造FOLLOW(A)

構造每個非終結符的FOLLOW集合

對最后的FIRST、FOLLOW集合有點迷,真的有點迷,晚上不該看這個的!!o(╥﹏╥)o
