形式文法和形式语言

本章主要阐述了一些基本的概念,为后续部分的编译进行了基础的准备:

  • 符号
  • 符号串及其运算(闭包运算,关注星闭包和正闭包)
  • 推导和规约
  • 文法,句型,句子,语言
  • 语法分析树:句型,短语,直接短语,句柄,素短语,最左素短语
  • 二义性
  • 乔姆斯基文法

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):正则表达式(词法分析)右部全是终结符号,要么只有一个且位于最做或最右,有限自动机

相关文章: