zoukankan      html  css  js  c++  java
  • 编译原理概述

      编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。学好编译原理对于我们以后在写程序的道路上会有很大的帮助,这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。 我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。在20世纪 50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间 诞生不少名著的相关数论  

    编译程序系统概述

    翻译程序

        编译程序:较为复杂的翻译程序,源程序通过翻译程序变成目标程序,其中源程序就是常见的高级语言程序,例如C++、Java、Python;目标语言通常为机器级语言或者较低级的虚拟机语言,例如汇编语言、机器语言、Bytecode(Java字节码)

        解释程序:以源程序作为输入,但不产生目标代码,边解释边执行源程序本身,实际上,许多编译程序的构造与实现技术同样适用于解释程序。我们主要学习编译程序。

    编译程序在逻辑结构上至少分为俩个阶段

        分析阶段:理解源程序,挖掘源程序的语意

        综合阶段:生成与源程序语义上等价的目标程序

    也可以分为三个阶段

      前端:实现主要的分析任务,通常以第一次生成中间代码为结束标志

    中端:实现各级中间代码上的操作

      后端:实现主要的综合操作,通常以最后一级中间代码生成目标代码为结束标志

    详细逻辑过程:

            词法分析

            语法分析

            语义分析

            中间代码生成

            中间代码优化

            目标代码生成

            目标代码优化

    词法分析

      扫描源程序字符流,识别出有词法意义的单词,返回单词的类别和单词的值,或词法错误的信息,

    语法分析

      在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位

    语义分析

      对语法分析后的程序进行语义分析,不符合语义规则时给出错误信息

    中间代码生成

      中间代码的翻译生成,中间代码是一种独立于具体硬件的记号系统,常用的中间代码:四元式、三元式、间接三元式、逆波兰记号、树形表示

    中间代码优化

      对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生出更为高效的目标代码

    目标代码生成

      将中间代码变换成特定机器上的低级语言代码

    目标代码优化

      以基本块内的简单优化方法、控制流数据流分析基础等代码生成和优化相关的基本知识为主线,辅以优化技术的综述。

    符号表管理

      编译程序在工作过程中需要保持一系列的表格,以登记源程序的各类信息和编译个阶段的进展状况,其中最重要的就是符号表,它用来登记源程序中出现的每个名字以及名字的各个属性。当扫描器识别出一个名字后,它把该名字填入到符号表中,但这时不能完全确定名字的属性,它的各种属性要在后续的各阶段才能填入。例如,名字的类型等要在语义分析时才能确定,而名字的地址可能要到目标代码生成才能确定。

    错误处理

      编译过程的每一阶段都可能检测出错误,其中,绝大多数错误可以在编译的前三阶段检测出来。错误通常分为语法错误和语义错误,语法错误是源程序中不符合语法或词法的规则的错误,可以在语法分析和语法分析阶段检测出来,语义错误是指源程序中不符合语义规则的错误,在语义分析阶段能检测出来,而又得语义错误要在运行时才能检测出来。

    书籍推荐

    龙书:

      英文名:Compilers: Principles,Techniques,and Tools

      作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman

      中文名:编译原理技术和工具

      龙书是Alfred V. Aho等人于1986年出版的,由于出版年代较早,其中包含部分过时的技术并且没有反映一些新的编译技术。新编的《编译原理》抛弃诸如算符优先分析等过时技术,增加面向对象编译、类型检查等新技术

    虎书:

      英文名:Modern Compiler Implementation in C 

      作者:Andrew W.Appel,with Jens Palsberg 

      中文名:现代编译原理-C语言描述 

      虎书出版比较晚,与《编译原理》的知识点差不多,但增加了数据流分析、循环优化、内存管理等内容。与虎书比,《编译原理》更适合国内的编译原理课程教学。这本是C版,还有java版和ML版。

    鲸书:

      英文名:Advanced Compiler Design and Implementation

      作者:Steven S.Muchnick

      中文名:高级编译器设计与实现

      鲸书侧重在对编译器后端优化的处理。在本科阶段的编译教学中旨在让学生对程序设计语言的编译全过程有系统的理解,因此会介绍编译器后端的处理技术,但不注重优化技术。鲸书更适合作为研究生的教材或参考书

  • 相关阅读:
    绿色版QQ2010SP3手记
    使用DQL语句查询数据
    Oracle 数据库密码过期问题
    redis语法与命令
    Redis安装与启动
    centos 7下搭建Redis5.x版集群
    MySQL 命令行操作教程
    Redis集群分片原理及选举流程
    截取文件名与后缀名
    Java POI读取excel 支持xls、xlsx
  • 原文地址:https://www.cnblogs.com/gollong/p/9338897.html
Copyright © 2011-2022 走看看