-
第二章文法和语言
这一章只有两种大题,第一种先推导,再画语法树,找到短语,简单短语,句柄,判断句子,句型。
第二种是语言(考的概率挺小的)大题最后讲
前面都是小题的知识点
小题
1.字母表和符号串
字符表:元素的非空集合,表中每个元素称为符号
1,2是字母表,3中有相同的符号,4中为空。3,4不是。
符号串:由字母表上0个或者多个符号所组成的任何有穷序列。
符号串及其集合的运算
符号串的长度:所含符号的长度
符号串相等:比较x,y两符号串,当且仅当组成x的各符号与组成y的各符号依次相等。
例:x=aabb y=aabb x=y
m=ab n=ba m!=n
符号串的前缀和后缀
例:z=abc
前缀:a ab abc 空
后缀:c bc abc 空
符号串的子串
例:abc bc ab a b c 空
符号串的连接:xy称为符号串x与y连接
|x+y|=|x|+|y| (长度)
集合A与B的乘积
符号串的幂运算
集合的幂运算
字符串集合的正闭包
字符串的闭包(星闭包)
正闭包和星闭包的区别在于星闭包有空
2.文法
文法的分类
0型文法(短语结构文法):即左边不能为空,右边可以为空,基本无限制
1型文法(上下文有关文法):aUb → aub a b可为空 左部符号不超过右部符号且右部符号不为空
2型文法(上下文无关文法):a →b a为非终结符号 b为非终结符号与终结符号的星闭包
可以描述程序设计语言的语法规则
3型文法(正规文法):A →aB 或 A → a(右线性文法)
通常用来描述单词结构,其中包含标识符,常量,保留字,运算符,界符。
文法的EBNF表示
I表示或
{}表示重复
[]表示可有可无
()表示优先级
3.递归规则与递归文法
递归规则:在规则右部含有规则左部相同符号的规则
例如:U->Uy
递归文法:对于文法中的任一非终结符号,若能建立一推导过程,推导所得到的符号串又出现了该非终结符号,则文法是递归的。
例如:Z->aBa
B->bB|b
4.文法的二义性
一个文法存在两颗不同的语法树,则该句子或句型是二义性的,对应的文法也是二义性的。
二义性意味着句柄不唯一例如句型E+E*i
文法的二义性是不可判定的
解决办法:提出限制条件,称为无二义性的充分条件。当满足这些条件时,就判定文法是无二义性的
5.有关文法的实用限制
文法不能是二义性的
删去有害规则和多余规则
有害规则:形如U->U的产生式,会引发文法的二义性,若有,则删去
多余规则:文法中不会用到的规则
1.不可到达:文法中的某些非终结符号不在任何规则的右部出现
2.不可终止:某些非终结符号,由它不能推出终结符号串
大题
1. 推导(小题)
直接推导就是推一步
2、推导(大题)
每次只变换最右边的非终结符号
综合大题
短语是所有子树叶子节点的集合
简单短语是深度为1的子树叶子节点的集合
句柄是最左侧的简单短语
句型包含非终结符号和终结符号
句子只包含终结符号
语言