【形式语言与自动机/编译原理】CFG->Greibach->NPDA(1)

本文将详细讲解《形式语言与自动机》(研究生课程)或《编译原理》(本科生课程)中的上下文无关文法(CFG)转换成Greibach范式,再转成下推自动机(NPDA)识别语言是否可以被接受的问题。此外,本文还给出了python代码的具体实现。

由于内容比较多,所以为了讲清楚,分成了3篇博客,第一篇(即本篇)主要讲 解从上下文无关文法到Greibach范式的具体步骤和流程,并给出了相应的算法及具体的例子;第二篇主要讲解从Greibach范式到下推自动机NPDA,同样给出了相应的算法及具体的例子;第三篇主要是对前两篇中给出的算法用python语言进行实现,并测试之前的例子。

它们的地址如下:

第一篇:

第二篇:

第三篇:


整体流程

这里先来介绍以下从上下文无关文法到Greibach范式再到下推自动机的整体流程,如下所示:

由上下文无关文法转换成下推自动机的过程,可以分为两个步骤,即:(1)上下文无关文法转换成Greibach范式(2)Greibach范式转换成下推自动机NPDA。这两个过程包括的具体步骤以及它们的顺序如下,

上下文无关文法-->消除左递归-->消除无用符号-->消除单一产生式-->消除空产生式-->得到Greibach范式-->生成状态转移函数-->得到下推自动机NPDA

以下将按照这个顺序分步骤进行讲解。

上下文无关文法转换成Greibach范式

1.1 消除左递归

c25af6d51bb64bdba7d34d14469a8dc6.png

d520400d5748483a9a0e69514049588f.png

86c9c7113874438096f0e92a82fb02e5.png

给出两个消除直接左递归的例子:

例子1:

8049239d739d4714b26a6b3aba1df46b.png

7e09c46bc833490397185e0a6ee31381.png

e3b75242a80a43689d656dcb4ed67de0.png

下面举3个消除间接左递归,并将其转换成直接左递归的例子:

bca32d7209564724a7fbcae58f81a68f.png

1c208926ef7441e4bf7260f3efe4e1e1.png

0964ee4ccd1842ad8316c5e040846646.png

1.2 消除无用符号

b6de6d92fa324eb88f22de6bdb170da0.png

简单来说,无用符号包括不可达符号和非产生符号两种。不可达符号是指不能直接或间接推出终结符号的非终结符号。非产生符号是指由开始符号S推不出的非终结符号。

bc1b4e4116ae4a18bfa9c754088e8ba4.png

f2a4ffbb69cd45ef908728ca061fa258.png

下面给出2个例子:

1de82e78e9d74b01bebe1b72446a7977.png

例子2:

41fe8b97501c449bb6d4658e2f9a33a6.png

1.3 消除单一产生式

71fd0401cc7f4a21a838feb6c18a54fb.png

97f7a3abf7f24222b148bde77e3a1901.png

8962cbdfd5ce47d5a6cd71ee7ed32555.png

0720487f7a6d45628b839ce4fcee43dc.png

以下给出4个例子:

227f634ae0824b86986028fa9de0998b.png

6796207c1f834b7b8fff8dac1889ab6c.png

10122aeb06af47faac1550f3c7859cec.png

1.4 消除空产生式

4641aaf629ba425f90537f4b090742ad.png

f54fb35baaef4205b0ebf217161cc3d9.png

763456b08d8e43068b8023f7be8f2a1b.png

以下给出3个例子:

9b036ac2e76b495ab63dbc8f4c5a3fb6.png

例子3:

bacd887604d745e7a6e8754d442de058.png

1.5 得到Greibach范式

56f83b8ea34b4a9cb438914cbbf237ec.png

7203f176c7244ce0ac5a27c72ff055fd.png

以下给出2个例子:

3e800830f782467cbd4b176aae08f218.png


本篇博客主要介绍了从上下文无关文法到Greibach范式的各个步骤,下一篇将讲解从Greibach范式到下推自动机NPAD的各个步骤。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/281750.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES6之迭代器(Iterator)

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

12.29_黑马数据结构与算法笔记Java

目录 305 旅行商问题 动态规划 实现2 306 旅行商问题 动态规划 实现3 307 分治 概述 308 快速选择算法 分治 309 快速选择算法 数组第k大数 Leetcode215 310 快速选择算法 数组中位数 311 快速幂 分治 312 快速幂 Leetcode50 313 平方根整数部分 Leetcode69-1 314 平方…

阿里云PolarDB数据库优惠价格表11元一天起

阿里云数据库PolarDB租用价格表,云数据库PolarDB MySQL版2核4GB(通用)、2个节点、60 GB存储空间55元5天,云数据库 PolarDB 分布式版标准版2核16G(通用)57.6元3天,阿里云百科aliyunbaike.com分享…

《Python机器学习原理与算法实现》学习笔记

以下为《Python机器学习原理与算法实现》(杨维忠 张甜 著 2023年2月新书 清华大学出版社)的学习笔记。 根据输入数据是否具有“响应变量”信息,机器学习被分为“监督式学习”和“非监督式学习”。 “监督式学习”即输入数据中即有X变量&…

ros2查看launch文件内需要提供的参数(接口):

格式:ros2 launch --show-args 包名称 launch文件名称 例如: ros2 launch --show-args ros_gz_sim gz_sim.python.py

区块链的三难困境是什么,如何解决?

人们需要保持社交、工作和睡眠之间的平衡,并且努力和谐相处。同样的概念也反映在区块链的三难困境中。 区块链三难困境是一个术语,指的是现有区块链的局限性:可扩展性、安全性和去中心化。这是一个存在了几十年的设计问题,其问题的…

【python高级用法】迭代器、生成器、装饰器、闭包

迭代器 可迭代对象:可以使用for循环来遍历的,可以使用isinstance()来测试。 迭代器:同时实现了__iter__()方法和__next__()方法,可以使用isinstance()方法来测试是否是迭代器对象 from collections.abc import Iterable, Iterat…

Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码,使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变,同时添加静态分区,分区字段为etl_date,类型为String&am…

人工智能的第一性原理

今天跟大家分享一篇 北师大 - 图像处理研究中心主任 郭平教授的一篇文章 通过“四个问题”, 解释了人工智能的第一性原理 提出了如何运用第一性原理思维 来解决人工智能缺乏基本常识的问题 并且他建议将最小作用量原理 作为人工智能的第一性原理 什么是第一…

排序算法讲解

1)排序思想: 2)排序代码: 3)注意点: 4)时间/空间复杂度和稳定性 下面的排序是以实现升序讲解的。 (一)直接插入排序 1)排序思想: 把待排序的…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话&#xff0c…

centos7安装nginx并安装部署前端

目录: 一、安装nginx第一种方式(外网)第二种方式(内网) 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏,这次记录一下 一、安装nginx 第一种方式(外网) 1、下载nginx ng…

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1)Jenkins中一些概念介绍1.2)Jenkins和maven用途上的区别1.3)为什么使用Jenkins1.4)学习过程中的疑问 第二章、安装Jenkins2.1)安装之前的准备2.2)Windows中Jenkins下载安装…

DrGraph原理示教 - OpenCV 4 功能 - 单通道图

通道 OpenCV的核心处理对象是Mat,大体是一个二维数组,加上了各种功能函数。 很多的图像处理,会在单通道或二值化的基础上进行,比如连通域、目标识别等。这里的通道就是channels。 不同的图像处理算法可能对通道数有特定的要求。例…

计算机组成原理复习6

总线结构与控制练习题 计算机系统为什么采用总线结构? 解析:在冯诺依曼计算机体系当中,把计算机基本组成分成了五大部分。运算器,控制器,存储器,输入设备和输出设备。我们可以把运算器和控制器制作在一个芯…

字符串与模拟法

加密英文 输入一个字符串可用getline(cin,数组名) 字典序 在字符串中寻找子字符串 分糖果 代码 猴子选大王 代码 如果n号猴子被选中,则使得n号的猴子变成false,未出局的猴子为true。 if(pn1) p1;这个是将超出的下标重新变回1号,使其重新循…

DNS域名查询过程

目录 DNS(Domain Names System) 域名转IP IP转域名 域名 域名查询流程 浏览器DNS缓存 操作系统缓存 本地host文件 完整流程 递归查询 迭代查询 DNS(Domain Names System) 域名系统,将域名和 IP 地址进行转…

模型 冰山理论

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。冰山下面才是重点。 1 冰山理论的应用 1.1 冰山理论在生活中的常见应用 人际交往:在人际交往中,很多人只关注表面的行为和语言,而忽略了内在的情感和动…

免费的云服务器推荐~三丰云

对于许多初创企业和小型公司来说,寻找一个经济实惠且可靠的云服务提供商是至关重要的。在这方面,三丰云以其免费虚拟主机和云服务器吸引了大量用户。 1. 注册与界面 注册三丰云的账户过程简单明了,只需按照步骤填写必要信息即可。其界面设计…

Unity之地形的构建

PS:公司没活干,好无聊偷偷摸鱼学Unity,害怕自己学完之后忘记,写下这一篇博客 先来看一下效果图:有山有水有树有草地 创建一个新的Unity3D项目 这里要用到Unity官方的免费资源包(现在好像已经下架了百度网盘…