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

一、预测分析方法步骤

  • 提取左公因子,消除左递归
  • 判断文法是否为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# 

未完待续...... 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】不一样的Ansible(一)

不一样的Ansible——进阶学习 前言正文概念Ansible CorePlugins和Modules 插件插件类型编写自定义插件基本要求插件选项文档标准编写插件 添加一个本地插件注册为内置插件指定插件目录 其他一些技巧更改Strategy 结语 前言 Ansible 是一个极其简单的 IT 自动化引擎&#xff0c…

ros gazebo机械臂仿真,手动控制与MoveIt自动控制

本文总结归纳古月居胡春旭ros机械臂教程&#xff0c;给出了一些error的解决方法&#xff0c;补充了通过python运行moveit。十分建议去看github huchunxu源代码的repository。 创建机械臂的xacro模型 首先创建一个工作空间&#xff0c;在工作空间中创建arm_description功能包。…

GitHub 一周热点汇总 第4期 (2024/01/01-01/06)

GitHub一周热点汇总第四期 (2023/12/24-12/30)&#xff0c;梳理每周热门的GitHub项目&#xff0c;了解热点技术趋势&#xff0c;掌握前沿科技方向&#xff0c;发掘更多商机。2024年到了&#xff0c;希望所有的朋友们都能万事顺遂。 说明一下&#xff0c;有时候本周的热点项目会…

【HarmonyOS4.0】第三篇-类web开发模式

【HarmonyOS4.0】第三篇-类web开发模式 一、鸿蒙介绍 课程核心 为什么我们需要学习鸿蒙&#xff1f; 哪些人适合直接转鸿蒙&#xff1f; 鸿蒙系统优势是什么&#xff1f; 课程内容 (1)为什么要学习鸿蒙 从行情出发&#xff1a; 美国商务部长访问中国&#xff0c;2023年…

【Java并发】深入浅出 synchronized关键词原理-下

上一篇文章&#xff0c;简要介绍了syn的基本用法和monter对象的结构&#xff0c;本篇主要深入理解&#xff0c;偏向锁、轻量级锁、重量级锁的本质。 对象内存布局 Hotspot虚拟机中&#xff0c;对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据 (Instance Da…

【Sublime Text】| 02——常用插件安装及配置

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 1. 汉化2. 更换颜色主题3. 更改编码插件—ConvertToUTF84. 对齐插件—Alignment5. 括号高亮插件—BracketHighligh…

win11修改本地hosts,自定义域名

目录 &#x1f9c8;1.打开指定目录 &#x1f95a;2.粘贴至桌面 &#x1f373;3.添加自己的域名和对应的ip地址 &#x1f37f;4.替换原来的hosts文件 1.打开指定目录&#x1f9c2;&#x1f9c2; 在C盘下打开 --------C:\Windows\System32\drivers\etc&#xff0c;找到hos…

众和策略:沪指跌0.91%险守2900点,半导体、金融等板块走低

8日早盘&#xff0c;两市股指低开低走&#xff0c;沪指一度失守2900点&#xff0c;深成指、创业板指跌约1%&#xff0c;科创50指数创前史新低。 到午间收盘&#xff0c;沪指跌0.91%报2902.4点&#xff0c;深成指跌1.17%&#xff0c;创业板指跌0.99%&#xff0c;科创50指数跌超…

vue3中使用elementplus中的el-tree-select,自定义显示名称label

<el-tree-select v-model"addPval" node-key"id" :data"menulists" :render-after-expand"false" :props"menuProps" /> <el-divider />let menuProps {//自定义labellabel: (data: { name: any; }) > {ret…

程序媛的mac修炼手册-- 终端(terminal)常用命令

「终端&#xff08;terminal&#xff09;」相当于macOS的一个 App &#xff0c;它的特殊之处是&#xff0c;它是管理其它App的App&#xff0c;操作主要通过命令行界面 (CLI) 。 相比于我们日常熟悉的用户界面&#xff08;User Interface&#xff0c;UI&#xff09;&#xff0c…

vue3 封裝一个常用固定按钮组件(添加、上传、下载、删除)

效果图 这个组件只有四个按钮&#xff0c;添加&#xff0c;上传、下载、删除&#xff0c;其中删除按钮的颜色默认是灰色&#xff0c;当表格有数据选中时再变成红色 实现 组件代码 <script lang"ts" setup> import { Icon } from /components/Icon/index im…

Qt应用-实现图像截取功能类似QQ上传头像截取功能

本文演示利用Qt实现图像截取功能类似QQ上传头像截取功能。 效果如下,通过移动中间的裁剪区域可以获得一张裁剪后的图片。 目录

OpenAI ChatGPT-4开发笔记2024-02:Chat之text generation之completions

API而已 大模型封装在库里&#xff0c;库放在服务器上&#xff0c;服务器放在微软的云上。我们能做的&#xff0c;仅仅是通过API这个小小的缝隙&#xff0c;窥探ai的奥妙。从程序员的角度而言&#xff0c;水平的高低&#xff0c;就体现在对openai的这几个api的理解程度上。 申…

【unity】基于Obi的绳长动态修改(ObiRopeCursor)

文章目录 一、在运行时改变绳子长度:ObiRopeCursor1.1 Cursor Mu&#xff08;光标μ&#xff09;1.2 Source Mu&#xff08;源μ&#xff09;1.3 Direction&#xff08;方向&#xff09; 一、在运行时改变绳子长度:ObiRopeCursor Obi提供了一个非常通用的组件来在运行时修改绳…

Vue3-39-路由-导航异常的检测 afterEatch 与 编程式导航之后的订阅动作

说明 本文主要是介绍一下 路由的后置守卫 afterEatch 的一个重要的作用 &#xff1a; 就是检测路由异常信息。 它的实现方式是 通过第三个参数来返回的。 而且&#xff0c;它的异常检测是全局的。导航的异常有以下三种类型&#xff1a; aborted : 在导航守卫中 被拦截并返回了…

苹果Find My查找芯片-伦茨科技ST17H6x支持苹果Find My认证

Apple「查找」Find My可通过庞大的“Apple Find My Network” 实现全球查找功能。无数iOS、iPadOS、macOS、watchOS激活设备与Find My 设备结合在一起&#xff0c;无需连接到Wi-Fi或者蜂窝网络&#xff0c;用户也可以给遗失的设备定位。对于任何iOS、iPadOS、macOS、watchOS设备…

Plantuml之nwdiag网络图语法介绍(二十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

算法第十一天-组合总和Ⅳ

组合总和Ⅳ 题目要求 解题思路 来自[负雪明烛] 题目有个明显的提示&#xff1a;求组合的个数&#xff0c;而不是每个组合。如果是要求出每个组合&#xff0c;那么必须使用回溯法&#xff0c;保存所有路径。但是如果是组合个数&#xff0c;一般都应该想到[动态规划]的解法。 直…

*4.3 CUDA MEMORY TYPES

CUDA设备包含几种类型的内存&#xff0c;可以帮助程序员提高计算到全局内存的访问率&#xff0c;从而实现高执行速度。图4.6显示了这些CUDA设备内存。全局内存和恒定内存出现在图片的底部。主机可以通过调用API函数来写入&#xff08;W&#xff09;和读取&#xff08;R&#xf…

Python私有变量的定义与访问

class Student():def __init__(self, name, age):self.name nameself.age ageself.__score 0def marking(self, score):if score < 0:return 分数不能为0self.__score scoreprint(self.name 同学本次得分是: str(self.__score)) def __talk(self): # 私有的类可通过在…