第四章 語法分析和語法分析程序(1)

       一個字符串形式的源程序經詞法分析之後,即被轉換爲一串單詞符號,且其中的每一單詞都按它們的內部形式來編碼。

       語法分析程序以單詞串形式的源程序作爲輸入或分析的對象。它的基本任務是:根據語言的語法規則(即根據描述該語言的前後文無關文法),分析源程序的語法結構,即分析如何由這些單詞組成各種語法範疇(如下標變量、各種表達式、各種語句、程序段或分程序,乃至整個源程序等等),並在分析過程中,對源程序進行語法檢査。作爲語法分析程序的輸出,可以有多種不同的形式。爲簡便起見,我們假定語法分析程序的輸出,是用某種方法表示的語法樹。但在很多場合,爲了突出分析方法本身的闡述,我們甚至不提及有關輸出方面的問題。此外,在討論語法分析時,我們也基本上不涉及語義方面的問題。

       目前,已存在許多語法分析方面的方法。但就產生語法樹的方向而言,可大致把它們分爲自頂向下和自底向上兩大類。以往,最常用的兩種方法是分別屬於這兩個大類的遞歸下降法(屬於自頂向下)和算符優先法(屬於自底向上)。前者根據語言中各語法範疇由文法遞歸定義的特點,用一組相互遞歸的子程序來完成語法分析;後者則利用各個算符間的優先關係和結合規則來指導語法分析,因而特別適合於分析各種表達式。這兩種方法的主要優點是比較簡單,便於手工實現。因而過去許多編譯程序都或多或少採用過這兩種方法。其做法是:對於表達式,常採用算符優先分析法;對於語言的其它部分,則採用遞歸下降分析法。除了上述兩種方法外,還有目前較爲流行的LL 分析法(屬於自頂向下)和LR分析法(屬於自底向上)。它們是目前國內外廣泛使用的語法分析程序自動生成工具(如Llama,LLGen,YACC和OCCS等)的基礎。

1、自頂向下的語法分析

       所謂自頂向下的語法分析,就是對已給的輸入符號串w,試圖自上而下地爲它構造一棵語法樹。或者說,從文法的開始符號出發,爲w構造一個最左推導。如果上述嘗試得到成功,則證明w爲相應文法的一個句子;反之,w就不是此文法的句子。

2、自底向上的語法分析

       和自頂向下分析過程的方向相反,自底向上的語法分析是從給定的符號串本身出發,試圖逐步將它歸約爲文法的開始符號。由於在進行自底向上的語法分析時,通常所採用的是左歸約即規範歸約,所以,實現此種語法分析的關鍵,是在分析的每一步,如何尋找或確定當前句型的句柄(即句型中應被最先歸約的子串),以及確定將句柄歸約爲什麼非終結符號。依尋找句柄策略的不同,也就形成了不同的自底向上的分析方法。

發佈了111 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章