編譯原理之文法一

來源:互聯網
上載者:User

   
介紹文法之前,先介紹形式形式語言的一些基礎知識。

形式語言基礎知識

  • 字母表:符號的非空有限集合稱為字母表
  • 符號串:由字母表中的符號組成的有限符號序列稱為該字母表的符號串
  • 符號長度:|a|,即a中出現的符號個數
  • 首碼:符號串a末尾刪除零個或多個符號後得到的符號串
  • 尾碼:符號串a開頭刪除零個或多個符號後得到的符號串
  • 子串:符號串a刪除首碼和尾碼之後的符號串
  • 子序列:符號串a刪除0或多個符號(可以不連續)得到的符號串。
  • 語言:某個確定的字母表上符號串的任何集合。
  • 終結符:不可再分的元素,一般用小寫字母代替
  • 非終結符:可以再次拆分的元素,一般用大寫字母代替

非形式化語言運算

  • 語言L和M的合并,LUM={s|s∈L或 s∈M}
  • 語言L和M的串連,LM={st|s∈L,t∈M}
  • 語言L的Kleene閉包,L*=
  • 語言L的正閉包,L+=   

    第3條表示0個到無窮多個L元素的集合,第4條表示1個到無窮多個L元素的集合,例如
    L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1UM1)={a,b,… y,z,1,2…8,9 }
   (L1UM1)*={a,b,… y,z,1,2…8,9 ,aa,1a,…xyz,6789st..}
    L1(L1UM1)*={所有字母打頭的字母和數字記號串}

    

    好了,文法的前續工作已經準備完畢,然後咱們再說說文法的用途,文法是一種形式化語言,知其作用:文法是通過產生方式描述語言的:語言中的每個句子可以用嚴格定義的規則來構造。

    我的理解是,每種語言都有自己的規則,比如說漢語,最常見的規則是:主語+謂語+賓語,每種程式設計語言也都有其自己的文法規則,文法就是對原始碼中的單詞串進行約束的一種規則。
文法
    文法是一個四元組:G={VT,VN,S,P}
    VT:非空有限符號集合,它的每個元素為終結符號,如abc
    VN:非空有限符號集合,它的每個元素為非終結符號,如ABED
    S:屬於非終結符集合,是文法G的開始符號
    P:是一個非空有限集合,它的元素為稱為產生式
文法約束
    VN和VT不含公用的元素,即VN ∩ VT = φ(大寫和小寫不會有交集)
    用V表示VN ∪ VT ,稱為文法G的字母表。
    規則,也稱產生式或產生式,是形如α→β,α稱為規則的左部,β稱作規則的右部,開始符S必須出現在某一個產生式的左部一次。
    下篇部落格詳細介紹四種文法類型:編譯原理之文法二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.