【编译原理】总览

news2024/10/6 23:24:11

1 字母表 

字母表:

        用表示,它是一个有穷符号集合

        符号:字母、数字、标点符号...

        例如:二进制字母表为{0,1},ASCII字符集

2 字母表的运算

字母表上的乘积:

        ∑1∑2={ab  | a属于∑1,b属于∑2}

        例如:{0,1}{a,b}={0a,0b,1a,1b}

3 串      

4 串的运算

 5 文法的形式化定义

        G=(VT,VN,P,S)

        VT是终结符集合,用小写字母表示

        VN是非终结符集合,用大写字母表示

        P 是产生式集,产生式的右边的式子是左部字母的“候选式”

        S是开始符号

6 语言的定义

        直接推导:简而言之就是用产生式的右部替换成产生式的左部

有了文法(语言规则),如何判定某一词串是否是该语言的句子:

        1.句子的推导(派生)--从生成语言的角度

        2.句子的归约--从识别语言的角度

        由文法G的开始符号推导出的所有句子构成的集合称为文法G的生成的语言,记为L(G)

7 文法分类

文法分类:

        0型文法

         1型文法

         2型文法

         3型文法 

7.1 0型文法 

        无限制文法/短语结构文法,

        由0型文法G生成的语言称为L(G),0型语言

7.2 1型文法

        也称为上下文有关文法  CSG    

        要求产生式的左部的长度小于右部的长度  

        CSG中不包含空产生式( ε-产生式)

        由CSG产生的语言叫做上下文有关语言(1型语言)

        由上下文有关文法(1型文法)G生成的语言称为L(G)

7.3 2型文法

        也称为上下文无关文法CFG

        要求产生式的左部必须是一个非终结符        

        由CFG产生的语言叫做上下文无关语言(2型语言)

        由上下文无关文法(2型文法)G生成的语言称为L(G)

7.4 3型文法

        正则文法,包含右线性文法(A->wB或A->w)和左线性文法(A->Bw或A->w)

        由3型文法产生的语言叫做正则语言(3型语言)

        由正则文法(3型文法)G生成的语言称为L(G)

        正则文法能描述程序设计语言的多数单词

7.5 四种文法之间的关系

         逐级限制和逐极包含

8 CFG分析树

        (句型的)短语:给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语 。如果子树只有父子两代结点,那么这可子树的边缘称为该句型的一个直接短语。

9 二义性文法

        下面这种情况消除歧义的规则:每个else和最近的尚未匹配的if匹配 

1-9 有关练习 

        1.文法G产生的 句子的全体是该文法的语言

        2.文法G定义的语言是无限集,则文法必然是递归

        3.若一个文法是递归的,则它所产生的语言的句子是无穷多个

        4.文法E->E+E|E*E|i的句子i*i+i*i有5棵不同的语法树

        5.由文法开始符号出发经过若干步(包括0步)推导产生的文法符号序列称为句型

        6.不能由符号集S={a,b}通过正比包运算产生     

        7.把汇编语言程序翻译成机器可执行的目标程序的工作是由汇编完成的。 

        8.编译程序分成若干“遍”,是为了使得程序的结构更为清晰

        9.编译是对高级语言的翻译  

10 词法分析-正则表达式

        正则表达式是一种用来描述正则语言的更紧凑的表示方法.例如r=a(a|b)*

        正则表达式可以由较小的正则表达式按照特定规则递归地构建.每个正则表达式r定义(表示)一个语言,记为L(r).这个语言也是根据r的子表达式所表示的语言递归定义的 

11 词法分析-正则语言

        可以用RE(正规式)定义的语言叫做正则语言或者正则集合

 11 词法分析-正则定义

        d相当于是给每个正则式的命名,以后就用d来代替对应的正则式 

 12 词法分析- 有穷自动机

        这类系统具有一系列离散的输入输出信息有穷数目的内部状态

        系统只需要根据当前所处的状态当前面临的输入信息就可以决定系统的后继行为.每当系统处理了当前的输入后,系统的内部状态也将发生改变

        最长子串匹配原则:当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配

        FA的分类:确定的FA、非确定的FA

12.1 DFA

        用转换图或者转换表表示 

12.2 NFA 

13  词法分析--从正则表达式到有穷自动机

        

例题:

 14 词法分析器--从NFA到DFA

15 识别单词的DFA 

 16 词法分析阶段的错误处理

        

10-16 例题

        词法分析器的输出结果是:单词的种别编码和自身值

        词法分析器能识别出数值常量、过滤源程序中的注释、扫描源程序并识别记号,不能发现括号不匹配

        词法分析器用于识别单词,加工对象是源程序

        语法分析器以单词为单位输入

        语法分析器的任务是:分析单词串是如何构成语句和声名

        不存在这样一些语言,它们能被确定的有穷自动机识别,但不能用正则式表示

        两个有穷自动机等价是指它们所识别的语言相等

        有限状态自动机所能识别的是正规语言

        DFA的成分有:有穷字母表、多个终态的集合、转换函数,不包括多个初始状态的集合

        如果一个正规式所代表的集合是无穷的,则它必含有的运算是闭包运算

        一个正规式不止对应一个确定的有限状态机,一个正规语言可能对应多个正规文法

         翻译程序是把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语 言程序)的程序。

        编译程序是把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器 语言程序)的程序。

        解释程序是把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序 本身。

        词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。

        语法分析器,简称分析器,对单词符号串进行语法分析,识别出各类语法单元,最终判断输入串是否构成语法上正确的“程序”。

文法是描述语言的语法结构的形式规则(即语法规则)。

标识符是指由字母或数字组成的以字母为开头的一个字符串。

实质上,语法树与分析树的最根本区别在于它们的内部节点(包括根结点)
分析树的内部节点是非终结符
语法树的内部节点是操作符(运算符)
语法树省略了反应分析过程的非终结符

抽象语法树:语法树
具体语法树:分析树

17 语法分析--自顶向下分析

        从分析树的顶部(根节点)向底部(叶节点)方向构造分析树,看以看成是从文法符号S推导出词串w的过程

        最左推导:总是选择每个句型的最左非终结符进行替换

        最右推导:总是选择每个句型的最右非终结符进行替换

        在自底向上的分析中,总是采用最左规约的方式,因此把最左规约称为规范规约,而最右推导相应的称为规范推导

        计算机实现自顶向下分析是通过递归下降分析,递归下降分析由一组过程组成,每个过程对应一个非终结符。可能需要回溯,导致效率低下

        预测分析技术递归下降技术的一个特例,通过在输入中向前看固定个数(通常是1)符号来选择正确的A-产生式。预测分析不需要回溯,是一种确定的自顶向下分析方法

18 语法分析--文法转换

        问题1:同一个终结符的多个候选式存在共同前缀,将导致回溯现象

        问题2:左递归文法会使递归下降分析器陷入无限循环

18.1 消除直接左递归

        实际是将左递归变成右递归;消除左递归付出的代价是--引进了一些非终结符和ε产生式

        将A'→αA'|ε换成A→βA' A'→αA'|ε

例子:

        E→E+T|T

        T→T*F|F

        F→(E)|i

消除直接左递归:

上面的文法有两条直接左递归:E→E+T|T和T→T*F|F

E→E+T消除左递归后变成:
E→TE' E'→+TE'|ε
同理,T→T*F|F消除左递归:
T→FT' T'→*FT'|ε

18.2 消除间接左递归

       A→Bc A→d B→aA B→Ab

首先,经过推导(替换),文法变为
A→Abc|aAc|d

消除直接左递归:

A→(aAc|d)A' A'→bcA'|ε

或者

经过推导(替换),文法变为
B→aA|Bcb|db

消除直接左递归:

B→(aA|db)B' B'→cbB'|ε

18.3 提取左因子

        通过改写产生式来推迟决定,等读入足够多的输入,获得足够信息再做出正确的选择

将S → aB1|aB2|aB3|aB4|...|aBn|y变成

S → aS'|y
S'→ B1|B2|B3|...|Bn

例如:

        S →aAd|aBe

        A →c

        B →b

提取左因子之后

        S →aS'

        S' →Ad|Be

        A →c

        B →b

19 语法分析--LL(1) 文法

        S_文法:简单的确定性文法

        预测分析法的工作过程:从文法的开始符号出发,在每一步推导过程中根据当前句型的最左非终结符A和当前输入符号a,选择正确的A-产生式、为保证分析的正确性,选出的候选式必须是一的。

        为满足这个要求,S_文法应该满足:每个产生式的右边都以终结符开始;同一个非终结符的各个候选式的首终结符都不同;S_文法不包含ε产生式

        什么时候使ε产生式:当前非终结符A与当前输入符不匹配时,若存在A →ε,可以通过检查a是否可以出现在A的后面,来决定是否使用A →ε(若文法中无A →ε,则应报错)

        串首终结符:串首的第一个符号,简称首终结符

        LL(1):第一个L表示从左向右扫描,第二个L表示产生最左推导,1表示在每一步中只需要向前看一个输入符号来决定语法分析动作

20 语法分析--构造预测分析表

17-20 例题

        如果文法G是无二义的,则它的任何句子最左推导和最右推导的语法树必定相同

        识别上下文无关语言的自动机是下推自动机        

        一个文法G,若G的LL(1)分析表不含多重定义的条目,则称它是LL(1)文法

        语法分析器的输入是Token序列

        在递归子程序中,若文法存在左递归,则会使分析程序产生无限循环

         LL(1)的1目的是确定使用哪一个产生式进行展开

 21下推自动机

        

22 预测分析中的错误检测

两种情况可以检测到错误:

        1.栈顶的终结符和当前的输入符号不匹配

        2.栈顶非终结符与当前的输入符号在预测分析表对应项目为空

错误恢复:

        恐慌模式

        

重点难点解析

如何实现自顶向下:

        递归下降分析法

什么样的文法能够实现确定的自顶向下分析

        LL(1)文法

自顶向下的步骤:

        消除歧义(二义性),文法改造(消除左递归、提取左因子),LL(1)文法判定(确定性)

无二义性文法的判定:

        对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的,但能给出一组充分条件,满足这组充分条件的文法是无二义性的。(不满足,不一定具有二义性)

如何实现确定的自顶向下分析

        递归的方式:基于预测分析表对递归下降分析法进行扩展 

        非递归的方式      

语法分析的任务:

        识别句子,确定句子的类型。(对于不同类型的语句,后续的语义分析将执行不同的语义动作)

语法分析技术分类(前提是CFG无二义性):

        自顶向下、自底向上

        FIRST、FOLLOW集合均是终结符集

        FOLLOW集、SELECT集合中不能有空,FIRST集可以有   

        在编译时遇到错误时候,应该跳过错误所在的语法单位继续分析下去       

23 语法分析--自底向上的语法分析

        从分析树的底部(叶节点)向顶部(根节点)方向构造分析树,是将输入串规约为开始符号的过程。

        自顶向下的语法分析采用最左推导方式,自底向上的语法分析采用最左规约方式(反向构造最右推导)

        自底向上语法分析发通用框架:移入-规约分析

        栈内符号+剩余输入=规范句型(上图的线隔开的每一块就是一个规范句型)

24 语法分析--LR分析法概述

        LR文法是最大的、可以构造出相应移入-规约的语法分析器的文法类

        L:对输入进行从左到右的扫描

        R:反向构造出一个最右推导序列

        LR(k)分析:需要向前查看k个输入符号的LR分析;K=0和k=1这两种情况最具有实践意义,当省略k时,表示k=1

        自底向上分析的关键问题是:如何正确识别句柄

        句柄是逐步形成的,用“状态”来表示句柄识别的进展程度

25 语法分析--LR分析表

        LR(0)分析

        SLR分析

        LR(1)分析        

        LALR分析

25.1 LR(0)分析

        

25.2 SLR分析

(下面的 T->aBd 是I5) 

25.3 LR(1) 分析

25.4 LALR分析

重难点解析

自顶向下分析:

        通用框架:递归下降分析 

        主要问题:候选式的选择

        关键问题:如何正确选择候选式

自底向上分析:

        通用框架:移入-规约分析

        主要问题:冲突(归约-移进、归约-归约)

        关键问题:寻找句柄

        句柄是最左直接短语

如何正确识别句柄--LR分析法

        基本原理:句柄是逐步形成的,用“状态”表示句柄的拓展程度

        项目描述了句柄识别的状态

        LR分析器基于这样一些状态构造自动机进行句柄的识别

        以等价项目集作为状态构造自动机(等价项目)

        ACTION的s表示移进,r表示归约

26 二义性文法的LR分析

        每个二义性的文法都不是LR的

        某些类型的二义性文法在语言的描述和实现中很有用

        二义性文法的使用:应该保守的使用二义性文法,并且必须在严格控制之下使用,因为稍有不慎就会导致语法分析器所识别的语言出现偏差

27 LR的错误处理 

重点难点

         句柄都是相对于一个句型而言的

        LR(0)分析只关心构成某个成分A的各个自称分是否都已出现(如果出现就归约),但并没有考虑这个成分A是否是待分析句子中的一个成分。事实上,如果A不是待分析句子的一个成分,那么即使把它归约出来也是徒劳的,在后续分析中迟早会发现进行不下去

        因此应该把句柄的识别放在句型这样一个上下文环境中考虑

        受技术限制,考虑正规上下文实现比较困难,因此LR(1)分析只考虑成分A下文的第一个(终结)符号

        各种LR分析表构造方法的不同之处在于归约项目的处理上

        一个LR(1)文法合并同心集后若不是LALR(1)文法,则可能存在归约/归约冲突;同心集合并可能存在归约/归约冲突

        LR(1)文法都是无二义性但可能是左递归        

        在LR(0)的ACTION表中方中,如果某行有Rj,改行必定填满Rj,但是在其他分析法不一定填满

LR(0) 最右推导,不考虑后面输入进来是个啥,只看当前点的位置,所以没有有移进规约冲突和规约规约冲突时候才能用,才能被称为LR(0)文法
SLR(1) 不存在规约、移进冲突
LR(1) 不存在规约、规约冲突
LALR(1) 能合并,不冲突 

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

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

相关文章

MySQL—存储过程(详细介绍与基本语法)

目录 一、存储过程——介绍 (1)基本介绍 (2)基本特点 二、存储过程——语法 (1)基本语法 创建 调用 (2)实操(创建和调用) 1、创建一个叫 "p1&qu…

SAP CO11N BAPI_PRODORDCONF_CREATE_TT连续报工异步更新导致COGI解决方案

背景: 之前上一个项目上有同事碰到一个问题,外围接口数据进入SAP,可能会对同一工单同一工序进行连续多次报工,并且工序控制码配置的是会自动货物移动的,所以正常来说,调用完BAPI完之后除了报工数量会更新之…

indexedDB---浏览器本地数据库实现增删改查

关于indexedDB indexedDB的基本使用,可以参考:indexedDB---掌握浏览器内建数据库的基本用法_indexdb浏览器使用-CSDN博客 indexedDB是浏览器本地数据库,既然是数据库就能够实现增删改查,了解了indexedDB的基本使用后&#xff0c…

怎么把不同的文件做成二维码?多种文件类型在线生码的制作方法

扫码来展示文件是现在很多场景下会使用的一种内容展示方法,这种方式能够简化其他人获取文件的流程,从而提升文件传播的效率,用户可以存储二维码,随时扫码查看文件内容。文件生成二维码支持多种类型的文件使用,比如ppt、…

Element 页面滚动表头置顶

在开发后台管理系统时,表格是最常用的一个组件,为了看数据方便,时常需要固定表头。 如果页面基本只有一个表格区域,我们可以根据屏幕的高度动态的计算出一个值,给表格设定一个固定高度,这样表头就可以固定…

Transformer实战——摘要生成

本文借助Huggingface Tranformer库完成一个摘要生成任务,参考自https://github.com/datawhalechina/learn-nlp-with-transformers/,在本文,将展示如何使用简单的加载数据集,同时针对相应的任务使用transformer中的Trainer接口对模…

司美格鲁肽在中国获批!深度解析报告附上

在中国,肥胖问题日益严重,但有效的治疗方法却相对匮乏。然而,这一现状随着国家药品监督管理局(NMPA)对诺和诺德公司研发的司美格鲁肽注射液(商品名:诺和盈)的批准而得到改变。6月25日…

hadoop离线与实时的电影推荐系统-计算机毕业设计源码10338

摘 要 随着互联网与移动互联网迅速普及,网络上的电影娱乐信息数量相当庞大,人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂,己有的相似度计算方法与推荐算法都各…

文件管理器加载缓慢-禁用文件类型自动发现功能

文件管理器加载缓慢-禁用文件类型自动发现功能 右键“Shell”项,选择新建“字符串值” “FolderType”,数值为 NotSpecified。

Python数据分析-糖尿病数据集数据分析

一、研究背景介绍 糖尿病是美国最普遍的慢性病之一,每年影响数百万美国人,并对经济造成重大的经济负担。糖尿病是一种严重的慢性疾病,其中个体失去有效调节血液中葡萄糖水平的能力,并可能导致生活质量和预期寿命下降。。。。糖尿…

【网络安全学习】漏洞利用:-01- BurpSuite的基础设置使用

Burp Suite是一款集成了多种功能的Web应用渗透测试工具,可以帮助渗透测试人员对Web应用进行拦截、分析、修改、重放、扫描、爆破、模糊测试等操作,从而发现和利用Web应用中的漏洞。可以说Burp Suite是每个安全从业人员必须学会使用的安全渗透测试工具。 …

服务器硬件以及RAID配置

目录 一、RAID磁盘阵列原理(嘎嘎重要) 1、RAID的概述 2、常用的RAID 2.1、RAID 0 2.2、RAID 1 2.3、RAID 5 2.5、RAID 10 3、阵列卡介绍 二、建立软件RAID磁盘阵列 1、添加硬盘 2、使用fdisk分区,类型为fd 3、mdata命令使用参数 …

今日好料(中国农业银行研发中心DevOps规划与实践)

今日好料(中国农业银行研发中心DevOps规划与实践) 在数字化转型的背景下,企业面临着更加复杂和多变的市场环境,对IT系统的敏捷性和稳定性提出了更高的要求。作为金融行业的领军企业,中国农业银行在其研发中心推进DevO…

eXosip协议栈构造Info应答并发送

最近在开发GB28181视频监控平台,对于录像的暂停、倍速等控制是通过INFO消息完成的,但是eXosip协议栈没有明确说明该如何去构造INFO消息的应答。通过对源代码的解读,是使用eXosip_call_send_answer接口去构造,参考了一些博客&#…

AI大模型训练过程

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 大模型训练概述 AI大模型训练是指在海量数据中,对拥有数百万至数千万参数及深层次神经网络结构的模型进行训练的过程。这类大模型因其庞大的参数规模和复杂的网…

【云原生】深入理解Pod的使用进行管理

深入理解Pod 文章目录 深入理解Pod一、介绍Pod1.1、什么是Pod1.2、Pod的特点1.3、Pod的用途1.4、Pod网络1.5、Pod存储1.6、Pod的工作方式 二、创建Pod2.1、命令行创建Pod2.2、资源清单创建Pod2.2.1、镜像拉取策略2.2.2、Pod重启策略2.2.3、部署资源2.2.4、删除资源 三、静态Pod…

大厂面试经验分享,小白如何在面试中脱颖而出

前言 毕业季,对于每一位即将步入社会的学子来说,都是一个充满挑战和机遇的时刻。作为我的一位好朋友也是好学长,他刚刚在一家顶尖科技公司斩获了他梦寐以求的职位。他深知求职路上的艰辛,因此打算把自己的经验分享给大家&#xf…

项目实战系列三: 家居购项目 第六部分

文章目录 🌈Ajax检验注册名🌈Ajax添加购物车🌈上传与更新家居图片🌈作业布置🍍会员登陆后不能访问后台管理🍍解决图片冗余问题🍍分页导航完善 🌈Ajax检验注册名 需求分析 注册会员时…

flask水质监测预警系统-计算机毕业设计源码10148

摘 要 近些年来,对河道水位进行实时、准确的监测越来越受到广大人民群众的重视。然而要建立一个稳定的、可靠地、准确的城市河道水位远程监测系统,就必须要解决由人工监测向自动化监测的转变,使用新科技来进行设计。水质监测预警系统是以实际…

构筑卓越:建筑企业如何通过GB/T 50430:2017认证铸就质量管理基石

在建筑业这片充满挑战和机遇的战场上,企业资质犹如一面旗帜,标志着企业的实力和信誉。GB/T 50430:2017《工程建设施工企业质量管理规范》的实施,成为了建筑企业提高管理水平、赢得市场竞争的重要武器。 GB/T 50430:2017的战略意义 GB/T 5043…