編譯原理基礎知識---文法和語言(一)


一、文法直觀概念

  我們常常把程序設計語言定義為兩類:靜態語義和動態語義。靜態語義是一系列限定規則,並確定哪些合乎語法的程序是合適的;動態語義也稱作運行語義或執行語義,表明程序要做什么,要計算什么。

  在給出文法和語言的形式定義之前,我們先直觀地認識一下文法的概念。

  當我們表述一種語言時,無非是說明這種語言的句子,如果語言只含有有窮多個句子,則只需列出句子的有窮集就行,但對於含有無窮句子的語言來講,存在着如何給出它的有窮表示的問題。事實上,使用文法作為工具,不僅是為了嚴格地定義句子的結構,也是為了用適當條數的規則把語言的全部句子描述出來,可以說文法是以有窮的集合刻畫出無窮的集合的一個工具。

二、符號與符號串

1.簡單概念

  字母表:字母表是元素的非空有窮集合,我們把字母表中的元素稱為符號,因此,字母表也稱為符號集。

  符號串:由字母表中的符號組成的任何有窮序列稱為符號串,例如,00,11,10是字母表∑={0,1}上的符號串。

  如果某符號串x中有m個符號,則稱其長度為m,表示為|x| = m,

  允許空符號串,即不包含任何符號的符號串,用ε表示,其長度為0,即|ε|=0

2.關於符號串的一些運算

  (1)連接運算

  x與y連接,記為xy

  注意:①x與y的連接和y與x的連接不相等

     ②(xy)z=x(yz)

     ③xε=x=εx

  (2)求長度

      |xy| = 2

       |ε| = 0

     |abc| = 3

  (3)方冪

    x的自身連接記為x其中n=0時,xn

    n>0時,xn=xn-1*x=x*xn-1

  (4)f符號串集合

    若集合A中的一系列元素都是某字母表上的符號串,則稱A為該字符表上的符號串集合。兩個符號串集合A和B的乘積定義如下:AB={xy|x€A且y€B},即AB是滿足x屬於A,y屬於B的所有符號串xy所組成的集合。例如,若A={a,b},B={c,d},則集合AB={ac,ad,bc,bd}。因為對任意符號串x有εx = xε =x,所以有{ε}A=A{ε}=A.

  指定字母表Σ之后,可用Σ*表示Σ上的所有有窮長的串的集合。例,Σ={0,1},則Σ*= {ε,0,1,00,01,10,11,000,001,010....},也可表示為字母表的方冪形式:

  Σ*= Σ0υΣ1υ...Σn...,Σ*稱為Σ的閉包。而Σ+1υΣ2....υΣn稱為Σ的正閉包。

  Σ*= Σ0υΣ+

  Σ+=ΣΣ*=Σ*Σ


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM