文法和語言,理解克林閉包

原文:編譯原理學習周入門教程 --(3)文法和語言閉包

寫在開始:工具

         上篇咱們介紹了編譯 「工廠」 的流程,本篇介紹,工廠裏的 「工具」。學習

 開始教程:.net

         語言和文法?語言咱們知道,計算機語言,人類的語言,動物的語言,不一樣國家的語言,不一樣種族的語言等等。那神馬是文法呢?所謂文法,文,文字,法,規則,法則,法律。組合起來就是,文字的規則。每種語言都有本身的文法,不一樣的語言有不一樣的文法。例如咱們的中文的文法,用一種規則來定義句子的組成,還拿 「我是中國人」 爲例。3d

           咱們的箇中文句子構造規則:< 主語 >< 謂語 >< 賓語 >< 補語 >< 狀語 >。 而英語的句子構造:S十 V 主謂結構 S 十 V 十 F 主系表結構 S 十 V 十 O 主謂賓結構 S 十 V 十 O1 十 O2 主謂雙賓結構 S 十 V十 O 十 C 主謂賓補結構說明:S=主語;V=謂語;P=表語;O=賓語;O1=間接賓語;O2=直接賓語;C=賓語補足語。咱們能夠看出漢語和英語有不一樣的編排,不一樣的規則,這就是文法。 blog

         咱們這裏要說的是編譯程序的文法。教程

        書中的文法定義:使用文法做爲工具,不只爲了嚴格地定義句子的結構,也是爲了適當條數的規則把語言的所有句子描述出來,能夠說文法是以有窮集合刻畫無窮集合的工具。 get

        接下來了解一些關於表示文法的一些基本定義:數學

 一些基本定義編譯

          符號和符號串:

        正如咱們學習的 English 是由單詞和標點符號構成的,單詞又是有字母構成的,計算機語言也是如此,也是由字母和數字等一些基本符號構成的,一個源程序就是一個 「基本符號串」,因此咱們開始瞭解符號和符號串相關的定義。

         字母表:

        元素的非空有窮集合。不一樣的語言有他本身不一樣的字母表,咱們的計算機語言字母表就是數字,字母,標點等若干符號了。中文的字母表就是漢字了。

         符號串:

        字母表的符號組成任何又窮序列的符號串。例如字母表 A={a,b,c} 則由這個字母表組成的符號串包括: {ab,ac,bc,abc,a,b,c}。

 有了這些就至關於有了 123456,接下來就是一些運算了,符號串的一些運算了。 

         鏈接運算:

           eg:x=bay=nanaxy=banana(很簡單,鏈接在一塊兒)

          方冪運算:x^0= e  ; x^1 = x;.....;(和小學數學的方冪一致)

           兩個字母表乘積:∑1={0,1},∑2={a,b},∑1∑2 ={0a,0b,1a,1b};(小學數學結合運算)

           ∑的正閉包:

                  ∑+=∑∪∑2∪∑3∪∑4∪……

           ∑的克林閉包(kleene Closure):

                  ∑*=∑0∪∑+(與正閉包區別哦,這算是新概念)

                  例如:{0,1}+ = {0,1,00,01,11,000,001,010,011,100,……}

                             {0,1}* = {ε,0,1,00,01,11,000,001,010,011,100,…}

  

咱們用這些規則將咱們的語言形式化:

 

         「我是中國人」:名詞:: = 中國人;代詞::= 我;動詞::= 是;

           編譯程序的文法把計算機語言形式化的定義:A->b ; 讀做:A 定義爲 b;或把他說成是一條關於 A的規則(產生式);

 更加規範的定義:

         文法 G 的定義:四元組 (Vn,Vt,P,S) 

          Vn:是非終結符集;

          Vt:終結符集;

         P:表示一種規則(a->b)ab 表示終結符和非終結符的集合,但 a 中至少包括一個非終結符。Vn,Vt,P 是非空有窮集合。

         S:表示開始符,他是一個非終結符,至少要有一條規則在左側。

  

那什麼是終結符和非終結符呢?規則又是怎樣?開始符?

          下面來看一個英文句子,以英文句子爲例,說說這個過程,幻燈片上的這個例子很適合初學者。

           分析句子:The grey wolf will eat  the  goat .

           

               句子的組成規則:

       

                   咱們如何用文法符號來描述這個概括的過程呢?這個英文句子怎麼形式化的表現出來呢?

                  這就是爲何咱們上述的文法 G 要用那四個符號來表示了:

      

                  由於前人發現重複的地方,想用有窮的地方表達無窮的東西,用這四個方式來表示剛好能將全部的句子概括。

 這是對一個句子的分析,固然若是有一個句子,咱們也能夠根據這種規則判斷是個句子是否符合英文的文法。

 

                 文法描述的語言是該文法一切句子的集合。

                   給出幾個詞,咱們能根據文法組成一個句子,能夠根據規則產生語言。

                   給出一個句子,咱們把句子的詞進行歸類,能夠判斷這個句子是否可被識別。

                   例如:the grey will eat the goat

                                 the grey wolf will eat wolf

                                 the grey goat will eat the wolf

                                 the grey goat will eat the grey

                      符合語法語義的句子僅是:

                            the grey wolf will eat goat

   

                 因此文法 G 的形式定義如上所述

                  Vt:終結符,咱們通常用除了大寫字母表示。

                  Vn:非終結符,咱們通常用大寫字母表示。

                   S:通常是開始符號。 

                  P:就表示一種規則啦。 

                  a->b 被稱爲產生式(定義式)

 

仙人(前人)給定義的一些說法:

            文法 G、、上述定義,cd 是 Vn 和 Vt 中任意字符,符號串 V 和 W V=caW=db (規則 a->b) 則 V能直接產生 W,則說 W 是 V 的直接推導。或說 W 直接規約到 V。

          1 若是 V->W0->W1->W2...->Wn=W  (n>0) 則稱 W 規約到 V 記做:V ---+- >W (箭頭上帶一個加號,寫的時候不方便。。)

          若  1 或 V=W 則記做 V ---*->W        (箭頭上帶一個星號)

 句子句型:

          設 G[S] 是以文法,若是符號 x 是從識別符號推到出來的,即有 S---*--->x , 則稱 x 是文法 G[S] 的句型。

          若 x 僅由終結符號組成,則稱 x 爲該文法 G[S] 的句子。

相關文章
相關標籤/搜索