形式文法和形式语言
本章主要阐述了一些基本的概念,为后续部分的编译进行了基础的准备:
- 符号
- 符号串及其运算(闭包运算,关注星闭包和正闭包)
- 推导和规约
- 文法,句型,句子,语言
- 语法分析树:句型,短语,直接短语,句柄,素短语,最左素短语
- 二义性
- 乔姆斯基文法
2.1 符号串和语言:
- 人工语言:必须是明确的,不能有歧义。
- 字母表:符号的有限集合。
- 符号:可以互相区分的记号或元素。
- 符号串:字母表上符号的一个有穷序列(特殊:空符号串ℰ)
- 语言=符号串+运算逻辑
2.2 符号串运算:
- 连接
- 子串
- 前、后缀
- 幂:自己连自己
- 绝对值:符号个数
2.3 符号串集合运算
- 并集:在两个集合中存在的串
- 交集:从两个集合中分别取串连接
- 幂运算:多次并运算,自己并自己
- 星闭包Σ*(Kleene):集合不同幂次的并集,就是字母表中所有任意组合的组合,可以空;全集【语言:存在一定的逻辑,规范】,Σ+字符串至少为1,没有空。
- 空集∅有一个的,空串{ℰ}是有一个的
2.4 语言描述
- 有穷:枚举
- 无穷:找出有穷表示
(1)生成(文法):利用某种规则生成合法句子
(2)识别(自动机):将串输入模型,模型进行判别
2.5 文法
- 语言是语法产生的所有句子的全体
- 组成(终结符号集合VT,非终结符号集合VN,开始符号S,产生式规则P)
(1)终结:句子中可以出现的符号,可以看到(没有特殊说明,在右部的都是终结符号)
(2)非终结:语法单位(主语,谓语。。),看不到,用于辅助分析
(3)开始:最大的非终结(可以代表句子)
(4)P:α→β α至少有一个非终结符号,上下文无关文法α只有一个 - 从开始符号形成的串开始,对子串,用终结符号替代,直到完成推导过程
α→β1 α→β2 α→β3 = α→β1|β2|β3
2.6 推导
- 右部代替左部
- 直接推导:A→γ 则 aAb→aγb
- 推导(0步或多步):
- 中间所有的推导过程都称为句型,最后得到的全部都是终结符号的表示称为句子
- 最左推导和最右推导(规范推导):在哪边加(左句型,右句型)
- 最左推导:任何一步α => β都是对阿尔法中的最左非终结符进行替换
左右推导:任何一步α => β都是对阿尔法中的最右非终结符进行替换
2.7 规约(推导逆过程)
- 用产生式的左部来代替右部
可以采用树状图说明
2.8 语言
语言是文法产生表达式的集合,一个文法 一个语言
2.9 分析树
- 利用树状结构得到推导过程
- 遍历方式不同得到序列不同,但是一棵树只对应一个最左最右推导
- BD
- 短语:以非终结符号为子树根节点的所有叶节点(终结符号)
- 直接短语:包含父子两代的短语(只能有一步)
- 句柄:直接短语中,最左边的那个
- 素短语:
(1)至少含有一个终结符
(2)除自身外不含更小的带终结符的短语
2.10 二义性
- 句子二义性:一个文法的句子存在两颗分析树
- 文法二义性:一个文法中某个句子存在二义性
- 语言二义性:所有生成该语言的文法都是二义的
- 判断二义性方法:若产生式集合中,存在某个非终结符号,既存在左递归,又存在右递归
- 解决:
(1)改写文法,要求新文法与初始的文法等价
(2)在使用过程中增加一些限制
2.11 乔姆斯基文法
- 0型,短语结构文法(PSG):至少包括一个非终结符号,图灵机
- 1型,上下文有关文法(CSG):F→α会受到前后a,b的影响(aFb),线性有界自动机
- 2型,上下文无关文法(CFG):只要有一个即可产生(语法分析),下推自动机
- 3型,正规文法(RG):正则表达式(词法分析)右部全是终结符号,要么只有一个且位于最做或最右,有限自动机