文法:描述语言的语法结构形式规则
基本概念
上下无关文法
终结符不可再分解,非终结符可以,非终结符可以由终结符和非终结符构成。
S:特殊的非终结符。所定义的语言最终感兴趣的语法单位。对于程序语言来说:句法单位
巴克斯范式BNF
文法生成语言
句型和句子练习
![](https://img-blog.csdnimg.cn/be081778e10745b69316c1b5d0cc0a7f.png)
文法与语言
例题1
例题2
例题3
例题4
推导与语法树
语法树与二义性
二义性:
1、文法的某一个句子存在两棵或两棵以上的语法树
2、对于文法的某一个句子, 存在两种或两种以上的最左 (最右) 推导
3、对于文法的某一个句子, 存在两种或两种以上的最左 (最右) 归约
4、在进行归约时,文法的某些规范句柄不唯一
注意判断:
形式语言鸟瞰
小结
补充:
·对于文法G[Z],已知u是句型,则
1、只要使用规范推导,无论如何一定可以从Z推导出u
2、只要依据产生式进行规范归约,则u一定可以归约成Z
都是错的。为什么?太绝对,还要语法分析
· 由“非终结符-->符号串”这种产生式构成的文法是2型文法
·文法G[Z]和语言L(G[Z])存在如下关系:一个文法对应唯一的语言,反之则不然
·关于短语和句柄,直接短语才可能是句柄
句柄:任意句型的最左简单短语,成为句柄,一个句型只有一个句柄
句型:终端节点的组成的串
层次结构如下
短语 { 简单短语 {句柄} } }
子树:由该树的某个节点,连同向下生长出的部分组成
子树与短语的联系:若句型中某些符号按照从左到右的顺序组成某棵子树的末端节点,那么有这些末端节点组成的字符串,既是相对于树根的短语
例子:如以下这棵树
1.短语
我们从深度为1开始,找出父节点为S,他的短语为子节点(无法产生叶子结点的节点)的集合 即是{a1b1b2a3a2}
从深度为2的节点开始找,节点为A,B,S,它的短语为a1,b1b2,a3a2
从深度为3的节点开始找,节点为S,B,B,A,它们的的短语分别为 空,b1,b2,a3
类推.......
直到叶子结点结束
综上可知短语有 { a1b1b2a3a2,a1,b1b2,a3a2,b1,b2,a3}
2.简单短语
就是找可以一次性推导出来的叶子结点,有图可知A->a1,B->b1,B->b2,A->b3
所以简单短语为 a1,b1,b2,a3
3.句柄
为最左直接短语,右图可知句柄为a1
· 文法识别符号经过任意步推导得到的结果是 句型
· 正则文法可以是二义性的,又被称为线性文法,多数程序设计语言的单词可用它描述
·某个语言,它能用正规表达式表示,则必须可以使用正规文法表示