第3章上形式语言简介
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P→α1 P→α2 P→αn
为书写方便,可将这些有相同左部的产生式 合并为一个,即缩写成
P→α1∣α2∣…∣αn 其中,每个αi(i=1,2,…,n)称为P的一个候选式, 直竖“∣”读为“或”,它与“→”一样是用来 描述文法的元语言符号(即不属于Σ的字符)
例3.1试构造产生标识符的文法。
[解答]首先,标识符是以字母开头的字母数字串,我 们用L表示“字母”类非终结符,用D表示“数字” 类非终结符,而用T表示“字母或数字”类非终结 符,则有:
M B DD …
DA
中间位
最
最
高
低
位
位
图3–1奇数划分示意
由于中间部分可出现任意位,所以另引入了一 个非终结符M,它包括最高位和中间位部分。假定 开始符为N,则可得到文法G[N]为:
G=({0,1,…,9},{N,A,M,B,D},N,ξ) ξ:N→A∣MA /*一位数字│多位数字*/
M→B∣MD /*仅两位数字(无中间位)│多于两位 数字*/ A→1∣3∣5∣7∣9 B→1∣2∣3∣4∣5∣6∣7∣8∣9 D→0∣B
2.文法
文法通常表示成四元组G=(VT,VN,S,ξ), 其中:
(1)VT为终结符号集,这是一个非空有限集, 它的每个元素称为终结符号;
(2)VN 为 非 终 结 符 集 , 它 也 是 一 个 非 空 有 限 集,其每个元素称为非终结符号,且有 VT∩VN=Φ;
(3)S为一文法开始符,是一个特殊的非终结 符号,即S∈VN;
1型文法的另一种定义方法是文法G的每一个产 生式具有下列形式:
αAδ→αβδ
其显中然,|αα、Aδδ|∈≤∣Vα*,βδA| ∈,V但N,它β更∈明V确+(地表β 达是了非上空下串文)有; 关的特性,即A必须在α、δ的上下文环境中才能被β 所替换。
3.2型文法与2型语言(对应下推自动机,程序设计语 言)
(1)如果α1可直接推出α2,α2可直接推出α3,…,αn-1可
直 接 推 出 αn , 即 存 在 一 个 自 α1 至 αn 的 推 导 序 列 : α1
α2
α3
…
αn(n>0),则我们称α1可推导出
αn,记为α1 αn,它表示从α1出发经过一步或若干步
可推导出αn。
(2)如果记α1 α1,则α1 αn表示从α1出发,经过0步 或若干步可推导出αn;也即α1 αn意味 着或者α1=αn, 或者α1 αn。
1.0型文法与0型语言(对应图灵机)
如果文法G的每一个产生式具有下列形式:
α→β
其中,α∈V*VNV*(注:V=VN∪VT),即至少含有一个 非终结符;β∈V*;则称文法G为0型文法或短语文 法,记为PSG。0型文法相应的语言称为0型语言或 称递归可枚举集,它的识别系统是图灵(Turing)机, 0型语言是不可判定的。
例如,对下面的文法G[E]:
E→E+E∣E*E∣(E)│i
(3.1)
其中,惟一的非终结符E可以看成是代表一类算术 表达式。我们可以从E出发进行一系列的推导, 如表达式i+i*i的推导如下:
E E+E
E+E*E
E+E*i
E+i*i
i+i*i
假定G[S]是一个文法,S是它的开始符号,如 果S α,α∈(VT∪VN)*,则称α是文法G[S]的一个 句型;如果α∈VT*,则称α是文法G[S]的一个句子。 仅含终结符的句型是一个句子。
由定义可知,开始符S本身只能是文法的一个 句型而不可能是一个句子;此外,上面推导出的 i+i*i是文法G[E]的一个句子(当然也是一个句型), 而E+E、E+E*E、E+E*i和E+i*i都是文法G[E]的句 型。
对于文法G[S],它所产生的句子的全体称为由 文法G[S]产生的语言,记为L[G],即有
文法开始符号是一个特殊的非终结符,它代表 文法所定义的语言中我们最终感兴趣的语法实体, 即语言的目标,而其它语法实体只是构造语言目标 的中间变量;如表达式文法的语言目标是表达式, 而程序语言的目标通常为程序。
产生式(也称产生规则或规则)是定义语法实体 的一种书写规则。一个语法实体的相关规则可能不 止一个。例如,有:
B={bn|n ≥1}
其中B是我们会构造的,于是可以写出:
① A → aBa
②B→b
⑶
③ B →Bb
在这里A是所要构造的,B是辅助集合。这样A →aBa
可理解为A可生成aBa。若用“
”表示“推
出”,则我们有
A
aBa
aBa
aBba
aBba
aBbba
aBbba
abbba
于是得出:A推出符号串abbba,即abbba ∈ A。
每一个形式语言都是某字母表上符号串的一个 集合,反之字母表上符号串的一个集合可定义为一 个形式语言。例如,C语言是其基本符号字母表上 符号串的集合,而每个C语言程序是基本符号的符 号串。再如,假定∑={a,b,c},则
L1={a,b,c} L2={a,aa,ab} L3={c,cc} 均可表示字母表∑={a,b,c}上的一个形式语言。
(4)ξ是产生式的非空有限集,其中每个产生 式(或称规则)是一序偶(α,β),通常写作
α→β或α::=β
读作“α是β”或“α定义为β”。在此,α为 产生式的左部,而β为产生式的右部,α、β是 由终结符和非终结符组成的符号串, α∈(VT∪VN)+ 且 至 少 有 一 个 非 终 结 符 , 而 β∈(VT∪VN)*。
文法G的每一个产生式具有下列形式:
A→α
其中,A∈VN,α∈V*,则称文法G为2型文法或上下 文无关文法,记为CFG。2型文法相应的语言称为2 型语言或上下文无关语言,它的识别系统是下推自 动机。2型文法是可判定的,而且有有效的判定方 法。
大部分程序设计语言的文法近似于2型文法, 因此2型文法是我们的主要研究对象。
例3.3试判断下列产生式集所对应的文法和产生的语言:
(1)①S→ACaB (2)①S→aSBC (3)①S→Ac (4) ①S→aS
②Ca→aaC ②S→aBC ②S→Sc
②S→aA
③CB→DB ③CB→DB ③A→ab
换句话说, α和β都是符号串,对它们没有任 何限制。这种文法,对计算机语言来说,太一般化 了。
2.1型文法与1型语言(对应线性界限自动机,自然语言)
文法G的每一个产生式α→β,均在0型文法的基 础 上 增 加 了 字 符 长 度 上 满 足 ∣ α∣≤∣β∣ 的 限 制 , 则称文法G为1型文法或上下文有关文法,记为CSG。 1型文法相应的语言称为1型语言或上下文有关语言, 它的识别系统是线性界限自动机。 1型语言是可以 判定的,但是现在还没有找到有效的方法。
终结符号是指语言不可再分的基本符号,通常 是一个语言的字母表;终结符代表了语法的最小元 素,是一种个体记号。非终结符号也称语法变量, 它代表语法实体或语法范畴;非终结符代表一个一 定的语法概念,因此,一个非终结符是一个类、一 个集合。例如,在程序语言中,可以把变量、常数、 “+”、“*”等看作是终结符,而像“算术表达式” 这个非终结符则代表着一定算术式组成的类,如 i*(i+i)、i+i+i等;也即每个非终结符代表着由一些终 结符和非终结符且满足一定规则的符号串组成的集 合。
第3章上 形式语言简介
3.1 文法和语言 3.2 推导与语法树
3.1 文法和语言
文法是程序语言的生成系统,而自动机则 是程序语言的识别系统;用文法可以精确地定 义一个语言,并依据该文法构造出识别这个语 言的自动机。因此,文法对程序语言和编译程 序的构造具有重要意义,如程序语言的词法可 用正规文法描述,语法可用上下文无关文法描 述,而语义则要借助于上下文有关文法描述。
因此,产生标识符的文法G[I]为:
G=({a,b,…,z,0,…,9},{I,S,T,L,D},I,ξ) ξ:I→L∣LS S→T∣ST T→L∣D L→a∣b∣…∣z D→0∣1∣…∣9
例3.2写一文法,使其语言是奇数集合,但不允许出 现以0打头的奇数。
[解答]根据题意,我们可以将奇数划分为如图3–1所 示的三个部分,即最高位允许出现1~9,用非终 结符B表示;中间部分可以出现任意多位数字0~ 9,每一位用非终结符D示。
3.1.1 文法和语言的概念
1.语言
通常我们用Σ表示字母表,字母表中的每个元 素称为字符或符号。不同语言的字母表可能是不同 的,程序语言的字母表通常是ASCII字符集。由字母 表Σ中的字符所组成的有穷系列称为Σ上的字符串或 字,字母表Σ上的所有字符串(包括空串)组成的集合 用Σ*表示。那么,对字母表Σ来说,Σ*上的任意一个 子集都称为Σ上的一个语言,记为L(LΣ*),该语言的 每一个字符串称为语言L的一个语句或句子。
显然,由A生成的符号串都属于∑+,另一方面,
可用归纳法证明∑+ A,因此有A= ∑+。
考虑∑={a}上的符号串集合:A={a2n|n≥1}
显然aa ∈A;如果yaa ∈A,因此,A可按下法构造:
A →aa
A →Aaa
⑵
考虑∑={a,b}上的符号串集合:A={abna|n ≥1}
显然A可表示为
A=aBa
3.文法产生的语言
设 文 法 G=(VT,VN,S,ξ) 且 α 、 β∈(VT∪VN)* , 如 果存在产生式A→δ(δ∈(VT∪VN)*),则称αAβ可直 接推出αδβ,即
αAβ αδβ
其中“ ”表示直接推导出,是应用产生规 则进行推导的记号。注意“ ”与“→”不同, “→”是产生式中的定义记号。直接推导是对文法 符号串αAβ中的非终结符A用相应的产生式A→δ的 右部δ来替换,从而得到αδβ。我们给出推导的说明 如下:
4.3型文法与3型语言(对应有限自动机)
文法G的每个产生式具有下列形式:
A→a或A→aB
其正中规,文A、法B或∈右V线N,性a文∈法VT,*,记则为文R法G。G称3型为文3型法文相法应、的 语言为3型语言或正规语言,它的识别系统是有限 自动机。
程序设计语言的单词通常都可写成3型文法的 形式,因此3型文法(或自动机)与词法分析有密 切关系。
L→a∣b∣…∣z D→0∣1∣…∣9 T→L∣D
其次,如果用S表示“字母数字串”类,则T是一字母 或数字,ST也是字母数字串,即有
S→T∣ST
其中,产生式S→T∣ST是一种左递归形式,由它可 以产生一串T。
最后,作为“标识符”的非终结符I,它或者是一 单个字母,或者为一字母后跟字母数字串,即
I→L∣LS
3型文法还可以呈左线性形式:
A→a或A→Ba
5.四类文法的关系与区别
由四类文法的定义可知,从0型文法到3型文法 逐渐增加限制。1~3型文法都属于0型文法,2、3 型文法均属于1型文法,3型文法属于2型文法。四 类文法的区别如下:
(1)1型文法中不允许有形如“A→ε”的产生式存在, 而2、3型文法则允许形如“A→ε”的产生式存在;
(2)0、1型文法的产生式左部存在含有终结符号的符 号串或两个以上的非终结符,而2型和3型文法的产 生式左部只允许是单个的非终结符号。
给定一个文法,如何判断其属于何种文法? 通常我们判断是按照3型文法、2型文法、1型文法、 0型文法从高到低的顺序来判断。
例如:一旦判断给定文法属于3型文法之后, 就没有必要再判断是否属于2型文法了,因为它必 定属于2型文法。我们应该以最高规则来判定一个 文法属于的文法类型,其他情况依次类推。只有 当我们不属于3型文法时,我们才向下判断,它是 否属于2型文法,若不属于2型文法,则依次类推 向下判断。最终的结果如果不属于3型文法、 2型 文法以及1型文法,那就只有属于0型文法了。
当一语言是有穷集合时,可用上述枚举方法来 表示语言。但如果语言是无穷集合,那就无法用这 种枚举方法。我们要设计出表示无穷集合的强有力 的工具。文法就是这样一种工具。
设∑={a,b},则根据定义∑+表示a和b的所有可 能的符号串的集合。下面用A表示∑+则A可表示成:
A →a
A →b
⑴
A →Aa
A →Ab 其中,符号“→”读作“生成”。
L(G)={α∣Sα且α∈VT*}
3.1.2形式语言分类
语言学家Noam Chomsky于1956年首先建立了 形式语言的描述,定义了四类文法及相应的形式语 言,并分别与相应的识别系统相联系,它对程序语 言的设计、编译方法、计算复杂性等方面都产生了 重大影响。
在四类文法中,我们主要用到2型和3型文法。
为书写方便,可将这些有相同左部的产生式 合并为一个,即缩写成
P→α1∣α2∣…∣αn 其中,每个αi(i=1,2,…,n)称为P的一个候选式, 直竖“∣”读为“或”,它与“→”一样是用来 描述文法的元语言符号(即不属于Σ的字符)
例3.1试构造产生标识符的文法。
[解答]首先,标识符是以字母开头的字母数字串,我 们用L表示“字母”类非终结符,用D表示“数字” 类非终结符,而用T表示“字母或数字”类非终结 符,则有:
M B DD …
DA
中间位
最
最
高
低
位
位
图3–1奇数划分示意
由于中间部分可出现任意位,所以另引入了一 个非终结符M,它包括最高位和中间位部分。假定 开始符为N,则可得到文法G[N]为:
G=({0,1,…,9},{N,A,M,B,D},N,ξ) ξ:N→A∣MA /*一位数字│多位数字*/
M→B∣MD /*仅两位数字(无中间位)│多于两位 数字*/ A→1∣3∣5∣7∣9 B→1∣2∣3∣4∣5∣6∣7∣8∣9 D→0∣B
2.文法
文法通常表示成四元组G=(VT,VN,S,ξ), 其中:
(1)VT为终结符号集,这是一个非空有限集, 它的每个元素称为终结符号;
(2)VN 为 非 终 结 符 集 , 它 也 是 一 个 非 空 有 限 集,其每个元素称为非终结符号,且有 VT∩VN=Φ;
(3)S为一文法开始符,是一个特殊的非终结 符号,即S∈VN;
1型文法的另一种定义方法是文法G的每一个产 生式具有下列形式:
αAδ→αβδ
其显中然,|αα、Aδδ|∈≤∣Vα*,βδA| ∈,V但N,它β更∈明V确+(地表β 达是了非上空下串文)有; 关的特性,即A必须在α、δ的上下文环境中才能被β 所替换。
3.2型文法与2型语言(对应下推自动机,程序设计语 言)
(1)如果α1可直接推出α2,α2可直接推出α3,…,αn-1可
直 接 推 出 αn , 即 存 在 一 个 自 α1 至 αn 的 推 导 序 列 : α1
α2
α3
…
αn(n>0),则我们称α1可推导出
αn,记为α1 αn,它表示从α1出发经过一步或若干步
可推导出αn。
(2)如果记α1 α1,则α1 αn表示从α1出发,经过0步 或若干步可推导出αn;也即α1 αn意味 着或者α1=αn, 或者α1 αn。
1.0型文法与0型语言(对应图灵机)
如果文法G的每一个产生式具有下列形式:
α→β
其中,α∈V*VNV*(注:V=VN∪VT),即至少含有一个 非终结符;β∈V*;则称文法G为0型文法或短语文 法,记为PSG。0型文法相应的语言称为0型语言或 称递归可枚举集,它的识别系统是图灵(Turing)机, 0型语言是不可判定的。
例如,对下面的文法G[E]:
E→E+E∣E*E∣(E)│i
(3.1)
其中,惟一的非终结符E可以看成是代表一类算术 表达式。我们可以从E出发进行一系列的推导, 如表达式i+i*i的推导如下:
E E+E
E+E*E
E+E*i
E+i*i
i+i*i
假定G[S]是一个文法,S是它的开始符号,如 果S α,α∈(VT∪VN)*,则称α是文法G[S]的一个 句型;如果α∈VT*,则称α是文法G[S]的一个句子。 仅含终结符的句型是一个句子。
由定义可知,开始符S本身只能是文法的一个 句型而不可能是一个句子;此外,上面推导出的 i+i*i是文法G[E]的一个句子(当然也是一个句型), 而E+E、E+E*E、E+E*i和E+i*i都是文法G[E]的句 型。
对于文法G[S],它所产生的句子的全体称为由 文法G[S]产生的语言,记为L[G],即有
文法开始符号是一个特殊的非终结符,它代表 文法所定义的语言中我们最终感兴趣的语法实体, 即语言的目标,而其它语法实体只是构造语言目标 的中间变量;如表达式文法的语言目标是表达式, 而程序语言的目标通常为程序。
产生式(也称产生规则或规则)是定义语法实体 的一种书写规则。一个语法实体的相关规则可能不 止一个。例如,有:
B={bn|n ≥1}
其中B是我们会构造的,于是可以写出:
① A → aBa
②B→b
⑶
③ B →Bb
在这里A是所要构造的,B是辅助集合。这样A →aBa
可理解为A可生成aBa。若用“
”表示“推
出”,则我们有
A
aBa
aBa
aBba
aBba
aBbba
aBbba
abbba
于是得出:A推出符号串abbba,即abbba ∈ A。
每一个形式语言都是某字母表上符号串的一个 集合,反之字母表上符号串的一个集合可定义为一 个形式语言。例如,C语言是其基本符号字母表上 符号串的集合,而每个C语言程序是基本符号的符 号串。再如,假定∑={a,b,c},则
L1={a,b,c} L2={a,aa,ab} L3={c,cc} 均可表示字母表∑={a,b,c}上的一个形式语言。
(4)ξ是产生式的非空有限集,其中每个产生 式(或称规则)是一序偶(α,β),通常写作
α→β或α::=β
读作“α是β”或“α定义为β”。在此,α为 产生式的左部,而β为产生式的右部,α、β是 由终结符和非终结符组成的符号串, α∈(VT∪VN)+ 且 至 少 有 一 个 非 终 结 符 , 而 β∈(VT∪VN)*。
文法G的每一个产生式具有下列形式:
A→α
其中,A∈VN,α∈V*,则称文法G为2型文法或上下 文无关文法,记为CFG。2型文法相应的语言称为2 型语言或上下文无关语言,它的识别系统是下推自 动机。2型文法是可判定的,而且有有效的判定方 法。
大部分程序设计语言的文法近似于2型文法, 因此2型文法是我们的主要研究对象。
例3.3试判断下列产生式集所对应的文法和产生的语言:
(1)①S→ACaB (2)①S→aSBC (3)①S→Ac (4) ①S→aS
②Ca→aaC ②S→aBC ②S→Sc
②S→aA
③CB→DB ③CB→DB ③A→ab
换句话说, α和β都是符号串,对它们没有任 何限制。这种文法,对计算机语言来说,太一般化 了。
2.1型文法与1型语言(对应线性界限自动机,自然语言)
文法G的每一个产生式α→β,均在0型文法的基 础 上 增 加 了 字 符 长 度 上 满 足 ∣ α∣≤∣β∣ 的 限 制 , 则称文法G为1型文法或上下文有关文法,记为CSG。 1型文法相应的语言称为1型语言或上下文有关语言, 它的识别系统是线性界限自动机。 1型语言是可以 判定的,但是现在还没有找到有效的方法。
终结符号是指语言不可再分的基本符号,通常 是一个语言的字母表;终结符代表了语法的最小元 素,是一种个体记号。非终结符号也称语法变量, 它代表语法实体或语法范畴;非终结符代表一个一 定的语法概念,因此,一个非终结符是一个类、一 个集合。例如,在程序语言中,可以把变量、常数、 “+”、“*”等看作是终结符,而像“算术表达式” 这个非终结符则代表着一定算术式组成的类,如 i*(i+i)、i+i+i等;也即每个非终结符代表着由一些终 结符和非终结符且满足一定规则的符号串组成的集 合。
第3章上 形式语言简介
3.1 文法和语言 3.2 推导与语法树
3.1 文法和语言
文法是程序语言的生成系统,而自动机则 是程序语言的识别系统;用文法可以精确地定 义一个语言,并依据该文法构造出识别这个语 言的自动机。因此,文法对程序语言和编译程 序的构造具有重要意义,如程序语言的词法可 用正规文法描述,语法可用上下文无关文法描 述,而语义则要借助于上下文有关文法描述。
因此,产生标识符的文法G[I]为:
G=({a,b,…,z,0,…,9},{I,S,T,L,D},I,ξ) ξ:I→L∣LS S→T∣ST T→L∣D L→a∣b∣…∣z D→0∣1∣…∣9
例3.2写一文法,使其语言是奇数集合,但不允许出 现以0打头的奇数。
[解答]根据题意,我们可以将奇数划分为如图3–1所 示的三个部分,即最高位允许出现1~9,用非终 结符B表示;中间部分可以出现任意多位数字0~ 9,每一位用非终结符D示。
3.1.1 文法和语言的概念
1.语言
通常我们用Σ表示字母表,字母表中的每个元 素称为字符或符号。不同语言的字母表可能是不同 的,程序语言的字母表通常是ASCII字符集。由字母 表Σ中的字符所组成的有穷系列称为Σ上的字符串或 字,字母表Σ上的所有字符串(包括空串)组成的集合 用Σ*表示。那么,对字母表Σ来说,Σ*上的任意一个 子集都称为Σ上的一个语言,记为L(LΣ*),该语言的 每一个字符串称为语言L的一个语句或句子。
显然,由A生成的符号串都属于∑+,另一方面,
可用归纳法证明∑+ A,因此有A= ∑+。
考虑∑={a}上的符号串集合:A={a2n|n≥1}
显然aa ∈A;如果yaa ∈A,因此,A可按下法构造:
A →aa
A →Aaa
⑵
考虑∑={a,b}上的符号串集合:A={abna|n ≥1}
显然A可表示为
A=aBa
3.文法产生的语言
设 文 法 G=(VT,VN,S,ξ) 且 α 、 β∈(VT∪VN)* , 如 果存在产生式A→δ(δ∈(VT∪VN)*),则称αAβ可直 接推出αδβ,即
αAβ αδβ
其中“ ”表示直接推导出,是应用产生规 则进行推导的记号。注意“ ”与“→”不同, “→”是产生式中的定义记号。直接推导是对文法 符号串αAβ中的非终结符A用相应的产生式A→δ的 右部δ来替换,从而得到αδβ。我们给出推导的说明 如下:
4.3型文法与3型语言(对应有限自动机)
文法G的每个产生式具有下列形式:
A→a或A→aB
其正中规,文A、法B或∈右V线N,性a文∈法VT,*,记则为文R法G。G称3型为文3型法文相法应、的 语言为3型语言或正规语言,它的识别系统是有限 自动机。
程序设计语言的单词通常都可写成3型文法的 形式,因此3型文法(或自动机)与词法分析有密 切关系。
L→a∣b∣…∣z D→0∣1∣…∣9 T→L∣D
其次,如果用S表示“字母数字串”类,则T是一字母 或数字,ST也是字母数字串,即有
S→T∣ST
其中,产生式S→T∣ST是一种左递归形式,由它可 以产生一串T。
最后,作为“标识符”的非终结符I,它或者是一 单个字母,或者为一字母后跟字母数字串,即
I→L∣LS
3型文法还可以呈左线性形式:
A→a或A→Ba
5.四类文法的关系与区别
由四类文法的定义可知,从0型文法到3型文法 逐渐增加限制。1~3型文法都属于0型文法,2、3 型文法均属于1型文法,3型文法属于2型文法。四 类文法的区别如下:
(1)1型文法中不允许有形如“A→ε”的产生式存在, 而2、3型文法则允许形如“A→ε”的产生式存在;
(2)0、1型文法的产生式左部存在含有终结符号的符 号串或两个以上的非终结符,而2型和3型文法的产 生式左部只允许是单个的非终结符号。
给定一个文法,如何判断其属于何种文法? 通常我们判断是按照3型文法、2型文法、1型文法、 0型文法从高到低的顺序来判断。
例如:一旦判断给定文法属于3型文法之后, 就没有必要再判断是否属于2型文法了,因为它必 定属于2型文法。我们应该以最高规则来判定一个 文法属于的文法类型,其他情况依次类推。只有 当我们不属于3型文法时,我们才向下判断,它是 否属于2型文法,若不属于2型文法,则依次类推 向下判断。最终的结果如果不属于3型文法、 2型 文法以及1型文法,那就只有属于0型文法了。
当一语言是有穷集合时,可用上述枚举方法来 表示语言。但如果语言是无穷集合,那就无法用这 种枚举方法。我们要设计出表示无穷集合的强有力 的工具。文法就是这样一种工具。
设∑={a,b},则根据定义∑+表示a和b的所有可 能的符号串的集合。下面用A表示∑+则A可表示成:
A →a
A →b
⑴
A →Aa
A →Ab 其中,符号“→”读作“生成”。
L(G)={α∣Sα且α∈VT*}
3.1.2形式语言分类
语言学家Noam Chomsky于1956年首先建立了 形式语言的描述,定义了四类文法及相应的形式语 言,并分别与相应的识别系统相联系,它对程序语 言的设计、编译方法、计算复杂性等方面都产生了 重大影响。
在四类文法中,我们主要用到2型和3型文法。