编译原理复习(一)

编译器 VS 解释器

简单来说,一个编译器就是一个程序,它可以阅读有一种语言编写的程序,并把该程序翻译成为一个等价的用另一种语言(目标语言)编写的程序,编译器的重要任务之一就是报告在翻译过程中发现的原程序中的错误,如果目标程序是一个可执行的机器语言程序,那么它就可以被用户调用处理输入并产生输出。

解释器是另一种常见的语言处理器,它并不通过翻译的方式生成目标程序,从用户的角度看,解释器直接利用用户提供的输入执行源程序中的指定操作。

在把用户输入映射成为输出的过程中,一个编译器产生的机器语言目标程序通常比一个解释器快很多,然而解释器的错误诊断效果通常比编译器更好,因为它逐个语句的执行源程序

编译器的结构

编译器具有非常模块化的高层结构。

编译器具体有两个部分组成,分析部分和综合部分,分析部分把源程序分解成为多个组成要素,并在这些要素之上加上语法结构,然后他使用这个结构来创建该源程序的一个中间表示,分析部分还会收集有关源程序的信息,并把信息存放在一个称为符号表的数据结构中。符号表将和中间表示形式一起传送给综合部分。综合部分,根据中间表示和符号表中的信息来构造用户期待的目标程序。

分析部分经常被称为编译器的前端,综合部分则称为后端。

编译器可看成多个阶段构成的“流水线”结构。

为什么分析部分划分为词法分析和语法分析

  1. 最重要的考虑是简化编译器的设计,将词法分析和语法分析分离,通常使我们至少可以简化其中的一项任务,例如,如果一个语法分析器必须把空白符胡注释灯座语法单元进行处理,那么他就会比那些假设空白或注释已经背词法分析器过滤掉的处理器复杂得多,如果我们正在设计一个新的语言,将此法和语法分开考虑,有助于我们得到一个更加清晰的语言设计方案。
  2. 提高编译器的效率,把词法分析器独立出来,使我们能够使用专用于此法分析任务不进行语法分析的技术之外,我们可以使用专门的用于读取输入字符的缓冲技术来显著提高编译器的速度。
  3. 增强编译器的可移植性输入设备相关的特殊性可以被限制在词法分析器中。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值