ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

三、编译系统的基本原理

2021-06-13 14:01:45  阅读:278  来源: 互联网

标签:代码生成 语法分析 基本原理 语义 编译系统 词法 代码优化 源程序


编译系统基本原理概述

  • 编译程序的职能:把使用某程序设计语言书写的程序翻译为等价的机器语言程序,所谓等价是指目标程序执行源程序的任何预定功能。
  • 一般来说,编译程序分为以下几个部分:
    词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、符号表管理和出错处理。各部分之间的关系 如图所示。

在这里插入图片描述

词法分析

  • 概述:词法分析程序是编译程序的第一个部分,它的输入是源程序中由字符组成的符号。编译程序需要把程序的这种外部形式转换成适合后续程序处理的形式。
  • 功能如下:
    在这里插入图片描述

语法分析&语义分析

  • 概述:经过词法分析程序处理后,源程序就转化为单词串。每个单词都是一个意义独立的单位,其所包含的信息量个数固定。
  • 语法分析:程序根据特定程序设计语言的文法规则,检査单词串是否符合这些规则。
  • 语义分析:一旦语法分析程序分解出其中一个文法结构,该结果的语义分析程序就进行相应的语义检查,包括检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。在有需要的时候输出相应的中间代码。这里的中间代码可以理解为假想的虚拟机的指令,其执行次序反映了源程序的原始定义。
  • 说明:只有语法和语义都正确的源程序才能被翻译成正确的目标代码。

中间代码生成&代码优化&目标代码生成

  • 中间代码生成:作为代码生成程序的输入,由代码生成程序生成特定的计算机系统下的机器代码。
  • 代码优化:为了提高目标代码的运行效率和减小目标代码大小,也可以在语法语义分析程序与代码生成程序之间插入代码优化程序。代码优化程序在不改变代码所完成的工作的前提下对中间代码进行改动,使其变成一种更有效的形式。
  • 目标代码生成:是编译程序的最后一个阶段,它将程序的中间代码表示作为输入,并产生等价的目标代码作为输出。

符号表管理&出错处理

  • 概述:编译程序在完成其任务的过程中,还需要进行符号表的管理和出错处理。
  • 符号表管理:在符号表中登记了源程序中出现的每一个标识符及其属性。在整个编译过程中,各部分程序都可以访问某标识符的属性,包括标识符被说明的类型、数组维数、所需存储单元数,以及所分配 的内存、元地址等。
  • 出错处理:错误管理程序是在分析程序发现源程序有错误而无法继续工作时进行工作的,其任务是记录并向用户报告错误及其类型和位置,或者尝试进行某种恢复工作。

例子

  • 在编译过程中,进行类型分析和检查是(7)阶段的一个主要工作。

A. 词法分析 B. 语法分析 C. 语义分析 D. 代码优化

  • 解析:一般的编译程序工作过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成,以及出错处理和符号表管理。
    词法分析阶段是编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。
    语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
    语义分析阶段主要分析程序中各种语法结构的语义信息,包括检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。
    由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间上和空间上有很大的浪费。当需要生成高效的目标代码时,就必须进行优化。
    故正确答案为:C

例子

  • 在以阶段划分的编译器中,符号表管理和(8)贯穿于编译器工作始终。

A. 语法分析 B. 语义分析 C. 代码生成 D. 出错处理

  • 解析:一般的编译程序工作过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成,以及出错处理和符号表管理,如图所示。
    在这里插入图片描述

故正确答案为:D

标签:代码生成,语法分析,基本原理,语义,编译系统,词法,代码优化,源程序
来源: https://blog.csdn.net/luoxuexi2020/article/details/117875371

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有