文法和语言的关系
文法是语言的生成系统。一些概念
- 字母表(也叫作符号集)
- 符号串
- 符号串的长度
- 符号串的前缀和后缀
- 符号串的子串
- 符号串的连接和方幂
- 字母表上的符号串集合
- 符号串集合的乘积
- 符号串集合的和
- 符号串集合的方幂
- 符号串集合的闭包
- 字母表上的和、积、方幂、闭包
一个字母表上的全部符号串所组成的集合是一个无穷集合。
空串和空集不是一个概念。
字母表A的正闭包A+就是A所有符号串所组成的集合。A*仅比A+多一个空符号串。
- 产生式
- 产生式集P
- 推导(最左推导和最右推导),最右推导是规范推导。
- 文法
- (非终结符集,终结符集,产生式集,开始符号),四元组
没有在产生式左侧出现的都是终结符 - 字汇表(词汇表)V=非终结符集∪终结符集
- 表示方法:写出产生式即可。
- 候选式
- 直接推导和推导长度
- 句型和句子(句型包括句子)
- 语言L(G),由文法的全部句子所组成
- 直接递归,直接左递归,左递归,XX递归的非终结符
- 递归文法
如果一个语言是无限的,则其文法必是递归的,提供了一种无限语言的有效表示方法。 - 文法的等价
- 文法和语言之间不存在一一对应的关系
- 语法树
- 对于文法G的任意一个句型都存在一个对应的语法树
- 语法树不能忘记标号
- A的直接后继和A组成文法G的一个产生式
- 对于给定的一个语法树,对应唯一的最左推导和最右推导
- 如何判断是否文法有二义性?
有两个不同的最左推导。(两个不同的最左推导对应着两个不同的语法树) - 一个文法是二义性的,并不代表该文法所描述的语言是二义性的。
- 先天二义性
- 文法二义性的消除
- 语言的二义性
不存在一个算法,在有限步骤内确切判断任给的一个上下文无关文法是否为二义性。
二义性也存在一定的优点,比如表达形式比较简洁。
文法类型
0型文法(短语文法)
1型文法(上下文有关)
2型文法(上下文无关)
3型文法(正规文法)[左线型文法] [右线性文法]短语
- 一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语
- 直接短语(简单短语)
- 最左直接短语-句柄
- 如何证明一个句型是属于某个文法的?
画出语法树 - 素短语
含有终结符,不含其它素短语(从小到大在短语中寻找)
文法的二义性和句子的二义性
一个包含二义性文法的句子,称这个文法是二义性的。关于一些写法的问题
空在文法中(也就是终结符中)可以不表现出来,在产生式集中要表现出来
0型文法、1型文法、2型文法、3型文法对照
https://blog.csdn.net/ke_yi_/article/details/83184710
编译原理中:短语,直接短语,句柄
https://blog.csdn.net/it_dream_er/article/details/53612006