您的位置:首页 > 其它

编译原理-文法复习

2018-01-28 18:41 211 查看

文法的相关概念

文法是以有穷的集合刻画无穷的集合的一个工具。

语言:是句子组成的集合,是由一组符号所构成的集合

语法:是每个句子构成的规则

语义:是每个句子的含义

闭包的概念:

*代表任意次推导,也叫克林闭包

+代表至少一次推导,成为正闭包。

文法定义为四元组(Vn,Vt,P,S)

Vn:非终结符的集合(一般用大写字母表示)

Vt:终结符的集合(一般用小写字母表示)

P:产生式的集合

S:为开始符号

推导:用产生式的右侧来替换产生式的左侧。

规约:用产生式的左侧来替换产生式的右侧。

句型:从文法的开始符号经过任意次推导可以得到的符号串,称为一个句型,一个文法可以有很多个句型。

文法是用来描述语言的,这个语言是该文法一切句子的集合。

文法的类型

乔姆斯基把文法分成4中类型,0型、1型、2型、3型,他们的差别在于对产生式施加不同的限制。

0型文法(PSG): α∈(VN∪VT)* ,且至少含一个VN

β∈(VN∪VT)*

对产生式没有任何限制

例如:A0→A0 , A1→B

0型文法说明:

0型文法也称为短语文法。

  一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。

  对0型文法产生式的形式作某些限制,以给出1,2和3型文法的定义。

(注意)

文法G 定义为四元组(VN ,VT ,P,S)

¨VN :非终结符集

¨VT :终结符集

¨P :产生式集合(规则集合)

¨S :开始符号(识别符号)

1型文法(上下文有关文法context-sensitive):

  对任一产生式α→β,都有|β|>=|α|, 仅仅 S→ε除外

  产生式的形式描述:α1Aα2→α1βα2

  (其中,α1、α2、β∈(VN∪VT)*,β≠ε,A∈VN)

  即:A只有出现在α1α2的上下文中,才允许用β替换。

  产生的语言称“上下文有关语言”但S不能出现在产生式的右部。

  例如:0A0→011000 1A1→101011

2型文法(CFG):对任一产生式α→β,都有α∈VN,β∈(VN∪VT)*

  产生式的形式描述:A→β(A∈VN)

  即β取代A时,与A所处的上下文无关。

  产生的语言称“上下文无关语言”

  例如:G[S]:S→01 S→0S1

3型文法(RG):也称正规文法

  每个产生式均为 “A→aB”或“A→a” —— 右线性

   “A→Ba”或“A→a” —— 左线性

  其中,A、B∈VN,a∈VT*

  产生的语言称“正规语言”

  例如:G[S]: S→0A | 0

  A→1B | B

  B→1 | 0

4个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。

语法树

子树:由任意节点和它的分支所构成的部分树。

简单子树:只有父子两代的子树。

句型:每棵子树的叶子组成一个句型

短语:每棵子树的叶子组成一短语

简单短语:每棵简单子树的叶子组成一个简单短语

句柄:最左边简单子树的叶子构成一个句柄。

素短语:不含其它短语的短语

最左素短语:最左边的素短语

规范:

如果每次推导都是对最左(最右)边的非终结符进行替换,则成这种推导为最左(最右)推导。最右推导称为规范推导,由规范推导所得的句型称为右句型或规范句型。

最左规约为规范规约。

句型的分析

就是识别一个符号串是否为某文法的句型。分为:自顶向下和自底向上。

自顶向下是从文法的开始符号触发,反复使用各种产生式,寻找“匹配”于输入符号串的推导。

问题:如何选择那一个推导式来进行推导

自底向上则是从输入符号开始,逐步进行“规约”,直至规约到文法的开始符号。

问题:如何识别可规约的串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译原理