ANTLR學習心得 抄書 4

2021-08-29 03:31:21 字數 1601 閱讀 5274

一本厚厚的305頁的書,我實在是不可能都抄在這裡的。只能揀最緊要的抄出來。而這個緊要的判斷,也是以我在讀書的過程中的理解為準,最困難的部分,自己總是想不清楚的部分,我就認為是最緊要的了。今天打算抄的是ll與lr的概念。在我看到的很多關於編譯原理的書中,都會反覆出現ll(1),lr(1)這樣的東西,這究竟是什麼概念呢?

我們這次從第72頁開始抄起:

4.1 語法分析綜述

4.1.1  語法分析程式的功能

語法分析(syntax analysis)是編譯程式的核心部分。編譯程式在完成了詞法分析之後,就進入語法分析階段。語法分析的任務是,按照語言既定的語法規則,對字串形式的源程式進行語法檢查,並識別出相應的語法成分。按照第三章所述的詞法分析程式模型,語法分析程式處理的物件是從詞法分析器輸出的屬性字流形式的源程式,它的處理依據是語言的文法規則,其分析結果是識別出的無語法錯誤的語法成分,可以用語法樹的形式來表示。

程式語言作為一般形式語言的特例,語法分析的關鍵是句型識別問題。語法分析程式要解決的問題是:

設給定文法g和字串(句子) α(α∈v

t*),檢查、判定α∈l(g)?即檢查、判定α是否是文法g所能產生的合法的句子,同時檢查和處理語法錯誤。

圖4.1示出語法分析器的作用及在編譯程式中的位置。

將完成語法分析任務的程式稱為語法分析程式,也稱為語法分析器或簡稱分析器。

4.1.2語法分析方法

語法分析的方法多種多樣,每種方法的具體實現技術更是五花八門。綜合語法分析的力析途徑即產生分析樹的方向而言,通常將語法分析方法分為兩大類,即自上而下分析與自下而上分析:

自上而下的分析方法.實際上是一種產生的方法,面向目標的方法。分析過程是乙個推導過程。

自下而上方法是一種辨認方法,分析過程是歸約過程。

1.自上而下分析方法

給定文匯g和源程式串$,則自上而下分析是:從g的開始符號s出發,通過反覆使用產生式,逐步推導得到$,則可以確認$是文法g的合法句子。

例4.1 設有文法g和輸入串$

g:s→aa|a

a→baa|ε

b→+|-|*|,

$:a*a+a

對輸入串$有如下推導過程和相應的語法樹的構造如圖4.2所示。

推導過程:

s=>aa=>abaa=>a*aa=>a*abaa=>a*a+aa=>a*a+a=$

語法樹的從左到右葉結點=$,則$∈l(g)。

由例4.1可見,自上而下分析的實質是,按照對輸入串的掃瞄順序,從文法g的開始符號s出發,通過反覆使用產生式對句子中非終結符進行替換,為其建立最左推導,即選擇合適的產生式進行推導,逐步使推導結果與$匹配。同樣,乙個句子的推導過程可以表示成一棵語法樹。自上而下分析就是以文法g的開始符號為樹的根結點,從此根結點出發,對任何輸入字元朗,試圖用一切可能的辦法,自上而下地為其建立一棵語法樹。

2.自下而上分析方法

所謂自下而上分析法,就是從給定的輸入串$開始,不斷尋找於串與文法g中某個產生式p的候選式進行匹配,並用p的左部代替之。

例4.2 設有文法g和輸入串$

g:s→aab|a|b

a→+|-|*|,

$:a*b

自下而上分析的過程也可以表示成語法樹的生成過程。對輸入串$逐步進行歸約的過程及其對應的語法樹的生長過程如圖4.3所示。

(未完待續)

ANTLR學習心得 抄書 3

關於給定文法g,如何產生語言l g 將進一步給出其形式化定義。為此,首先給出一些基本術語的定義。定義2 11 直接推導 有v a w v n vt 當且僅當p中存在一條規則a y,稱v直接推導出w 或w直接歸約到v 記作 v w。定義2 12 直接推導序列 如果存在v a 0 a1,a 1 a2,a...

學習心得(4)

11.15 洛谷題沒有寫過很多 問題也不多 主要是狂補了學校oj的usaco題 題目質量都挺高,都值得記錄 usaco training 1.1.4 broken necklace 這題開始的想法就是先遍歷剪下點 然後往兩邊開始比較直到遇到不是w或者非異色的珠子 開始是想把開頭結尾作為乙個間斷點 然...

HTML學習心得 4

css,中文名 層疊樣式表。是一種用來表現html等檔案樣式的計算機語言。css不僅可以靜態地修飾網頁,還可以配合各種指令碼語言動態地對網頁各元素進行格式化。css 能夠對網頁中元素位置的排版進行畫素級精確控制,支援幾乎所有的字型字型大小樣式,擁有對網頁物件和模型樣式編輯的能力。我們可以簡單的來理解...