
编译原理
文章平均质量分 85
Metallic Cat
这个作者很懒,什么都没留下…
展开
-
编译原理 --- 预测分析程序
还是与离他最远的 if 匹配呢?分析表本身的数据结构是矩阵,第一个坐标是非终结符A,第二则是终结符a,根据坐标找到的元素则是在输入符号为终结符a,文法匹配符号为非终结符A时用来进行扩展的非终结符A的候选式。1.在弹出非终结符,并用其候选式来代替它的位置时,指向输入串字符的指针没有变动且也没有进行匹配,直到栈中无法再进行替换(入栈)后,我们才开始进行输入串的匹配。4.所有与语法相关的知识都在分析表中,而总控程序只是负责去执行这些知识的机器,这个机器在不同的语法分析程序中都是通用的(执行的步骤都是一样的)原创 2022-10-19 16:23:25 · 2765 阅读 · 0 评论 -
编译原理 --- 递归下降分析器
1.在上面这个例子中则是子程序序A先调用子程序B,本程序结束完调用之后再返回来继续调用下一个符号如果下一个符号是终结符的话那就直接进行匹配,不进行调用,匹配完后继续调用下一个符号如果不是的话则调用这个非终结符对应的子程序,并重复步骤 1 1.ADVANCE是一个字程序,作用是输入下一个符号2.SYM则是指向当前输入的单词符号1.一个非终结符的展开就等价于调用这个非终结符对应的语法分析子程序1.一个非终结符对应的子程序就用这个非终结符本身来命名,比如非终结符A的子程序的命名就是A本身2.上面这个设计中的Beg原创 2022-10-19 10:30:07 · 3184 阅读 · 0 评论 -
编译原理 --- 消除回溯问题,以及FIRST集合和FELLOW集合的构造算法
2.非终结符A的FELLOW集合 --- 首先找出所有非终结符A无法匹配的词法分析器给出的终结符,然后从文法的所有句型中找到存在非终结符A的句型,然后从在这些句型中找到非终结符A,并依次判断非终结符A后面第一个字符是不是终结符,如果是的话又在不在我们前面找到的终结符集合中,如果在的话将这个终结符放到A的FELLOW集合中。但是问题来了,一般来说两个候选的首符集出现交集的情况是比较多的,为了解决这个问题,下面来介绍一个算法,对所有候选进行处理,使得不同候选的首符集尽可能的不出现交集。--- 答案是有的!原创 2022-10-13 11:34:15 · 3726 阅读 · 1 评论 -
编译原理 --- 语法分析概念,自上而下分析面临的问题以及如何消除左递归问题
4.有时候一个非终结符的产生式的右边可能具有多个候选式,此时如果我们的识别到的字符与这个非终结符某一个候选式展开后的子结点都不匹配的话,我们并不能直接结束判断,我们需要回溯到判断选取那一个候选式进行展开的时候,并在这个时候选取另一个候选式,然后继续展开和判断。3.如果没有则这个非终结符A处理完毕,接着判断这个非终结符的产生式中是否出现左递归情况,如果出现的话消除左递归,消除左递归之后视这个非终结符A为开始符号,将从这个开始符号出发,将不会使用到的产生式都删除掉,结束之后开始处理所排的序中的下一个非终结符。原创 2022-10-12 17:07:59 · 2428 阅读 · 5 评论 -
编译原理 --- 正规式与NFA之间的转换,以及词法分析程序自动生成 --- LEX
1.首先针对我们要分析的语言设计一个LEX源程序,并将其输入到LEX编译器中,编译完成后我们就能够得到一个用我们要分析的语言编写而成的词法分析程序,再将这个程序传给我们要分析的语言的编译器转换为机械语言后,就能够得到一个可执行的语法分析程序(.exe)2.l(r)指的是正规是r对应的正规集,而L(M)则是有限自动机能够识别的字的集合,当这二个集合相等的时候我们称正规式r和有限自动机M之间是等价。1.第三条规则中 r2 和 * 是连在一起的,求的是r2这个正规式对应的正规集进行闭包运算后得到的集合。原创 2022-10-11 22:17:17 · 3220 阅读 · 0 评论 -
编译原理 --- NFA(非确定有限自动机)和DFA(确定有限自动机)之间的转换以及DFA的化简
1.以 I 状态集中的某一个状态作为起点,经过一条标志为a的弧后能够到达的所有的状态组成的集合就是 J 集合(PS:除了只经过一条标志为a的弧外,也可以是经过多条标志为空的弧以及一条标志为a的弧,这两种方式是等价的!1.将只有X状态的状态集进行闭包运算,并求取求得的 I 集合的 Ia和Ib(上面这个状态图中只有a和b,所以只有Ia和Ib,如果有更多的字符话就添加更多的列)1.如果计算出的是空集的话,我们也要求这个空集的空集闭包,并求得到的I状态的Ia和Ib (结果都是空集)原创 2022-10-11 16:05:14 · 9019 阅读 · 4 评论 -
编译原理 --- 正规式和有限自动机
1.将每一个合法字符视作一个正规集,然后找到这个正规集对应的正规式,接着我们将得到的所有的正规式取并集(正规集同理),这样我们就能够得到程序中所有合法字的正规集以及这个正规集对应的正规式了。在非确定有限自动机的状态图中,除了传字作为判断条件的弧上的标记,我们还可以传正规式,此时的意思是当我们传给状态函数的字是正规式对应的正规集中的一个字的话,就发生状态转换。1.在这一题中A和C都是正确的,首先从数学的定义上讲这个符号表示的是空集(没有元素的集合),当它作为正规式的时候,它所表示的正规集为空集。原创 2022-10-10 17:50:17 · 1989 阅读 · 0 评论 -
编译原理 --- 词法分析概述
2.在字母那条路径上我们将识别出所有的标识符,此时每识别出一个标识符我们都需要加上一个额外的判断,来分辨这个标识符就是是普通的标识符还是关键字,即:将我们得到的标识符在保留字表中进行查找,如果在表中找到了,那么这个标识符就是关键字,如果找不到的话,这个标识符就是普通的标识符。1.二维数组的第一个下标参数state表示的是当前的状态,然后第二个下标参数ch表示的是输入给当前状态state的字符,然后结合这两个下标在数组中找到的位置处存放的是现有状态在输入了ch后得到的新的状态newState。原创 2022-10-06 09:36:23 · 2843 阅读 · 0 评论 -
编译原理 --- 程序语言的语法
1.尽管我们无法用上下文无关文法完全描述现在的程序设计语言,但是我们依然可以用上下文无关文法来描述现在的程序设计语言的大部分内容,对于上下文无关文法无法描述的内容再用其它的方法来解决。1.语言和文法的二义性会导致我们得到的计算结果不是确定的,这是我们在计算时不愿意看到的情况,为了解决这个问题,我们要用无二义的文法来推导句型和语言。2.这些文法的终结符,非终结符和开始符号的定义都是一样的,唯一有区别的就是它们的产生式集合的形式。1.如果候选式是终结符的话就用小写表示,如果是非终结符的话就用大写表示,如上图。原创 2022-10-05 20:04:17 · 1529 阅读 · 0 评论 -
编译原理 --- 高级程序设计语言概述
一个程序设计语言一般有三个定义:1.语法;2.语义;3.语用在编译原理这门课中我们主要考虑语法和语义这两个定义1.程序本质上是一定字符集合上的字符串,但是字符串并不一定都是程序,唯有符合一定规则的字符串才能够称之为程序,而这个规则就是语法规则2. 合式的意思就是:形式上正确1.一个程序的语法又分为两部分,分别是词法规则和语法规则2.词法规则是程序中的单词符号的形成规则,向机器描述这个规则的工具是有限状态机3.语语法规则其实就是单词之间的组合规则,向机器描述语法规则的工具是上下文无关文法。原创 2022-10-04 20:18:49 · 906 阅读 · 0 评论 -
编译原理 --- 引论 --- 编译与计算思维
1.编译程序就是翻译程序的一种1.机器语言程序可以直接在计算机上运行,并得到计算结果2.编译程序具有以下几种分类:1.诊断编译程序侧重于对源语言程序的调试核检查2.优化编译程序则侧重于对源语言程序的执行效率的优化3.交叉编译程序:前置知识:运行编译程序的机器称为宿主机,运行机器语言程序的是目标机,一般来说宿主机和目标机是同一台机器但是当宿主机和目标机不是同一台机器,也就是说编译程序编译出不同于他所在的机器(宿主机)的机器代码时,我们称这种为交叉编译程序。原创 2022-10-03 10:04:38 · 768 阅读 · 0 评论