文法和语言的基本知识
序列的集合称为__形式语言__
程序语言的描述有三个方面:语法,语义,语用。
字母表:字母表是元素的非空有穷集合。
文法:G = (Vn,Vt,P,S)
Vn是规则中非终结符号的集合
Vt是终结符号的集合。Vn与Vt = 空,Vn并Vt称为文法G的字汇表
P是文法规则的集合
S是开始符号
描述同一语言的文法不唯一。
推导和规则的区别:
- 形式上的区别,推导用“=>”,规则用"->"
- 对文法任何规则A->a有A=>a,推导的依据是规则
直接推导的长度为1,推导的长度大于等于1。广义推导的长度大于等于0。
句型:有终结符和非终结符
句子:只有终结符
语言:又文法产生的所有句子的集合成为文法所定义的语言,寄为L(G【S】)。
最右推导<=>最左规约 都是__规范推导__和__规范规约__
短语:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语
子树末端结点行程的符号串是子树根的短语
素短语:含有终结符的短语且自身不包含其他素短语
直接短语:语法树中子树不包含其他子树
简单子树末端阶段是子树根的直接短语
句柄:定义:一个句型的最左直接短语称为该句型的句柄。
语法树中最左的直接短语
最左简单子树末端结点是句柄
- 短语:T*F,E+T*F
- 直接短语:T*F
- 句柄:T*F
文法:
-
0型文法(无限制文法):基本上所有语言都是
-
1型文法(上下文有关文法):
- 式子左边必须有一个非终结符
- 式子右边可是终结符也可是非终结符,但是必须有限个字符
- 左边长度要小于等于右边
-
2型文法(上下文无关文法):
- 式子左边只有一个非终结符
- 式子右边可以是终结符或者非终结符,但是必须有限个字符
-
3型文法(正规文法):
-
左线性文法:
或
-
右线性文法:
或
-
-
判断文法先从3->2->1->0文法判断
文法的限制:
- 不能有形如A->A的规则,这种称为有害规则,引起二义性。
- 文法不能有多余的规则。
文法的二义性:如果文法中存在两颗不同的语法树,则该文法是二义性文法
- 改变语法的规则
- 重新构造无二义性文法