当前位置:首页 » 编程软件 » 如何理解编译原理的推导

如何理解编译原理的推导

发布时间: 2022-07-18 06:52:50

1. 如何由文法推导语法树(编译原理)

语法树,是针对上下文无关文法,用来表示一个句型的生成过程的一种描述手段。

对于给定的句型,依据文法构造它的语法树,是语法分析的任务。
编译原理课程中重点学习的各种语法分析方法,都是解决语法树的构造的具体分析方法。

在学习并掌握各种语法分析方法之前,一般只能依据直觉印象,通过猜测、拼凑等手段,去试着推演,凑出符合要求的句型的语法树。所以这个阶段练习用的题目一般也不很复杂,通过多多练习也能找到一些技巧(其实主要是后面将要学习的自顶向下语法分析中的一些原则)。

对于给定的文法,有一些句型可能能构建出两棵甚至多棵结构不同的语法树,结果不一定是唯一的。这样的文法就是所谓的二义性文法。
对于非二义性文法而言,任意一个句型的语法树都是唯一的。

2. 编译原理中=>*表示0步或多步推导,什么叫0步推导难道不经过产生式吗。。

0步推导,是指符号串本身已经就是所需要推导的结果,不推导就已经是了。
不推导,当然也就不需要应用任何一个产生式。
举个例子:
G[S]:
S-->aSb
|
ab
待推导的句子是
w=aabb
现在有3个句型u,v,z,都可以推导出w。
它们分别是:
u=S
v=aSb
z=aabb
那么:
从句型u推导:
u=S==>aSb==>aabb,需要2步推导
从句型v推导:
v=aSb==>aabb,需要1步推导
从句型z推导:
z=aabb,需要0步推导

3. 编译原理

编译原理):利用编译程序从源语言编写的源程序产生目标程序的过程; 用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成

(3)如何理解编译原理的推导扩展阅读:

编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。

编译程序的语法规则可用上下文无关文法来刻画。语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。

而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号。

4. 怎样理解编译原理

如果你在学编译原理的话,你可以把它理解为一个编写《编译器》的时间课程~
当然,事实上,编译原理的老师也是这么要求的~
编译器就是把你编写的源程序代码变成程序可理解的二进制代码的过程。
而把这个过程细化之后就可以归纳为:1、预处理过程(例如去掉不需要的空格、注释之类的~)、2、词法分析(就是把你写的程序从头到尾扫描一遍,识别出你的程序中所有的“单词”,并编号记录,按顺序放在一张大的二维表中,一遍下一个处理过程用到~,当然,如果你的单词有错的话,还要做相应的出错处理哈~)、3、语法分析(处理的是第二部中得到的单词二维表,经过一定的算法处理,可以得到一张成为预测分析表的东东~简单的说就是按照预测分析表对一个个句子进行检查,全部通过就进入下一关节,否则出错处理)、4、语义分析、5、目标代码的生成(这部分生成基本的与机器无关的单步执行的代码)

之后的步骤就是与机器有关的东西了~目标代码优化>汇编代码生成>生成二进制代码~

恩,差不多就是这么个流程,你可以再去针对自己感兴趣的部分网络一下哈~

5. 关于编译原理中的最右推导问题。题目如下:

大写A应该是最右边的非终结符号,S怎么是最右非终结符号?最右推导是将最右边的非终结符号替换

6. 编译原理的终结符和非终结符如何理解

一、非终结符:

1、非终结符可以再分成更细的东西。

2、不是终结符的都是非终结符。非终结符可理解为一个可拆分元素,而终结符是不可拆分的最小元素。终结符号就是语言中用到的基本元素,名词、动词、形容词、助词等等基本语言单位。

二、终结符:

1、终结符直接就代表一个意思,比如关键字if就不能再分成i和f了。

2、通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导。非终结符则是"语法"中用到的元素,除非谈论"语法",一般交谈语言中并不会用到非终结符。比如:主语、短语、词组、句子。

(6)如何理解编译原理的推导扩展阅读:

终结符和非终结符在计算机科学和语言学的领域是用来指定推导规则的元素。在某个形式语法之中,终结符和非终结符是两个不交的集合。

从形式语言中定义看,终结符(T)就是不可再分的字符或串。而非终结符(N)是一个递归形式的定义:由终结符和至少一个非终结符号组成的串。

如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误的发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。

需要注意的是,一般上编译器只做语法检查和最简单的语义检查,而不检查程序的逻辑。

网络-终结符

网络-编译

7. 编译原理的最左推导和最右推导问题

最左推导:
S=> (L) =>(L,S)=>(S,S)=>(a,S)=>(a,(L))=>(a,(L,S))=>(a,(S,S))=>(a,((L),S))=>(a,((L,S),S))
=>(a,((S,S),S))=>(a,((a,S),S))=>(a,((a,a),S))=>(a,((a,a),(L)))=>(a,((a,a),(L,S)))
=>(a,((a,a),(S,S)))=>(a,((a,a),(a,S)))=>(a,((a,a),(a,a))) 共17步
最右推导
S=> (L) =>(L,S)=>(L,(L))=>(L,(L,S))=>(L,(L,(L)))=>(L,(L,(L,S)))=>(L,(L,(L,a)))=>(L,(L,(S,a)))
=>(L,(L,(a,a)))=>(L,(S,(a,a)))=>(L,((L),(a,a)))=>(L,((L,S),(a,a)))=>(L,((L,a),(a,a)))
=>(L,((S,a),(a,a)))=>(L,((a,a),(a,a)))=>(S,((a,a),(a,a)))=>(a,((a,a),(a,a)))

8. 编译原理的最左推导和最右推导。。。

(2)给出句子0127,34和568的最左推导和最右推导我是刚学编译原理,不知道该怎么去思考,从那入手呢? (1)带先导0的十进制无符号整数 (2)最左推导:

9. 编译原理求解

E是文法开头。ε代表终结符号(推理中代表终点或结果,程序语言中代表常量等)。E T 这些大写字母一般代表非终结符号(这些代表中间过程,非结果。程序中代表函数等等)。开始是E。因为有个G(E)。E就是文法开始符号。推导就有E开始,它也是一个非终结符(代表函数、或者一个推导过程,类似于程序中的main(c++)、winmain(vc++)、dllmain(dll)等主函数)。

1算术表达式文法:这个文法是一个递归文法。计算机进行逻辑推导时会走很多弯路(类似于遍历一颗树的过程)。为了不让计算机走弯路(提高效率的目的),可以变换为第二种文法。这种文法消除了递归(消除了歧义,类似于后缀表达式),使计算机可以一条直线走到底儿推导出结果。

我也很久没看编译原理了。 呵呵

热点内容
安卓手机下雪特效怎么p 发布:2025-02-07 15:49:30 浏览:318
轮胎存储铭牌 发布:2025-02-07 15:43:38 浏览:73
防盗锁编程 发布:2025-02-07 15:31:33 浏览:859
安卓如何快速选择图片 发布:2025-02-07 15:30:43 浏览:467
硬件组态为什么不能编译 发布:2025-02-07 15:30:43 浏览:42
红帆oa服务器地址查询 发布:2025-02-07 14:31:41 浏览:657
文本框脚本图片 发布:2025-02-07 14:23:28 浏览:231
少儿编程c语言 发布:2025-02-07 14:22:50 浏览:218
一阶低通滤波器c语言 发布:2025-02-07 14:22:37 浏览:852
电脑的东西为什么粘贴不到服务器 发布:2025-02-07 14:21:04 浏览:197