编译原理期末大题步骤——例题

一、预测分析方法步骤

  • 提取左公因子,消除左递归
  • 判断文法是否为LL(1)文法
  • 若是,构造预测分析表;否则,不能进行分析。
  • 根据预测分析表对输入串进行分析

例子:

文法G[E]:                                            E\rightarrowE+T|T

T\rightarrowT*F|F

                                                             F\rightarrowi|(E)                                  构造预测分析表。 

(1)消除左递归 

 VN排列为E,T,F

消除E的一切直接左递归:

        E\rightarrowTE'        T\rightarrowT*F        F\rightarrowi

        E'\rightarrow+E'|ε    T\rightarrowF           F\rightarrow(E)

消除T的一切直接左递归:

        E\rightarrowTE'        T\rightarrowFT'        F\rightarrowi

        E'\rightarrow+E'|ε    T^\rightarrow*FT'|ε   F\rightarrow(E)

F没有左递归

文法无左公因子。

所以,提取左公因子和消除左递归后的文法为:       

        E\rightarrowTE'        T\rightarrowFT'        F\rightarrowi

        E'\rightarrow+E'       T^\rightarrow*FT'     F\rightarrow(E)

        E'\rightarrowε           T\rightarrowε

(2)判断改写后的文法是否为LL(1)文法:

1、求First集:

        First(E)={ i,( }

        First(E')={ +,ε }

        First(T)={ i,( }

        First(T')={ *,ε }

        First(F)={ i,( }

2、求Follow集:

        Follow(E)={ i,( }

        Follow(E')={ +,ε }
        Follow(T)={ i,( }

        Follow(T')={ *,ε }

        Follow(F)={ i,( }

3、求Select集:      

        SELECT (E→TE') = First(TE') = { i, ( }

        SELECT(E'→+iE') = First (+TE') = { + }

        SELECT(E'→ε) = Follow(E') ={ #, )

        SELECT (T→FT') = First(FT') = { i, (

        SELECT(T'→*FT')= First(*FT') = { * }

        SELECT(T'→ε )=Follow(T')={ +, #, )

        SELECT(F→(E)) = First((E)) = { (

        SELECT(F→i) = First(i) = { i }

4、判定:

        SELECT(E'→+TE') \cap SELECT(E'→ε )= Φ

        SELECT(T'→*FT') \cap SELECT(T'→ε ) = Φ 

        SELECT(F→(E) ) \cap SELECT(F→i) =Φ

(3)构造预测分析表

构造预测分析表M的方法

M是二维数组,元素是M[A,a]

其中A是非终结符,a是终结符或“#”。

若aESELECT(A→a),则把A→a放入M[A,a]中。 (所有空白的M[A,a]表示出错。)

(4)预测分析输入串

  #i+i*I#

二、构造算符优先表步骤 

  • 计算每个V的FirstVt,集和LastVt集
  • 求优先关系​​​​​​​​​​​​​​
    • 求=关系

    • 求<关系:找……aB……, a<FirstVT(B)

    • 求>关系:找……Bc……, LastVT(B)>c

  • 3、构造优先关系表
  • 4、根据优先关系分析句子 

例子:

文法G[E]:

E`→#E#

E→E+T

E→T

T→T*F

T→F

F→P^F

F→P

P→(E)

P→i        

构造算符优先关系表

(1)计算FirstVt集和LastVt集:

(2)计算优先关系 

 (3)构造优先关系表

(4)分析句子 

#i+i# 

未完待续...... 

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

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

相关文章

C#:让不安全代码(unsafe)运行起来

C#:让不安全代码&#xff08;unsafe&#xff09;运行起来 当我们VS中编写unsafe代码时&#xff0c;显示不能运行 这时只需要按照这里的提示&#xff0c;修改我们的属性设置即可 这样就可以运行了

AQS应用之BlockingQueue详解

概要 AQS全称是 AbstractQueuedSynchronizer&#xff0c;中文译为抽象队列式同步器。BlockingQueue&#xff0c;是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类&#xff0c;它的特性是在任意时刻只有一个线程可以进行take或者put操作&#xff0…

近似点梯度法

最优化笔记——Proximal Gradient Method 最优化笔记&#xff0c;主要参考资料为《最优化&#xff1a;建模、算法与理论》 文章目录 最优化笔记——Proximal Gradient Method一、邻近算子&#xff08;1&#xff09;定义 二、近似点梯度法&#xff08;1&#xff09;迭代格式&…

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…

Java诊断利器Arthas

https://arthas.aliyun.com/doc/https://arthas.aliyun.com/doc/ 原理 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 JDK5 的新特性。使用 Instrumentation&#xff0c;开发者可以构建一个独立于应用程序的代理程序&#xff08;Agent&#xff09;&…

three.js实现电子围栏效果(纹理贴图)

three.js实现电子围栏效果&#xff08;纹理贴图&#xff09; 实现步骤 围栏的坐标坐标转换为几何体顶点&#xff0c;uv顶点坐标加载贴图&#xff0c;移动 图例 代码 <template><div class"app"><div ref"canvesRef" class"canvas-…

自带恒压恒流环路的降压型单片车充专用芯片

一、基本概述 XL2009是一款高效降压型DC-DC转换器&#xff0c;固定180KHz开关频率&#xff0c;可以提供最高2.5A输出电流能力&#xff0c;具有低纹波&#xff0c;出色的线性调整率与负载调整率特点。XL2009内置固定频率振荡器与频率补偿电路&#xff0c;简化了电路设计。 PWM …

基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变

Automatic ischemic stroke lesion segmentation from computed tomography perfusion images by image synthesis and attention-based deep neural networks 基于图像合成和注意力的深度神经网络从计算机断层扫描灌注图像中自动分割缺血性脑卒中病变背景贡献实验Comparison o…

EMQX5设置客户端连接认证

文章目录 说明配置客户端连接认证配置1、访问控制-客户端认证-创建2、选择“密码”方式-下一步3、选择“内置数据库”-下一步4、账号类型选择“username”5、密码加密方式选择“plain”6、加盐方式“disable”-创建7、添加客户端连接的账密客户端连接验证 心得 说明 号外&…

旋变检测AD2s1205手册学习笔记

旋变故障检测故障表 信号丢失检测 检测原理&#xff1a;任一旋变输入(正弦或余弦)降至指定的LOS正弦/余弦阈值 以下时&#xff0c;器件会检测到信号丢失(LOS)。AD2S1205通过将 监视信号与固定最小值进行比较检测此点 丢失的效果表现&#xff1a;LOS由DOS和LOT引脚均闩锁为逻辑…

从文本(.txt)文件中读取数据时出现中文乱码

前言 当需要从记事本中读取数据时&#xff0c;发现读取的数据会出现中文乱码&#xff0c;我尝试了C和C读取文件&#xff0c;发现都是这样。 乱码原因 文本文件的保存默认使用UTF-8编码方式&#xff0c;而VS编译器的编码方式是GBK&#xff0c;所以不同的编码方式导致了乱码。…

OCP NVME SSD规范解读-5.命令超时限制-2

Sanitize清除的数据很彻底&#xff0c;对FTL映射表、User Data(包括已经写入NAND和仍在cache里的)、Meta Data、安全密匙、CMB中SQ/CQ相关信息、可能含有用户数据的log等等会全部清除。不过&#xff0c;sanitize操作不会改变RPMB、boot分区、不包含用户数据的cache等内容。 RP…

关于burpsuite对app(移动端)进行抓包的配置

可以使用手机模拟器&#xff0c;我这里以自己手机&#xff08;物理机&#xff09;演示配置过程 如果是使用的模拟器那么肯定和电脑是在同一局域网 如果使用物理机&#xff0c;那么可以通过连接同一WiFi确保在同一局域网环境下 查看电脑内网ip&#xff1a;192.168.1.105 &am…

Android 正圆

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&…

SPL-cmcRVFL+

吐槽 作者未提供代码&#xff0c;还有图1敢再糊点吗&#xff1f;

个性化Python GUI计算器搭建

大家好&#xff0c;本文将介绍在Python中使用Tkinter几分钟内制作自己的全功能GUI计算器。 要完成所提到的功能&#xff0c;除了通常随Python标准库一起安装的Tkinter之外&#xff0c;不需要任何额外的库。 如果使用的是Linux系统&#xff0c;可能需要安装&#xff1a; $ pi…

springboot学生综合测评系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;学生综合测评系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;学校规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

linux 内存管理

地址类型 一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用 的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重 运行的程序可以分配远多于物理上可用的内存; 确实, 即便一个单个进程可拥有一个虚拟 地址空间大于系统的物理内存…

【大厂算法面试冲刺班】day0:数据范围反推时间复杂度

常见算法的时间复杂度 规定n是数组的长度/树或图的节点数 二分查找&#xff1a;O(logn) 双指针/滑动窗口&#xff1a;O(n) DFS/BFS&#xff1a;O(n) 构建前缀和&#xff1a;O(n) 查找前缀和&#xff1a;O(1) 一维动态规划&#xff1a;O(n) 二维动态规划&#xff1a;O(n^2) 回溯…

第7章-第9节-Java中的Stream流(链式调用)

1、什么是Stream流 Lambda表达式&#xff0c;基于Lambda所带来的函数式编程&#xff0c;又引入了一个全新的Stream概念&#xff0c;用于解决集合类库既有的鼻端。 2、案例 假设现在有一个需求&#xff0c; 将list集合中姓张的元素过滤到一个新的集合中&#xff1b;然后将过滤…