形式语言02章文法语言语言
如果使用%代表模运算(即取余数运 算)、使用^代表指数运算,则有
E→E+T|E-T|T T→T*F|T/F|T%F|A A→F^A|F F→(结合性:^是右结 合的。
例2-4 标识符(以字母开头的字母、 数字的串)的产生(仅考虑小写字母)。
I→L I→IL I→ID L→a |b|c|…|z D→0|1|2|…|9
右线性文法自然地对应于句子的 推导过程。
左线性文法
对于文法G,若每个产生式都是:: A→Cb或者A→a;其中A,C∈V,
a∈XU{ε} , b∈X ; 则 文 法 G 是 左 线性文法。如果一个语言L可以由 左线性文法产生,则该语言是左 线形语言。
其中:“=>”表示单步推导过程。
虽然产生式的个数是有限的, 但是规则是递归的,因而,所 有的小括号匹配的串(有无限 个)均可以由它们产生,它们 组成的集合就称为一个语言。
S称为非终结符,在推导过程中,可 以被代替的符号。
(和)称为终结符,在推导过程中,不 可以被代替的符号。
→ 是产生式系统的元符号,不属于 非终结符,也不属于非终结符。
例2-2:由偶数个0组成的串的语言。 自然语言的描述方式: ①00是合法的该语言的基本的串; ②若S是合法的串,则SS是合法的串;
形式化的描述方式:
① S→00 ② S→SS
问题:
将产生式S→SS换成 S→0S0或者S→00S,
是否还产生相同的语言?
同一个语言,可以使用不同的产 生式组合来产生。
第二章 文法与语言
一个语言的定义可以从两个方面进行: 从语言产生的角度;(形式语言) 从接收(识别)语言的角度。(自动机)
设是一个字母表,L *, L称为 字母表上的一个语言(language), x L, x叫做L的一个句子。
2.1 例子语言
例1:括号匹配的语言(该语言是指 所有的左、右括号相匹配的串的集 合)。
其中:S代表简单变量的说明语句(可 以由一个或多个的单个说明语句构 成),P代表单个的说明语句,T代表 类型,V代表变量名表(由‘,’隔开 的多个变量),I代表单个变量。
思考:
PASCAL语言的简单变量的说明语 句的形成。
2.2 文法和语言的关系
介绍语言的定义。 介绍文法的定义。 介绍文法与语言的关系。
2.3Chomsky对文法的分类
本节介绍Chomsky对文法和语言进行的分类。 语言是由文法产生的,对语言的分类,是根
据产生语言的文法的分类而进行的。
短语结构文法
对于一般的短语结构文法PSG,G=(∑,V, S , P) , 产 生 式 的 形 式 是 v→w , 其 中 : v∈(∑∪V)+ , 且 至 少 包 含 一 个 非 终 结 符 ; w∈(∑∪V)*。
V是一个有限字符的集合,叫做非终 结符集合,它的元素称为变量或者非 终结符;
S∈V,称为文法的开始符号;
P是有序偶对(α,β)的集合,其中α是集
合(∑UV)上的字符串,但至少包含一个 非终结符;β是集合(∑UV)*的元素。一
般,将有序偶对(α,β)记为α→β,称为 产生式;
如果有α→ε,称之为空串产生 式或者ε产生式。
当然,还有其它方式的推 导过程(例如混合),而 最左推导和最右推导是比 较常用的推导方式。
对于文法G,如果S=>*ω,则 称ω是文法的一个句型,若ω 中包含的字符全是终结符,称 ω是句子。
语言的定义
给定文法G,有开始符号S,则把S 可以推导出的所有的终结符串的集 合(即所有句子的集合),称为由 文法产生的语言,记为L(G),即
产生串的过程为:从S开始,反 复利用产生式的右边代替产生 式的左边(称之为推导过程), 最后,可以得到匹配的()组 成的串。
例:串(( ))(( )( ))的产生过程
S=>SS=>(S)S=>(( ))S =>(( ))(S)=>(( ))(SS) =>(( ))(( )S) => (( ))(( )( ))
符号“( ”和“ )”是字母表的元素。
Chomsky采用的符号化(形式化)的 描述方式,运用如下的规则(这些规 则被称为产生式):
① S→( )
② S→(S)
③ S→SS
→”读作“定义为”或者“是” ,它 的左边和右边分别称为该产生式的左 边和右边;
根据这些规则,也可以生 成任意合法的串;可以判 断一个串是否为合法的串。
其中 :
A→+,A→-,A→*,A→/ 四个产生 式的左边是相同的符号,可以合并 为
A→+|-|*|/ +、-、*、/ 称为A的侯选式。
注意:
这组产生式没有表示出运 算符的优先级。
表示出运算符的优先级的产生 式:
E→E+T|E-T|T T→T*F|T/F|F F→(E)|i
其中:E代表表达式,T代表项,F代 表因子,(E)代表的是带小括号的表 达式。该组产生式表示出先算因子, 再*、/,最后+、-。
对于一类语言,可以在字母表上,按 照一定的构成规则,根据语言的结构 特点,定义一个文法。使用文法作为 相应语言的有穷描述,不仅可以描述 出语言的结构特征,而且可以产生这 个语言的所有句子。
短语结构文法(文法)的定义
文法G是一个四元式(由四个部分组成), 即G=(∑,V,S,P);
∑是一个有限字符的集合(字母表), 它的元素称为字母或者终结符;
考虑:
由奇数个1组成串的语言的产生。
例2-3:包含有+、-、*、/、 ()的算术表达式的语言。
自然语言的描述方式
①单个变量是合法的最基本的串; ②若S是一个合法的串,则SAS是一
个合法的串( 其中A代表运算符+、 -、*、/) ③若S是一个合法的串,则(S)是合法 的串;
形式语言的描述方式
① S→ i (i代表单个变量) ② S→SAS ③ S→( S ) ④ A→+ ⑤ A→⑥ A→* ⑦ A→/
如果一个语言L可以由短语结构文法产生, 则该语言是短语结构语言PSL。
定义2-4:右线性文法的定义
对于文法G=(∑ ,V,S,P),若它的 每个产生式都是下列形式之一:
A→bC或者A→a; 其中:A,C∈V,a∈XU{ε},b∈∑
则文法G是右线性文法(RLG,也称为 正则文法RG)。
如果一个语言L可以由右线性文法 产生,则该语言是右线性语言 (RLL或RL)。
问题:如何产生该语言?即如何生 成该集合中的所有的串?
自然语言的描述方式,采用如下的 递归规则:
①( )是合法的该语言的最基本的串; ②若S是一个合法的串,则(S)是合法串; ③若S是一个合法的串,则SS是合法串;
这些规则称为形成规则,根据这些规 则,可以
(1)产生任意合法(即符合规则)的该 集合中的串;
L(G)={ω|S=>*ω,且ω∈∑*}。
例如:产生括号匹配的语言的文法是: G=({(,)},{S},S,{ S→( ), S→(S), S→SS }) 一般,对于文法G,可以只给出它的产生式的
集合即可。上述文法可以简写为:
S→( ) S→(S) S→SS
对于文法和语言,可以从一个文 法得到该文法产生的语言;也可 以根据语言,写出产生该语言的 某个文法;还可以判断一个语言 是否由某一个文法产生。
如果有A→B,称之为单产生式。
一个产生式的左边可能不只一 个符号;第一个产生式的左边 只能有一个符号,就是开始符 号S。
文法的作用就是产 生一个语言。
约定:如果没有特别说明
第一个产生式左边的符号,就是 开始符号,可以不为S;
大写的英文字母代表非终结符;
推导(派生)的定义2-2
给定文法G,α和β是集合(∑UV)上的 串 , 若 α , β 分 别 可 以 写 成 pvr 和 pur(p和r可能同时为空串),而v→u是 文法G的一个产生式,则称串α可以直 接推导出串β , 记为α=>β ,或 pvr =>pur。
<括号匹配串>::= ( ) <括号匹配串>::= <括号匹配串> <括号匹配串> <括号匹配串>::=(<括号匹配串>)
使用尖括号“<”和“>”包括起来的部分,作 为一个整体来看待,表示某个语法成分,最 终,需要使用字母表中的字母来定义。
符号“::=”是BNF本身的符号(元符号), 代表“定义为”或“就是”。
推导的实质是用产生式的右边代 替产生式的左边。(非终结符代表 在推导的过程中可以被替代的符 号,而终结符代表在推导的过程 中不可以被替代的符号)。
推导的逆过程称为归约。
用 符 号 y=>*z 表 示 y 可 以 经 过任意步(包括0步)推导 出z,即
①y=z;或者
②存在一个序列
α1,α2 ,α3 ,…,αn
有 y=α1,z=αn,且 αi=>αi+1;对所有i≥1。
用符号y=>+z表示y可以经 过多步(至少一步),推导 出z,即
存在一个序列 α1,α2 ,α3 ,…,αn 有y=α1,
z=αn,且αi=>αi+1;对所有i≥1。
思考:
对于任意文法G: S=>*S 和 S=>+S 一定都成立吗?
如果在推导的过程中,每一步都是将 推导产生的串的最左边的非终结符代 替掉,称之为最左推导,如果每一步 都是将推导产生的串的最右边的非终 结符代替掉,称之为最右推导(也称 之为规范推导),
考虑: 文法 S→aSa|bSb|c|ε 产生的语言是什么?
考虑:
产生语言L的文法, L= {wwT|w∈{a,b,c}+} 其中:wT是w的逆(反序)。
考虑:
产生下列语言的文法: L1={anbn|n>=0}; L2={anbn|n>0};