- 對Pascal程序來說,一個上下文無關文法,可以定義為符號串 A := BC
- 程序設計語義分為兩類:靜態語義和動態語義
文法的直觀概念
推導或產生句子
例如,我是大學生
<句子> => <主語><謂語>
=> <代詞><謂語>
=> 我<謂語>
=> 我<動詞><直接賓語>
=> 我是<直接賓語>
=> 我是<名詞>
=> 我是大學生
- 符號 => 的含義是,使用一條規則,代替其左端的某個符號,產生其右端的符號串
符號和符號串
字母表
- 字母表的元素的非空有窮集合,字母表中的元素稱為符號
- 因此字母表也稱為符號集
- 不同語言可以有不同的字母表
符號串
- 由字母表中的符號組成的任何有窮序列稱為符號串
- 例如,001110 是字母表{0, 1}的符號串;a,b,c,aaca是A={a,b,c}上的符號串
- 允許空符號串,不包含任何符號的符號串,用ε表示,其長度為0,即|ε|=0
符號串的運算
- 符號串的頭尾,固有頭和固有尾
- 如果 z=xy 是一符號串,那么 x 是z的頭,y是z的尾,如果x是非空的,那么y是固有尾;如果y是非空的,那么x是固有頭
- 設z=abc,那么z的頭是ε,a,ab和abc;除abc外,其他都是固有頭;z的尾是ε,c,bc和abc;z的固有尾是ε,c和bc
- 省略寫法:z=x...,z=...x...
符號串的連接
- 設x和y是符號串,它們的連接xy是把y的符號寫在x的符號之后得到的符號串
- 例如,設x=ST,y=abu,則它們的連接xy=STabu,看出|x|=2,|y|=3,|xy|=5,由於ε的含義,顯然由 εx=xε=x
符號串的方冪
- 設x是符號串,把x自身連接n次得到符號串z,即z=xx...xx,稱為符號串x的方冪,寫作z=xn,即把符號串x相繼地重復寫n次
- x0=ε,x1=ε,x2=xx,x3=xxx分別對應於n=0,1,2,3
- 對於n>0,有xn=xxn-1=xn-1x
符號串集合
- 若集合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,...},也可表示為字母表的方冪形式,∑*稱為集合∑的閉包
- 而∑+=∑1∪∑2...∑n稱為∑的正閉包,顯然有 ∑*=∑0∪∑+,∑+=∑∑*=∑*∑
- ∑*具有可數的無窮數量的元素,若x是∑*中的元素,則表示為x∈∑*,否則x不屬於∑*,對於所有的∑,有ε∈∑*