【计算理论】【《计算理论导引(原书第3版)》笔记】第二章:上下文无关文法

2023-12-24 17:44

本文主要是介绍【计算理论】【《计算理论导引(原书第3版)》笔记】第二章:上下文无关文法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
      • 2.1|上下文无关文法概述
        • 上下文无关文法的形式化定义
        • 乔姆斯基范式
          • 定理
            • 证明

因上努力

个人主页:丷从心

系列专栏:计算理论

果上随缘


2.1|上下文无关文法概述

上下文无关文法的形式化定义
  • 上下文无关文法是一个 4 4 4元组 ( V , Σ , R , S ) (V , \Sigma , R , S) (V,Σ,R,S),且
    • V V V是一个有穷集合,称为变元集
    • Σ \Sigma Σ是一个与 V V V不相交的有穷集合,称为终结符集
    • R R R是一个有穷规则集,每条规则由一个变元和一个由变元及终结符组成的字符串构成
    • S ∈ V S \in V SV是起始变元
乔姆斯基范式
  • 称一个上下文无关文法为乔姆斯基范式,如果它的每一个规则具有如下形式

A → B C A → a A \rightarrow BC \\ A \rightarrow a ABCAa

  • 其中, a a a是任意的终结符, A A A B B B C C C是任意的变元,且 B B B C C C不能是起始变元,此外允许规则 S → ε S \rightarrow \varepsilon Sε,其中 S S S是起始变元
定理
  • 任一上下文无关语言都可以用一个乔姆斯基范式的上下文无关文法产生
证明
  • 首先,添加一个新的起始变元 S 0 S_{0} S0和规则 S 0 → S S_{0} \rightarrow S S0S,其中 S S S是原来的起始变元
    • 这样可以保证起始变元不会出现在规则的右边
  • 第二阶段,考虑所有的 ε \varepsilon ε规则
    • 删除 ε \varepsilon ε规则 A → ε A \rightarrow \varepsilon Aε,这里 A A A不是起始变元,然后对在规则右边出现的每一个 A A A,删除这个 A A A后得到一条新的规则
  • 第三阶段,处理所有的单一规则
    • 删除单一规则 A → B A \rightarrow B AB,然后只要有一条规则 B → u B \rightarrow u Bu,就要添加规则 A → u A \rightarrow u Au,除非 A → u A \rightarrow u Au是已在前面被删除的单一规则
  • 最后,把所有留下的规则转换成适当的形式
    • 把每一条规则 A → u 1 u 2 ⋯ u k A \rightarrow u_{1} u_{2} \cdots u_{k} Au1u2uk替换成规则 A → u 1 A 1 A \rightarrow u_{1} A_{1} Au1A1 A 1 → u 2 A 2 A_{1} \rightarrow u_{2} A_{2} A1u2A2 ⋯ \cdots A k − 2 → u k − 1 u k A_{k - 2} \rightarrow u_{k - 1} u_{k} Ak2uk1uk,其中 k ≥ 3 k \geq 3 k3,每一个 u i u_{i} ui是一个变元或终结符, A i A_{i} Ai是新的变元,用新变元 U i U_{i} Ui替换终结符 u i u_{i} ui,并增加规则 U i → u i U_{i} \rightarrow u_{i} Uiui

这篇关于【计算理论】【《计算理论导引(原书第3版)》笔记】第二章:上下文无关文法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532590

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识