![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
文章平均质量分 73
驼驼学编程
在校大学生,记录一些日常学习内容
展开
-
有限自动机的等价性(包括NFA转为DFA和DFA的化简)
目录1.DFA和NFA的等价性2.DFA与NFA等价性证明3.DFA的化简1.DFA和NFA的等价性(1)对于每个NFA M存在一个DFA M’,使得L(M)=L(M’)1.等价性证明2.NFA的确定化思路:NFA和DFA的差别 NFA DFA 初始状态 不唯一 唯一 弧上的标记 字(单字符字,ε) 字符 转换关系 非确定 确定 我先来简单的给大家解释一下他的定义将NFA转化为DFA...原创 2022-04-29 20:12:08 · 3516 阅读 · 2 评论 -
LL(1)文法的判定及证明
《编译原理》是同学们在大学期间普遍认为比较晦涩难懂的一门课程,笔者认为其原因主要是其中的逻辑性较强,推理过程较为复杂,导致同学们听的是云里雾里。今天给同学们带来的是编译原理中非常重要的一章——自顶向下语法分析方法,这一章有一个考试必考的知识点,那就是LL(1)文法的判断及证明,通俗的来说就是判断一个文法是否为LL(1)文法,笔者给同学们总结了一下解题过程。(1)求出能推出ε的非终结符这一块书上还是讲的十分清晰的,我就直接附图了,大家跟着书上的思路一步一步进行推导,应该没有太大的问题。原创 2022-04-10 17:39:42 · 8532 阅读 · 7 评论 -
如何构造LL(1)文法预测分析表
这类题型也经常在考试中出现,一般是与判断是否为LL(1)文法放在一起进行考察。这类题目该怎么去做呢?(1)求出每个非终结符的FIRST集和FOLLOW集。(在上一篇文章中已经详细介绍)(2)构造预测分析表:横坐标是所有的非终结符,纵坐标是所有的终结符。(3)使用推导式填表具体规则:以对文法G的每个推导式A->α执行步骤为例(1)对每个α ∈FIRST(α),把A->α加入到M[A,a](2)若ε∈FIRST(α),则对任何b∈FOLLOW(A),把A->ε加至M[A原创 2022-04-11 20:43:18 · 9865 阅读 · 4 评论 -
消除文法的左递归和回溯
1.自上而下分析(1)面临的问题文法左递归问题回溯问题(2)构造不带回溯的自上而下分析算法消除文法的左递归性消除回溯(3)识别左递归消除左递归分为消除直接左递归和间接左递归,间接左递归有的时候还要转化为直接左递归进行运算,我们如何去辨别他们是否为直接左递归或者是间接左递归呢直接左递归:P->Pα|β(β不以P开头)间接左递归:例如S→Qc|c,Q→Rb|b,R→Sa|a2.直接左递归的消除3.直接左递归例题根据左递归定义..原创 2022-04-30 15:24:11 · 7770 阅读 · 3 评论 -
FIRSTVT和LASTVT的计算(很长但是很详细)
目录1.定义2.定义剖析与理解(1)FIRSTVT(P)(2)LASTVT(P)3.例题演示(1)FIRSTVT的详细计算过程1.第一遍扫描2.第二遍扫描3.第三遍扫描4.第四遍扫描5.第五遍扫描(2)LASTVT的详细计算过程1.定义大家看完定义之后是不是觉得有点懵,这很正常,我们要利用定义做题的第一步就是理解定义。笔者在这里先给大家抛个引子,我认为它们的计算与FOLLOW集的计算有类似之处(FOLLOW集的计算我在之...原创 2022-04-14 20:47:36 · 13281 阅读 · 4 评论 -
LR分析法
1.基本概念(1)LR分析器结构(2)LR分析表大家重点关注一下这个LR分析表,我们后续的分析都将围绕这个LR分析表展开原创 2022-04-22 00:15:00 · 5416 阅读 · 4 评论 -
短语,直接短语,素短语与最左素短语(语法树求法)
目录1.基本概念(1)短语和直接短语:(2)素短语:(3)最左素短语:2.判断方法3.例题演示1.基本概念(1)短语和直接短语:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,当子树中不包含其他更小的子树时,该子数叶结点所组成的字符串就是该句型的直接(简单)短语。(2)素短语:它是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语的短语。而一个算符优先文法G的...原创 2022-04-17 21:18:15 · 11826 阅读 · 6 评论 -
构造优先关系表
在自底向下优先分析一章中有一个非常重要的题型——构造优先关系表,接下来我们就来看看具体是怎么操作的。注意:进行这一步的前提是要知道FIRSTVT和LASTVT的求法,大家可以看我之前写的博客:FIRSTVT和LASTVT的计算(很长但是很详细)_驼驼学编程的博客-CSDN博客1.基本概念大家可能不太好理解,我们把它转化成伪代码的形式供同学们理解。2.伪代码呈现大伙可能看的还是云里雾里,我来和大家解释一下。给大家举一个例子:P->ABC我们来看ABC三者的关系,.原创 2022-04-16 21:09:29 · 7935 阅读 · 1 评论 -
句柄和规范规约(超详细)
1.基本概念要想理解句柄和规范规约,我们要先来看看这一章的主题——自下而上分析法,从主题入手更加容易理解句柄和规范规约的意义。(1)自下而上分析法1.算符优先分析法这个知识点已经在之前的博客详细说明了,大家如果不太理解,可以去看一看构造优先关系表_驼驼学编程的博客-CSDN博客2.LR分析法(2)句柄 句型的句柄是该句型中和一个产生式右部匹配的子串并把它规约成该产生式左部的非终结符代表了最右推导过程中的逆过程的一步。 句柄的右边仅仅含有终结符或者空符。..原创 2022-04-19 00:03:13 · 8000 阅读 · 1 评论 -
构造LR(0)分析表
1.什么叫LR(0)文法假若一个文法G的拓广文法G'的活前缀识别自动机中的每个状态(项目集)不存在下述情况︰(1)既含移进项目又含归约项目;(2)含有多个归约项目;则称G是一个LR(0)文法。2.如何构造LR(0)分析表(1)令每个项目集I的下标k作为分析器的状态,包含项目S'→·S的集合I的下标k为分析器的初态。(2)构造LR(O)分析表的ACTION和GOTO子表3.LR(0)分析表的ACTION和GOTO子表构造4.例题分析(1)状态0..原创 2022-04-26 00:15:00 · 10227 阅读 · 3 评论 -
两种构造识别活前缀的DFA方法
1.基本概念(1)前文回顾在上一篇文章中(https://blog.csdn.net/qq_55168827/article/details/124329569)我们简单的介绍了我们该如何的去构造活前缀的DFA,但是只讲了概念,很多同学都还是一头雾水,在这篇文章中我将会详细的介绍如何的去构造活前缀的DFA。(2)项目->NFA->DFA大家可能看这个图有点懵,不知道是怎么来的,其实这个图是将项目转化为左边的NFA,再根据第二章NFA和DFA转化的知识转化为了左边的DFA.原创 2022-04-24 00:21:05 · 7769 阅读 · 1 评论 -
活前缀及构造活前缀的DFA
1.引入背景上一讲我们讲了LR分析法和LR分析器的性质,我们知道了在规范规约过程中,栈内的符号串需要满足一定的条件,见下图:LR分析器的工作过程实际上就是逐步产生规范句型的活前缀。如何保证栈内的符号串永远不会出现在句柄之后呢,于是我们引入了字的活前缀。2.基本定义(1)字的前缀是指字的任意首部,如字ab的前缀有ε(ε是任何字的前缀),a ,ab ,abc。(2)活前缀可能大家看的有点懵,还是不理解什么叫做活前缀。其实通俗一点来讲,活前缀就是句柄的子集。...原创 2022-04-23 00:15:00 · 15641 阅读 · 3 评论 -
SLR(1)分析法
1.基本概念(1)按上述方法构造出的ACTION与GOTO表如果不含多重入口,则称该文法为SLR(1)文法。(2)使用SLR表的分析器叫做一个SLR分析器。(3)每个SLR(1)文法都是无二义的。但也存在许多无二义文法不是SLR(1)的。(4)LR(0)∈ SLR(1)∈无二义文法2.如何构造SLR(1)分析表(1)把G拓广为G'(2)对G'构造 1.LR(O)项目集规范族C 2.活前缀识别自动机的状态转换函数GO(3)使用C和G...原创 2022-04-27 00:15:00 · 11063 阅读 · 3 评论 -
LR(1)分析法
1.LR(1)分析表和LR(1)文法(1)按上述算法构造的分析表,若不存在多重定义的入口(即,动作冲突)的情形,则称它是 文法G的一张规范的LR(1)分析表。(2)具有规范的LR(1)分析表的文法称为一个LR(1)文法。(3)使用LR(1)分析表的分析器叫做一个规范的LR分析器。(4)LR(1)状态比SLR(1)多。(5)LR(O)∈ SLR(1)∈ LR(1)∈无二义文法。2.SLR冲突消解存在的问题(1)LR(1)和SLR(1)分析表构造方法的对比...原创 2022-04-28 00:15:00 · 12627 阅读 · 0 评论