编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)

简介: 编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)

需要原卷和答案请点赞关注收藏后评论区留言私信~~~

下面对编译原理中一些常见的概念以及算法小题的讲解,这部分可能单独出题考试,也有可能混在大题中出现

一、编译器结构

题目如下

The phases of a complier for statement “b=a+i*2” are described in the following figure 1. Please give the meanings of A, B, C, D, E in the Figure 1

一个编译器大体上有以下结构:词法分析-语法分析-语义分析-中间代码生成-中间代码优化-目标代码生成-目标代码优化等步骤

答案如下

A: Scanner

B:

C: Semantic analyzer

D: IR Generation

E: Code generator

二、正则表达式的应用

Alphabet∑={a,b}, write a regular expression that will generates the set of all strings over this alphabet that contain an even number of a’s.

答案如下

R.E.: ((ab*a)|b)*

三、消除左递归与左公因子

Rewrite the following grammar G(S) to remove left recursion and left factor.

A → bAbB | bABb | aB

B → BaA | ab | ba

上面第一条式子中明显有左公因子bA,第二条式子中有左递归B,消除后结果如下

tips:自顶向下分析的LL(1)文法不能分析带有左公因子和左递归的语法,所有要先进行消除

四、为输入串构造左右推导

Consider the following grammar for Boolean expressions:

E→T+E| T-E|T,   T→1|2|3|4|5|6|7|8|9|0

Write a rightmost derivation for the string: 2+3-4

最右推导就是每次替换最右边的非终结符,结果如下

五、找出句型的句柄

来找句柄之前,我们需要介绍以下概念

1:短语 在为输入串构造的语法树中所有子树的叶子节点为短语

2:直接短语  短语中只有父子两代节点,即高度为2的短语

3:句柄 句柄为语法树中最左的直接短语

Given grammar G[E]:

E→E+E | T

T→T*F | F

F→i | (E)

Write out the handle of the sentential form T*F+i

该句型句柄如下

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
网络安全
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
1496 1
|
Rust Oracle Java
针对 Minecraft 的 JVM 调优
Java 和 JVM 一直是一个很庞大的系统。Java 语言在 JVM 的基础上隐藏了很多细节,从而让程序员更关注功能而非性能。而 JVM 的作用则是对程序员编写的代码进行优化,因此 JVM 中引入了垃圾回收、即时编译等一系列先进而复杂的子系统。这种复杂度也使得 JVM 的性能并不像 C++、Go 或者 Rust 这样值观:你以为一段循环即可测量某个操作的性能,实际上这个操作可能随着循环的进行被即时编译机制优化。
6971 2
|
4月前
|
人工智能 自然语言处理 数据可视化
阿里云万小智完整快速建站实操步骤(小白零代码版)
万小智是阿里云基于通义大模型打造的企业级AI建站平台,专为中小企业及创业者设计,无需代码与设计基础,1分钟生成适配多端的网站,支持智能客服、SEO优化与一键发布,助力零门槛快速上线!
1164 0
|
6月前
|
编解码 Java 关系型数据库
SpringBoot 集成阿里云直播 + 点播全实战:推流、拉流、转码、回放一站式落地
本文详解阿里云直播与点播的集成实践,涵盖核心原理(推流/拉流链路、录制转点播联动)、环境配置、SpringBoot项目搭建(Maven依赖、数据库设计、鉴权工具)、全模块代码实现(直播流管理、点播上传播放、事件回调处理)及常见问题排查,助力快速构建稳定音视频应用。
1110 6
|
API Windows
Window本地部署ChatTTS
这篇文章详细介绍了如何在Windows系统上本地部署ChatTTS,实现将文本转化为高质量的语音输出,并提供了简便的部署方法和使用指南。
2030 2
Window本地部署ChatTTS
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
7310 85
终极 Nginx 配置指南(全网最详细)
|
人工智能 物联网 开发者
Oumi:开源的AI模型一站式开发平台,涵盖训练、评估和部署模型的综合性平台
Oumi 是一个完全开源的 AI 平台,支持从 1000 万到 4050 亿参数的模型训练,涵盖文本和多模态模型,提供零样板代码开发体验。
2045 43
Oumi:开源的AI模型一站式开发平台,涵盖训练、评估和部署模型的综合性平台
|
编译器
区分LR(0),SLR(1),LR(1)和LALR(1)
区分LR(0),SLR(1),LR(1)和LALR(1)
2992 1
|
SQL 数据安全/隐私保护 索引
SQL语句速成
《SQL语句速成》由blue编写,涵盖建表、插入、查询、更新、删除、视图创建、权限管理及索引操作等核心内容。通过具体示例介绍SQL基本语法和常用聚合函数,帮助读者快速掌握SQL编程技巧。发布于2024年7月19日。
459 7