编译原理-各章典型题型+思路求解
第2章文法和语言习题
基础知识:
思路:
基础知识:
思路:
基础知识:
编译原理之 短语&直接短语&句柄 定义与区分_编译原理短语,直接短语,句柄-CSDN博客
思路:
题目:
基础解释:
简单来说:
上下文无关文法就是这个文法中所有的产生式左边只有一个非终结:
例如:S->Abc
上下文无关文法就是第一个产生式左边有不止一个符号
例如:Sa->Abc
思路:
编译原理 —— 正规式、正规集和正则定义-CSDN博客
【20200401】编译原理课程课业打卡十二之求解正规文法对应正规式_正规式s=(o|10)*-CSDN博客
思路:
第3章词法分析习题
基础解释:
思路:
思路:
基础解释:
正规式->最小化DFA说明 - 知乎 (zhihu.com)
思路:
基础知识:
思路:
先写出满足条件的正规式,由正规式构造NFA,再把NFA确定化和最小化
对于正规式的构造:
题目给定为字符表有0、1两种字符,则我们可以得到(0|1)*的正规式。
又由于每一个1后面都有一个0,故每次出现1必然为10的形式
故得到正规式:(0|10)*
(答案给的正规式差不多,我们最终也可以得到化简的答案,因为)
第4章自顶向下语法分析习题
基础知识:
对于不带回溯:采用提取公共因子的方法,即让候选首符号集变成两两不相交,不会出现读取一个一个符号后发现下一个符号不匹配又要回到上一个读取位置的情况。
推荐博客:
编译原理第四章总结_不带回溯的递归子程序是什么意思-CSDN博客
思路:
注意:
这里的第2问,笔者书写并不规范,因为当一个文法满足LL(1)条件的时候,我们才能构造一个不带回溯的递归子程序。故在第2问中应先判断改写后的文法G是不是LL(1)型文法,然后再书写不带回溯的递归子程序。
【20200415】编译原理课程课业打卡十五之求解预测分析表&分析输入串是否为文法句子_对文法g,进行改写,然后对每个非终结符写出不带回溯的递归子程序-CSDN博客
基础知识:
对于LL(1)文法的判断:
故对于LL(1)文法的判断流程为:先看文法是否存在左递归
构建非终结符的FIRST集和FOLLOW集
然后检查各个产生式SELECT集两两不相交
从定义上可以看出SELECT集不存在空集
对于第3点解释:当空串属于a的FIRST集的时候,如果a处于空串这种状态的时候,那么它的FOLLOW集此时也等价于为它的FIRST集。
注意:
关于FIRST集中的空串。简而言之,符号串必须广义推导成一个“纯纯的”空串。此时才将空串放入首符号集中。
总结:
这节的主要内容为给定文法,对它进行一系列的操作。(以下为粗略的总结,仅仅作为复习,详细细节还需要找到对应定义)
1.对于最左推导:
记住每次都是在保证正确的情况下,从最左边开始匹配即可
2.自上而下分析法:
从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的推导。
3.目前来说,我们改写文法主要有两种手段:
消除直接左递归:为了防止从左边开始进行产生式匹配时出现一直左递归的情况,因为该方式的左边最终一定为一个终结符,故将终结符提前直接表示,重复递归的过程放到右边,方便对于自上而下分析法进行符号匹配(间接左递归:去环即可)
提取左因子:为了防止有多个产生候选式,选择了错误的候选式,导致会出现回溯问题的解决方案。解决方案:反复提取相同的公共左因子,构成新的非终结符,使每个非终结符的所有候选首符号集变成两两不相交
4.FIRST集和FOLLOW集:
FIRST集:
定义:FIRST集为当前非终结符推导出的第一个终结符号所构成的集合,也就是所有的第一个终结符号组合的集合。
构造过程:简单来说就是找第一个终结符,要注意的是对于空串的加入,一定要广义上全部推出为空(即最后推出来的结果,就是一个空集),才能加入。
作用:能够在后面进行预测分析表的时候,直接将表达式写入。简单可以理解为在读取字符进行输入的时候能够通过给定的字符快速的定位到需要用哪一个产生式(即通过第一个非终结符,找到所使用的产生式)。
FOLLOW集:
定义:FOLLOW集为当前非终结符后面的第一个终结符所构成的集合,也就是所有的它后面的第一个终结符的集合。
构造过程:首先需要将终结符放入到开始符号S中(把开始符号S看作一个整体那么该需要读入的字符串就可以看作($S$)),然后依次对于每一个非终结符,将它的第一个终结符放入到集合中。
作用:能够在后面进行预测分析表的时候,直接将表达式写入。简单可以理解为在读取字符进行输入的时候能够通过给定的字符快速的定位到需要用哪一个产生式(即通过第一个非终结符,找到所使用的产生式)。
作用其实和FIRST差不多,但要注意的是在预测分析表中,FOLLOW集只会在FIRST集存在空的时候,才会将FOLLOW集写入(我们可以这样理解:产生式为空,那么我们要根据的第一个字符串定位就等同于FOLLOW集,即该空产生式后面的第一个终结符)
5.SELECT集:
定义:产生式A→α的可选集是指可以选用该产生式进行推导时对应的输入符号的集合,记为SELECT( A→α )
如果 ε not∈ FIRST(α), 那么SELECT(A→α)= FIRST(α) 如果 ε ∈ FIRST(α), 那么SELECT(A→α)=( FIRST(α)-{ε} )∪FOLLOW(A)
作用:可以用于判断文法是否LL(1)文法(即判断下文LL(1)文法的满足条件的2、3条)
判断过程如下:
解释:简单来说,SELECT集即为该产生式能够推导产生的第一个终结符的所有集合。 通过SELECT交集的判断,就能判断是否存在相同首终结符的情况,进而判断是否为LL(1)文法
6.LL(1)文法:
LL(1)文字解释:
第一个L表示从左到右去扫描输入串
第二个L表示采用最左推导的方式(这是为什么我们要去掉直接左递归的原因,防止出现一直递推的问题)
1表示分析时,每一步只需要向前看一步即可(这也是为什么我们要提取左因子的原因,让我们能够直接对应表中的值进行推导,其具有唯一对应的关系)
满足条件:
⑴文法不含左递归
⑵文法中每个非终结符A的各个产生式的首终结符集两两不相交,即,若 A→ α1| α 2 |…| α n则 FIRST(αi )∩FIRST(αj )=φ
⑶文法中每个非终结符A若其首字符集中含有ε,则FIRST(αi )∩FOLLOW(A)= φ
7.预测分析表的构建:
对于A->a
首先对产生式右边构造FIRST(a)集,当FIRST(a)集中存在空集的时候,接下来就构造产生式左边非终结符的FOLLOW(A)集,然后根据以上两个集合去在预测分析表中书写对应位置的产生式。
注意这里的为什么要构造FOLLOW(A)集解释一下,当FIRST(a)集广义上都为空的时候,这个时候FOLLOW(A)集就等价于第一个非终结符。(因为我们的分析表就是根据第一个非终结符进行判断)
8.预测分析的过程:
设栈顶符号x和输入符号a
1.当x=a= $ 时,则表示分析成功,停止分析
2.当x=a not= $时,把X从STACK栈顶弹出,a指向下一个输入符号。这里的意思表示a之前指向的字符已经匹配,开始匹配下一个字符。
3.当x为非终结符的时候,查看分析表,找到对应位置的产生式,把x弹出栈顶,把产生式的右部符号,反向进栈(若为空,则不推入东西进栈)。这一步的意思就是通过预测分析表,从当前产生式的起点位置出发,因为当前文法为LL(1)文法,其保证分析时只需要向前看一步,故我们可以采用该方式进行推导。
第5章算符优先分析习题
基础知识:
编译原理------语法分析(二)自下而上的归约(算符优先,LR分析)_待约项目和归约项目-CSDN博客
注意:注意算符优先关系表的拓广文法:S'->$S$,可以通过该文法,蒋终结符与$的关系写入算符优先关系表中。
总结:
1.语法分析的方法:
简单来说:
自上而下即从开始符号开始,根据给定的字符串,判断要用什么产生式去推导,然后逐步推导出结果。主要包括递归下降分析法【即通过代码的方式表现出来】和 LL(1)预测分析法【通过消除左递归,消除回溯 计算FIRST、FOLLOW集合,构造预测分析表,然后根据预测分析表对于输入串进行判定】
自下而上是从输入串开始,对字符串进行读入,并根据给定的字符串,判断要用什么产生式去归约,最后逐步规约出结果。主要包括算法优先分析法【计算FIRSTVT和LASTVT集合 构造算符优先关系表,通过最左素短语进行规约】、规范规约【边输入单词符号,边进行规约】、LR分析法
2.短语与直接短语:
3.优先关系:
4.算符文法:
5.算符优先文法:
6.FIRSTVT集与LASTVT集:
简单来说
FIRSTVT集就是 一个终结符的优先级小于 后面所有非终结符 第一层递归 里面的 第一个终结符
LASTVT集就是 一个终结符的优先级大于 前面所有非终结符 第一层递归 里面的 第一个终结符
该两个集合的核心都是 对于在非终结符里面的终结符 大于 与非终结符相邻的终结符,大家可以理解成递归,非终结符就是一个递归程序,我们程序运行的时候肯定是先把最深处递归的内容处理好后,再网上递归,这样就最深处的递归程序里面的内容优先级比上一级的要大。
7.最左素短语:
最左素短语用于算符优先算法进行分析的归约操作。
第6章LR 分析习题(持续更新中)
相关文章:
![](https://img-blog.csdnimg.cn/direct/8ee95dd9c09844299ce12ee0fdb8bbfe.png)
编译原理-各章典型题型+思路求解
第2章文法和语言习题 基础知识: 思路: 基础知识: 思路: 基础知识: 编译原理之 短语&直接短语&句柄 定义与区分_编译原理短语,直接短语,句柄-CSDN博客 思路: 题目: 基础解释:…...
![](https://www.ngui.cc/images/no-images.jpg)
【绝对有用】C++ vector排序
在 C 中,有多种方法可以对向量(即 std::vector)进行排序。最常用的方法是使用标准库中的 std::sort 函数。以下是一些例子: 使用 std::sort 函数 std::sort 函数是标准库 <algorithm> 中的一个函数,可以对向量…...
![](https://www.ngui.cc/images/no-images.jpg)
linux——VScode安装
方法一:使用snap一键安装 Snap Store 是 Ubuntu、Debian、Fedora 和其他几个 Linux 发行版中的一个应用商店,提供了数千个应用程序和工具的安装。Snap Store 使用 Snap 包格式,这是一种通用的 Linux 软件包格式,使得在不同的 Lin…...
![](https://www.ngui.cc/images/no-images.jpg)
X-LoRA:高效微调 LoRA 系列,实现不同领域知识专家混合模型
📜 文献卡 X-LoRA: Mixture of Low-Rank Adapter Experts, a Flexible Framework for Large Language Models with Applications in Protein Mechanics and Molecular Design作者: Eric L. Buehler; Markus J. BuehlerDOI: 10.48550/arXiv.2402.07148摘要:We report…...
![](https://img-blog.csdnimg.cn/direct/778e5f1c21724c7eaffadf3c06c594e8.jpeg)
基于卷积神经网络的目标检测
卷积神经网络基础知识 1.什么是filter 通常一个6x6的灰度图像,构造一个3*3的矩阵,在卷积神经网络中称之为filter,对6x6的图像进行卷积运算。 2.什么是padding 假设输出图像大小为nn与过滤器大小为ff,输出图像大小则为(n−f1)∗(…...
![](https://img-blog.csdnimg.cn/direct/8a2702fb163c4a93a33937cadd749b69.png)
Mysqld数据库管理
一.Mysqld数据库类型 常用的数据类型 int 整型 无符号[0-4294967296(2的32次方)-1],有符号[-2147483648(2的31次方)-2147483647]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型…...
![](https://img-blog.csdnimg.cn/direct/01f36b83423a4fe4b527298c53e243f6.png)
Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS
前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险,包括数据泄露、账号被盗以及恶意软件的安装。因此,利用合适的Wi-Fi安全措施是非常重要的,了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…...
![](https://www.ngui.cc/images/no-images.jpg)
开源【汇总】
开源【汇总】 前言版权推荐开源【汇总】最后 前言 先占个位 2024-6-21 21:29:33 以下内容源自《【创作模板】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net 禁止其他平台发…...
![](https://img-blog.csdnimg.cn/direct/426f4cc78c9d47f8ba0a42da0d640810.png)
英文字母表
目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 英文字母表 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){foreach (var item in panel1.Controls){if (item ! null)…...
![](https://img-blog.csdnimg.cn/direct/d5eda8c130f448f5a333cf5522d70021.png)
Redis缓存穿透
缓存穿透: 查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。 方法一: 方法二: 布隆过滤器: 简单来说就是一个二进制数组,用0和1来判断数组中是否存在…...
![](https://www.ngui.cc/images/no-images.jpg)
SHELL脚本学习(十一)正则表达式
一、锚点字符 1.1 锚点行首 脱字符(^)指出行首位置 $ cat < file1 test line1 test line2 test line3 line4 test#打印所有包括文本 test的行 $ sed -n /test/p file1 test line1 test line2 test line3 line4 test#打印所有以test为首的行 $ sed -n /^test/p file1 test…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode Java学习记录——代码随想录哈希表篇
文章目录 哈希表几种哈希实现 Java数组HashSetmap方法charAt()toCharArray()for 遍历长度 哈希表 当需要快速判断一个元素是否出现在集合里的时候,就要用到哈希表。 无限循环就意味着重复出现。 几种哈希实现 数组:大小固定set:只存keymap…...
![](https://img-blog.csdnimg.cn/img_convert/137c92c0d9fed9d037586d0640ee8a26.jpeg)
我又挖到宝了!小米、352、希喂宠物空气净化器除毛能力PK
养宠家庭常常因为猫咪们掉毛的问题烦恼。无论是短毛猫还是长毛猫,它们的毛发总是无处不在,从沙发到地毯,从床铺到衣物,甚至飘散在空气中。其中最难清理的就是飘浮在空气中的浮毛,最让人担心的是,空气中的浮…...
![](https://img-blog.csdnimg.cn/direct/9e0ed269af3243ea83bea8a217c2e324.png)
每月 GitHub 探索|10 款引领科技趋势的开源项目
1.IT-Tools 仓库名称: CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议: GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目,提供各种对开发者友好的在线工具࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
【如何让新增的Android.mk参与编译】
步骤1: 你需要在你新增的Android.mk目录以上的位置找一个已有的Android.mk 步骤2: 在原本已有的Android.mk中加入: //这是你新增的Android.mk文件的路径 include $(LOCAL_PATH)/xxx/xxx/Android.mk如果有些多可以这样写 //dir1 dir2是你新…...
![](https://img-blog.csdnimg.cn/direct/d0c2dffdaed34f399406e56d79046a7a.gif)
【windows|009】计算机网络基础知识
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言循环中获取之前变量的值
获取上个数组变量的值 #include <stdio.h> #include <string.h>enum { GG, DD }; int main() {int bi[] {0, 0};int bi_s1[] {0, 0};for (int i 0; i < 5; i) {memcpy(bi_s1, bi, sizeof(bi));bi[GG] i * 3;bi[DD] i * 2;printf("bigg %d, bigg_s1 …...
![](https://www.ngui.cc/images/no-images.jpg)
must be built with the ios 17 sdk or later,included in Xcode 15 or later.
2024.4.29 号开始,苹果又开始搞开发者了。 Xcode - 支持 - Apple Developer xcode可以从这里下载, Sign In - Apple 电脑不支持,头疼,必须 macOS Ventura 13.5 或以上才能支持。 电脑哪里搞,再买一台吗? 用…...
![](https://img-blog.csdnimg.cn/direct/fa8ac5e9a354444b985085431168138c.png)
Unity2D计算两个物体的距离
1.首先新建一个场景并添加2个物体 2.创建一个脚本并编写代码 using UnityEngine;public class text2: MonoBehaviour {public GameObject gameObject1; // 第一个物体public GameObject gameObject2; // 第二个物体void Update(){// 计算两个物体之间的距离float distance Vec…...
![](https://img-blog.csdnimg.cn/direct/80af8bb2112742ac87bc577d4d9e37b8.png)
Spring IOC 控制反转(注解版)
Spring IOC 控制反转 文章目录 Spring IOC 控制反转一、前言什么是控制反转(IOC)什么是依赖注入(DI) 二、介绍 IOC2.1 传统思想代码2.2 解决方案2.3 IOC思想代码2.4 IOC 使用(Autowired依赖注入)2.5 IOC 优…...
![](https://www.ngui.cc/images/no-images.jpg)
串口触摸屏的键盘控制
(text 属性txt_maxl 800) ①变量loadpageid.val:调用页的页面ID。 ②变量loadcmpid.val:调用页的控件ID。 ③定时器tm0:让输入框有个光标不断闪烁,如果不需要,控件属性en0即可。 ④变量inputlen…...
![](https://img-blog.csdnimg.cn/direct/d03cdba64dad4d8ba339311f5853bfdd.png)
xss初识(xss-lab)
XSS跨站脚本 XSS漏洞概述 XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(Cascading Style Sheets) 重名,所以改为XSS。 XSS主要基于javascript语言完成恶意的攻击行为,因为javascri…...
![](https://www.ngui.cc/images/no-images.jpg)
Autodesk Revit产品痛点
1.Revit已有20多年的历史,大多数软件公司认为大多数代码最多只有10年的生命周期。 2.Revit核心部分仍局限于单个CPU核心上,严重制约性能提升。 3.Revit只在数据库的大小和小细节上的改动。 4.Revit陈旧的绘图技术和性能难以提升。 5.Revit的致命弱点是模型增长的…...
![](https://img-blog.csdnimg.cn/img_convert/3a9b782ff6b8729eff4852d3371a394c.png)
如何使用Windows备份轻松将数据转移到新电脑?这里有详细步骤
序言 我们都知道那种买了一台新电脑,就想直接上手的感觉。我记得在过去的日子里,要花几个小时传输我的文件,并试图复制我的设置。在当今传输数据的众多方法中,Windows备份提供了一个简单可靠的解决方案。 登录到你的Microsoft帐户 Microsoft在传输过程中使用其云存储来保…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
【linux】操作系统使用wget下载网络文件,内核tcpv4部分运行日志
打印日志代码及运行日志(多余日志被删除了些): 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/55a53caa06c1472398fac30113c9731cb9e3b482 测试步骤和手段: 1、清空 kern.log; 2、使用wget 下载linux-6.9.tar.gz&…...
![](https://www.ngui.cc/images/no-images.jpg)
QT中常用控件的样式美化,已上传相应的qss样式和图片资源
1、QComboBox /*仅仅输入框*/ QComboBox {background-color: transparent;border-image: url(:/images/systemSetImage/common/comboBoxBk.png);border: 1px solid #7285CA...
![](https://www.ngui.cc/images/no-images.jpg)
Vue form表单验证
el-form 标签添加 ref、rules <el-form ref"form" :inline"true" :model"form" :rules"rules">el-form-item 添加prop <el-form-item label"姓名" prop"name"><el-input placeholder"请输入姓…...
![](https://www.ngui.cc/images/no-images.jpg)
vue.extend解决vue页面转构造函数暴露js供全局使用
用途: 解决在一些微前端项目中, B工程使用A工程的弹窗代码 // MaterialListPlugin.js文件, 在项目入口引入 // eg: 在main.js中添加一行 import /components/MaterialListPlugin.jsimport Vue from vue import MaterialListPlugin from /components/MaterialListPlugin.vue //…...
![](https://www.ngui.cc/images/no-images.jpg)
Java中如何处理异常?
在Java中处理异常是确保软件健壮性和提高代码质量的重要手段。以下是Java异常处理的一些关键点和最佳实践: 1:理解异常类型: Java中的异常分为检查异常( checked exceptions)和非检查异常(un-checked exc…...
![](https://img-blog.csdnimg.cn/direct/6aad20fd6ede4c369f1901bdd5d16984.png)
wordpress站群搭建3api代码生成和swagger使用
海鸥技术下午茶-wordpress站群搭建3api代码生成和swagger使用 目标:实现api编写和swagger使用 0.本次需要使用到的脚手架命令 生成 http server 代码 goctl api go -api all.api -dir ..生成swagger文档 goctl api plugin -plugin goctl-swagger"swagger -filename st…...
![](/images/no-images.jpg)
申请网站空间是申请域名吗/网站内容优化关键词布局
http://www.oracle.com/technetwork/java/javase/archive-139210.html 转载于:https://www.cnblogs.com/tianlai/p/4928312.html...
![](/images/no-images.jpg)
网站怎么做桌面快速链接/灰色关键词排名技术
自付款状态查询 签约通知 贷款详情查询 贷款申请列表查询 受托支付结果通知 授信审批结果 风控结果通知 放款结果通知 还款结果通知 接口地址...
![](http://upload-images.jianshu.io/upload_images/3386108-ad1cf83d87c73771.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
柘城县网站建设/长沙建站seo公司
网站的可扩展性架构设计,能够在对现有系统影响最小的情况下,系统功能可以可持续扩展及提升的能力。 在此,对容易混为一谈的 “扩展性” 和 “伸缩性” 的概念进行详细说明: 扩展性 表现为:基础设施不需要经常变更&…...
赤峰市建设网站/安卓手机优化大师官方下载
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释。 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成…...
![](https://images2015.cnblogs.com/blog/808527/201511/808527-20151112224554634-383982244.png)
响应式网站和/深圳百度代理
13物联网 201306104132 柴铱琳 一、 实验目的 (1)加深对作业调度算法的理解; (2)进行程序设计的训练。 二、 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序。 单道批处理系统的作业调度程序。作业一投入…...
![](/images/no-images.jpg)
wordpress 显示全文/北京官网seo收费
1、在黄金期内一定会面临很多压力,但千万不要让自己在"焦虑"状态下沉浸很久,因为焦虑会取代你的能力。相信坚持走下去的过程中会有答案。 2、正确地审视自己的能力。中国的特殊现状造就了一大批年轻的高管,机会够好&am…...