编译原理2

news2024/10/7 18:30:45

推导和短语

推导

推导过程中,每一步推导都是对句型的 最右非终结符 进行替换,最右推导(规范推导)

短语

用 β 替换 A,则 β 就是 关于A 的一个短语

直接短语是短语范围内的一步推导;

直接短语可能不唯一,但 最左直接短语 唯一确定,被称为句柄; 

例:通过推导过程找出短语和句柄

 素短语
(1) 是短语
(2) 至少包含一个终结符
(3) 不再包含其它素短语

找素短语的方法有:

找短语中最短的判断是否有终结符,若有则该短语是素短语;然后判断其他短语有是否有该素短语,若有,则其他短语不是素短语,若没有,则进一步判断是否有终结符,若有,则是,反之则不是;

以上例题中,a 和 Sb 是素短语;

语法树

基本特点和定义

1)根结点是文法开始符号;

2)内部结点一定是非终结符;

3)若某结点为ε,则该结点是叶子结点,并且其父结点无其他子结点;

根据一棵语法树无法判断是 最右推导 还是 最左推导

短语:每个子树的叶子结点组成的符号串;

直接短语:简单子树(单层分支的子树)的 叶子结点 组成的字符串是相对于简单子树根的直接短语

句柄:最左简单子树的 叶子结点组成的字符串

素短语:子树的叶子节点组成的字符串包含终结符,且在子树中不再有包含终结符的最小子树


证明某文法二义性?

找出二义性的句子 / 句型(若某个句子能够找到两种不同的最左/右推导或者存在两棵不同的语法树)


自顶向下的语法分析

1.不确定的自顶向下语法分析

   根据多个公共因子的候选式进行不确定的试探,出现错误会回溯,效率低

2.确定的自顶向下语法分析--消除左递归 消除回溯

   1) 递归下降分析法;

   2)LL(1)分析法;

消除左递归(直接左递归)
将产生式 A → Aα | β   改写为: A → βA'       A' → α A' | ε
其中, A' 新引入的非终结符 ε 不可缺少,否则推导过程无 法结束;
例:含有直接左递归的表达式文法G[E]为
G[E]:
E → E+T | T  - -存在左递归
T → T*F | F   - -存在左递归
F → (E) | i
经过消去直接左递归后得到文法 G'[E]
E → TE'
E' → +TE' | ε
T → FT'
T' → *FT' | ε
F → (E) | i
A → Aα 1 | Aα 2 | … | Aα m | β 1 | β 2 | … | β n 消除其直接左递归如下:
A β 1 A' β 2 A' ∣…∣ β n A'
A' α 1 A' α 2 A' ∣…∣ α m A' ε
例如,对产生式 E →E+T | E -T | T ,消除直接左递归后为
E TE'
E' +TE' | - TE' | ε
消除间接左递归
G[S]: S → Q c | c
Q → R b | b
R → S a | a
中的 S Q R 都具有间接左递归
S Qc Rbc Sabc
通过分配律将间接左递归化作直接左递归:
Q →  ( Sa | a ) b | b 展开后: Q → Sab | ab | b
再将改变后 Q 的产生式代入到 S 的产生式中并按分配律展开得
S →  ( Sab | ab | b ) c | c
展开后: S →  Sabc | abc | bc | c   
消除直接左递归 S->abcS' | bcS' | cS'    S'->abcS' | ε  (略有疑问)
回溯

候选式中存在公共的左因子;

A → δβ1 | δβ2 | … | δβi | βi+1 | … | βj 消除回溯,经过反复提取左因子,就能把每个非终结符(包括新引进者)的所有候选首字符集变为两两不相交(即不含公共左因子):

A δA' β i+1 ∣…∣ β j
A' β 1 ∣…∣ β i
例:对文法 G[A]: A →  aAB | a | b 提取公共左因子后的文法 G' [A] ?
G ' [A]: A →  aA ' | b
A' → AB | ε
递归下降分析器 

要求:消除左递归; 消除回溯; 

递归子程序法对应的是最左推导过程;

LL(1) 分析法

L :    自顶向下分析是从左向右扫描字符串的;

L :    分析过程用最左推导;

(1):   只需要向右查看一个符号就可决定如何推导;

LL(1)分析器是由 LL(1)分析表、分析栈和一个控制程序组成;

分析栈要求逆序入栈

First集合是 针对第一个位置的终结符 ; 并且是针对产生式的左端非终结符考察的;

Follow集合是针对产生式的右端非终结符考察的;

例1:

例2:修正等价的LL(1)文法

注:S的 first 集只有 i  而无分号 

 例3:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust学习笔记007:Trait --- Rust的“接口”

Trait 在Rust中,Trait(特质)是一种定义方法集合的机制,类似于其他编程语言中的接口(java)或抽象类(c的虚函数)。 。Trait 告诉 Rust 编译器: 某种类型具有哪些并且可以与其它类型共享的功能Trait:抽象的…

[ROS 系列学习教程] 建模与仿真 - 使用 ros_control 控制差速轮式机器人

ROS 系列学习教程(总目录) 本文目录 一、差速轮式机器人二、差速驱动机器人运动学模型三、对外接口3.1 输入接口3.2 输出接口 四、控制器参数五、配置控制器参数六、编写硬件抽象接口七、控制机器人移动八、源码 ros_control 提供了多种控制器,其中 diff_drive_cont…

Datawhale - 角色要素提取竞赛

文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1:下载相关库Step2:配置导入Step3:模型测试Step4:数据读取Step5:Prompt设…

工业 web4.0UI 风格品质卓越

工业 web4.0UI 风格品质卓越

【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现

原题链接 题目描述 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示例 1: 输入: nums [4,2,9,5,3] 输出: 3 解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答…

WPF自定义模板--Button

属性&#xff1a; TemplateBinding&#xff1a;用于在ControlTemplate中绑定到控件的属性&#xff0c;例如Background、BorderBrush等。TargetType&#xff1a;指定该模板应用于哪种控件类型。在这个例子中&#xff0c;是Button。 标准的控件模板代码&#xff1a; <Style…

线性代数大题细节。

4.4 方程组解的结构&#xff08;二&#xff09;_哔哩哔哩_bilibili

eNSP中WLAN的配置和使用

一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…

vue3 window.location 获取正在访问的地址,也可以通过useRoute来获取相关信息。

1、一般我们在开发的vue3项目的时候&#xff0c;地址是这样&#xff1a;http://192.168.1.101:3100/#/login 然后我们在布署完成以后一般是这样https://xxx.yyyyy.com/uusys/#/login 其实xxx可以是www&#xff0c;也可以是一个二级域名 yyyyy.com是域名&#xff0c;uusys一般…

家政小程序的开发:打造现代式便捷家庭服务

随着现代生活节奏的加快&#xff0c;人们越来越注重生活品质与便利性。在这样的背景下&#xff0c;家政服务市场迅速崛起&#xff0c;成为许多家庭日常生活中不可或缺的一部分。然而&#xff0c;传统的家政服务往往存在信息不对称、服务效率低下等问题。为了解决这些问题&#…

Windows编程上

Windows编程[上] 一、Windows API1.控制台大小设置1.1 GetStdHandle1.2 SetConsoleWindowInfo1.3 SetConsoleScreenBufferSize1.4 SetConsoleTitle1.5 封装为Innks 2.控制台字体设置以及光标调整2.1 GetConsoleCursorInfo2.2 SetConsoleCursorPosition2.3 GetCurrentConsoleFon…

elementPlus自定义el-select下拉样式

如何在f12元素选择器上找到下拉div呢&#xff1f; 给el-select添加 :popper-append-to-body"false" 即可&#xff0c;这样就可以将下拉框添加到body元素中去&#xff0c;否则当我们失去焦点&#xff0c;下拉就消失了&#xff0c;在元素中找不到el-select。剩下就可以…

华硕魔霸5原装Windows10原厂系统 工厂模式 带ASUS Recovery恢复功能

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

系统架构设计师 - 计算机网络(2)

计算机网络 计算机网络IPv6 ★概念IPv6 的优势IPv6 数据格式IPv6 地址应用IPv6 自动 IP 地址配置&#xff08;了解&#xff09;IPv4/IPv6过渡技术 网络接入&#xff08;了解&#xff09;综合布线系统 ★物联网&#xff08;了解&#xff09;概念分层 云计算&#xff08;了解&…

顺序串算法库构建

学习贺利坚老师顺序串算法库 数据结构之自建算法库——顺序串_创建顺序串s1,创建顺序串s2-CSDN博客 本人详细解析博客 串的概念及操作_串的基本操作-CSDN博客 版本更新日志 V1.0: 在贺利坚老师算法库指导下, 结合本人详细解析博客思路基础上,进行测试, 加入异常弹出信息 v1.0补…

将一个程序设置为开机启动【win11】

Windows 在 Windows 系统中&#xff0c;可以通过在 “启动” 文件夹中放置程序的快捷方式来实现开机启动。 按照以下步骤操作&#xff1a; 按 Win R 打开 “运行” 对话框&#xff0c;输入 shell:startup&#xff0c;然后按回车。这将打开 “启动” 文件夹。 找到你想设置为…

动态规划——打家劫舍(C++)

好像&#xff0c;自己读的书确实有点少了。 ——2024年7月2日 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连…

Python特征工程 — 1.2 特征分箱

目录 1 什么是特征分箱 2 分箱的重要性及其优势 3 有监督分箱 3.1卡方分箱原理 3.2 决策树分箱 4 无监督分箱 4.1 等距分箱 4.2 等频分箱 4.3 分位数分箱 实验数据&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1yT1ct_ZM5uFLgcYsaBxnHg?pwdczum 提取码&…

JAVA期末速成库(11)第十二章

一、习题介绍 第十二章 Check Point&#xff1a;P454 12.1&#xff0c;12.9&#xff0c;12.10&#xff0c;12,12 二、习题及答案 12.1 What is the advantage of using exception handling? 12.1使用异常处理的优势是什么? 答:使用异常处理有以下优势&#xff1a; 1. 提高…

浙江建筑安全员A证2024年最新考试题库练习

46.总承包单位依法将建设工程分包给其他单位的&#xff0c;分包合同中应当明确各自的安全生产方面的权利、义务。总承包单位对分包工程的安全生产承担&#xff08;&#xff09;责任。 A.全部 B.主要 C.部分 D.连带 答案&#xff1a;D 47.实施总承报的建设工程发生事故&…