![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
丨Q ,Q丨
这个作者很懒,什么都没留下…
展开
-
预测分析法
预测分析法预测分析法在上一篇博客提到过,上一篇使用的是递归的方式实现了一个简单预测分析。注意:回溯和预测分析是分析的两种方法。递归和非递归是实现的方式,对于每一种分析方法,都有两种实现方式。预测分析法一般是使用非递归实现的,效率比递归要高,当然,这是后话了。这篇博客只是一个概述:之前也说过了,“预测分析”就是在推导过程中确定使用一个产生式,就不用回溯了,具体使用哪个产生式,需要事先...原创 2019-10-30 19:52:40 · 2016 阅读 · 0 评论 -
自顶向下的实现方式之一递归下降的语法分析
自顶向下的实现方式之一递归下降的语法分析前面已经说过了自顶向下的语法分析是什么,这篇博客,聊一下用递归的方式实现自顶向下的语法分析。先给出伪代码:A(){ 选定A的一个产生式A→X1 X2 X3 ... Xk for(i = 1 to k){ //遍历产生式右部 if(Xi是一个非终结符号){ 调用Xi(); ...原创 2019-10-30 19:18:10 · 1542 阅读 · 0 评论 -
自顶向下分析法
自顶向下分析法√ 什么是“自顶向下”?自顶向下指的是语法树的方向,“顶”就是语法树的开始符号,向下就表示一个推导过程,而且是最左推导;也可以说是创建语法树的过程。总之,自顶向下就是从文法开始符号开始,最左推导输入串的过程,这个过程,在逻辑上也是创建语法树的过程√ 怎样进行“自顶向下”的语法分析?举个例子:输入串:id+id*id建立最左推导,推导过程会有选择合适的产...原创 2019-10-29 21:55:38 · 1362 阅读 · 0 评论 -
消除左递归
消除左递归为什么要消除左递归?在自顶向下的分析中,如果不消除左递归,就会陷入死循环。例如,在后面要说到的递归向下的分析中,就是一个“从前有座山,山里有个庙…”这样,一直递归下去;使用非递归的时候也是一样,需要计算一个FIRST集合,这个集合本身也是一个递归的计算方式,如果有左递归,同样会无限的递归下去。消除左递归,就是为了可以进行自顶向下的语法分析1.消除直接左递归有如下文法:A→...原创 2019-10-28 20:13:37 · 38095 阅读 · 8 评论 -
自定向下预测分析法(LL(1)非递归)
自定向下预测分析法(LL(1)非递归)通过之前得学习,可以知道,使用自顶向下得预测分析法,选择产生式时没必要进行回溯,每一步推导仅有一个产生式符合要求,否则就出错。怎么知道选哪个产生式呢?在进行推导之前,要有一个预测分析表,根据当前扫描到得终结符号和当前正在推导的非终结符,得到选用哪一条产生式。(是一个二维的表格)关于怎么生成预测分析表,前面的博客有提到过。使用非递归的方法: - 当前...原创 2019-10-24 19:45:26 · 1192 阅读 · 0 评论 -
预测分析表
预测分析表对于LL(1)文法来说,在使用最左推导时,非终结符号的每一步推导使用的产生式是确定的,不用进行试探和回溯。预测分析表的作用:有一个进行语法分析的输入串,开始符号经过最左推导最终与输入串匹配。在匹配过程中,非终结符号需要进行下一步推导时,会根据当前需要匹配的终结符号选择确定的一个产生式。f(需要推导的非终结符号,需要匹配的终结符号)→确定的一个产生式这样的映射关系所组成的矩阵,就是预...原创 2019-10-23 21:01:31 · 14808 阅读 · 4 评论 -
FOLLOW集
FOLLOW集对于一个非中介符号X,FOLLOW(X)表示推导过程中紧跟在X后的非终结符号的集合,举个例子,在推导过程中如果有形如S⇒αXaβ的推导,则非终结符号a∈FOLLOW(X),因为X后面可能会有多个不同的终结符,但是在这条推导中,我们仅能分析出a∈FOLLOW(X)。1.分析根据X出现的不同位置,可以分为下面的两种情况(1)X是开始符号默认开始符号后有一个“界符”——“#或Ka...原创 2019-10-23 18:12:52 · 9051 阅读 · 2 评论 -
FIRST集
FIRST集1.什么是FIRST集?一个符号的FIRST集表示这个符号可以推导出的句子的首符号的集合。举个例子:A→aa|bb|cc。a,b,c是终结符,则FIRST(A)={a,b,c}通过上面的定义解释一下,符号A可以推导出三个句子{aa,bb,cc},那么,这三个句子的首符号集合FIRST(A)={a,b,c}。2.FIRST集求法再给出最终结论之前,首先看以下的几种情况求一个...原创 2019-10-23 00:51:52 · 9947 阅读 · 4 评论 -
四种文法
四种文法0型文法产生式的形式为u → v,且 u∈V+,v∈V * ,u中至少包含一个非终结符号,这种文法又叫短语文法,它所确定的语言称为0型语言。1型文法产生式形式为 xUy →xuy,且U∈VN,u∈V+,x,y∈V * ,该文法称为1型文法,也叫上下文敏感文法。2型文法产生式形式为U →u且 U∈VN, u∈V * 则称该文法为2型文法,也称为上下文无关文法。...原创 2019-09-14 22:05:52 · 724 阅读 · 0 评论 -
程序设计语言基础
程序设计语言基础一.静态和动态静态在编译阶段决定怎样解决一个问题,称为静态策略。例如:Java和C++中,通过static来修饰一个字段,那么这个字段被称为静态成员或类成员。像这样的静态成员,它的存储位置在编译期间就已经决定了,这里采用的就是静态策略。动态在程序运行阶段决定怎样解决一个问题,称为动态策略。例如:Java中方法的动态绑定和C++中的虚函数。二.环境和状...原创 2019-09-08 14:26:40 · 174 阅读 · 0 评论 -
编译原理_目录
术语的解释以及编译和解释编译器的结构以及编译过程文法及相关概念符号以及符号串上下文无关文法原创 2019-09-10 17:53:22 · 1261 阅读 · 0 评论 -
短语(直接短语、句柄)以及语法树
短语(直接短语、句柄)以及语法树一.短语、直接短语、句柄设文法 G=(VN,VT,P,S) ,且 U∈VN,x,y,u ∈V*短语若有 S⇒*xUy⇒+xuy,则u称为句型xuy相对于U的短语注意:一个短语,一定要讨论句型,并且一定要讨论是相对于哪一个部分。观察定义可以看到,U和u的上下文,也就是x和y是一样的,U通过多步推导的到u(x和y没有进行推导)。通过这样严格的定义,短语u才可...原创 2019-09-14 21:34:49 · 16034 阅读 · 2 评论