zoukankan      html  css  js  c++  java
  • 上下文无关语法

    在这里插入图片描述

    在这里插入图片描述

    直观的理解,V变元指代一类事物,如V指代动词,那么T总结符就是一系列具体动作,初始符就是文化最开始,未发生任何变化时的样子.

    产生式麻,就是动词到具体动作的映射过程

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 上下文无关文法是形式化描述语言的又一种工具;
    • 它表示语言的能力强于有穷自动机和正则表达式, 但也有无法它表示的语言;
    • 基本思想是用变量表示串的集合;
    • 递归的使用变量去定义变量, 因此善于表示嵌套的结构, 比如匹配的括号等;
    • 变量之间仅使用了“连接”, 同一变量的不同定义使用了“并”.

    字符使用的一般约定

    • 终结符: 0, 1, . . . , a, b, . . .
    • 终结符串: . . . ,w, x, y, z
    • 非终结符: S, A,B, . . .
    • 终结符或非终结符: . . . ,X, Y,Z
    • 终结符或非终结符组成的串: α, β, γ, . . .

    在这里插入图片描述

    在这里插入图片描述

    归约和派生

    从字符串到文法变元的分析过程, 称为递归推理(recursive inference) 或归约(reduction) ;
    从文法变元到字符串的分析过程, 称为推导或派生(derivation).

    • 归约: 自底向上(bottom up), 由产生式的体向头的分析
    • 派生: 自顶向下(top down), 由产生式的头向体分析

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    最左派生和最右派生

    为限制派生的随意性, 要求只替换符号串中最左边变元的派生过程, 称为最左派生(left-most derivation),

    只替换最右的, 称为最右派生(right-most derivation).

    在这里插入图片描述

    文法的语言

    在这里插入图片描述

    上下文无关是指在文法派生的每一步αAβ ⇒ αγβ, 符号串γ 仅根据A 的产生式派生, 而无需依赖A 的上下文α 和β.

    文法的等价性

    如果有两个文法CFG G1 和CFG G2, 满足L(G1) = L(G2), 则称G1 和G2 是等价的.

    句型

    在这里插入图片描述

    • 只含有终结符的句型, 也称为G 的句子(sentence)
    • 而L(G) 就是文法G 全部的句子

    文法设计举例

    在这里插入图片描述

    至少包含xx, 则先将xx写出来, 再用其他变元插入进行变化

    在这里插入图片描述

    将CFG 变为正则表达式直接用P进行迭代

    在这里插入图片描述

    例4是相等的情况,不相等的情况,只需要相等情况C + 独自情况A,B即可

    思考n < m的情况: 先写出相等,再加上偏移的字符

    在这里插入图片描述

    推荐解2. 当要求0,1相等,没有位置要求,则先将1,0 列出来,再插缝,注意0,1顺序的不同

    在这里插入图片描述

    先写出i = 2j的情况,再加上偏移,注意偏移的写法

    语法分析树

    派生或归约的过程可以表示成树形结构.

    在这里插入图片描述

    语法树和派生是等价的

    语法树唯一确定最左(右) 派生

    文法和语言的歧义性

    定义. 如果CFG G 使某些符号串有两棵不同的语法分析树, 则称文法G 是歧义(ambiguity)的.

    在这里插入图片描述

    有些文法的歧义性, 可以通过重新设计文法来消除.

    在这里插入图片描述

    定义同样的语言可以有多个文法, 如果CFL L 的所有文法都是歧义的, 那么称语言L是固有歧义(Inherent Ambiguity) 的.

    在这里插入图片描述

    文法的化简与范式

    以不改变语言为前提, 化简文法和限制文法的格式

    文法的化简

    1. 消除无用符号(useless symbols): 对文法定义语言没有贡献的符号
    2. 消除ε 产生式(ε-productions): A → ε (得到语言L − {ε})
    3. 消除单元产生式(unit productions): A → B

    无用符号, 从文法开始符号派生到终结符串的过程中用不到; ε-产生式, 除了空串ε 自身,
    没有贡献语言中其他的串; 单元产生式, 仅仅增加了推导(或归约) 的步骤. 这三者对语言的定
    义都没有实质的作用.

    消除无用符号

    在这里插入图片描述

    可达就是S可到达的变元

    产生就是可以派生到全部为终结符的串的变元

    计算“产生的”符号集
    1. 每个T 中的符号都是产生的;
    2. A → α ∈ P 且α 中符号都是产生的, 则A 是产生的
    计算“可达的”符号集
    1. 符号S 是可达的;
    2. A → α ∈ P 且A 是可达的, 则α 中符号都是可达的.
    注意

    • 先寻找并消除全部非“产生的”符号
    • 再寻找并消除全部非“可达的”符号
    • 否则可能消除不完整

    在这里插入图片描述

    消除ε-产生式

    定义. 文法中形如A → ε 的产生式称为ε-产生式.
    如果变元A ⇒∗ ε, 称A 是可空的.

    确定“可空变元”
    1. 如果A → ε, 则A 是可空的;
    2. 如果B → α 且α 中的每个符号都是可空的, 则B 是可空的.

    在这里插入图片描述

    消除单元产生式

    如果有A ⇒∗ B, 则称[A,B] 为单元对.

    单源产生式,即该产生式对应一个变元,而不是组合

    A ==> B是单源产生式, A ==>BC不是单源产生式

    同时注意,消除的只是 A ==> B,而不是B. 产生式B ==> … 依然成立

    消除单元产生式
    1. 删除全部形为A → B 的单元产生式;
    2. 对每个单元对[A,B], 将B 的产生式复制给A.

    在这里插入图片描述

    在这里插入图片描述

    限制文法格式

    将任意形式的文法转换为:

    1. 乔姆斯基范式(CNF, Chomsky Normal Form)
    2. 格雷巴赫范式(GNF, Greibach Normal Form)

    乔姆斯基范式

    定理21 (乔姆斯基范式CNF). 每个不带ε 的CFL 都可以由这样的CFG G 定义, G 中每个产生式的形式都为

    A → BC 或A → a (这里的A, B 和C 是变元, a 是终结符.)

    乔姆斯基, 要么两个大人(两个变元), 要么是一个小孩(终结符)

    反正成人不能单身

    CFG 转为CNF 的方法

    在这里插入图片描述

    在这里插入图片描述

    将终结符封装成变元

    将一系列变元变成2个级联的形式

    在这里插入图片描述

    格雷巴赫范式

    定理22 (格雷巴赫范式GNF). 每个不带ε 的CFL 都可以由这样的CFG G 定义, G 中每个产生式的形式都为

    A → aα (其中A 是变元, a 是终结符, α 是零或多个变元的串.)

    GNF就是一个小孩一个大人(可以没有), 两个成人不能在一起,在一起必须有小孩在前面

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    间接左递归可以理解为循环引用

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述


    上下文无关语法的性质

    上下文无关语言的泵引理

    在这里插入图片描述

    找到中间一个大小为N的块,增减其两端的字符,其任符合上下文无关语法

    对比

    在这里插入图片描述

    找到前面一个大小为N的块,任意增减其末尾字符, 其仍然属于正则表达式

    定理 34. 如果有 Σ 上的 CFL L 和代换 s, 且每个 a ∈ Σ 的 s(a) 都是 CFL, 那么 s(L) 也是
    CFL.

    定理 35. 上下文无关语言在并, 连接, 闭包, 正闭包, 同态下封闭.

    定理 36. 如果 L 是 CFL, 那么 L R 也是 CFL.

    CFL 对交运算不封闭

    CFL 对补运算不封闭

    定理 38. 若 L 是 CFL 且 R 是正则语言, 则 L ∩ R 是 CFL

    在这里插入图片描述

    根据上下文无关语言的性质判断一个语言是否是上下文无关的

    在这里插入图片描述

  • 相关阅读:
    Session的使用与Session的生命周期
    Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别与使用
    十九、详述 IntelliJ IDEA 之 添加 jar 包
    十八、IntelliJ IDEA 常用快捷键 之 Windows 版
    十七、IntelliJ IDEA 中的 Maven 项目初体验及搭建 Spring MVC 框架
    十六、详述 IntelliJ IDEA 创建 Maven 项目及设置 java 源目录的方法
    十五、详述 IntelliJ IDEA 插件的安装及使用方法
    十四、详述 IntelliJ IDEA 提交代码前的 Code Analysis 机制
    十三、IntelliJ IDEA 中的版本控制介绍(下)
    十二、IntelliJ IDEA 中的版本控制介绍(中)
  • 原文地址:https://www.cnblogs.com/lee3258/p/11997778.html
Copyright © 2011-2022 走看看