一、文法直觀概念
我們常常把程序設計語言定義為兩類:靜態語義和動態語義。靜態語義是一系列限定規則,並確定哪些合乎語法的程序是合適的;動態語義也稱作運行語義或執行語義,表明程序要做什么,要計算什么。
在給出文法和語言的形式定義之前,我們先直觀地認識一下文法的概念。
當我們表述一種語言時,無非是說明這種語言的句子,如果語言只含有有窮多個句子,則只需列出句子的有窮集就行,但對於含有無窮句子的語言來講,存在着如何給出它的有窮表示的問題。事實上,使用文法作為工具,不僅是為了嚴格地定義句子的結構,也是為了用適當條數的規則把語言的全部句子描述出來,可以說文法是以有窮的集合刻畫出無窮的集合的一個工具。
二、符號與符號串
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的自身連接記為xn 其中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υΣ+
Σ+=ΣΣ*=Σ*Σ