• HNU_Compiler Principles_Introduction


    课程考评:

    (1) 一班分6组,15min/组,报告10min,讨论5min;也可以调整为合2为1,30分钟/组

    (2) 每个学生每堂讨论课后,写总结(电子稿)交给老师;

      (3) 小班讨论主题:

     实验安排:

      4次,从8个实验中选4个;

      每人独立完成,并通过测试;

      提交:

        实验报告打印稿、电子版

        源代码、测试样例电子版

      参考编译器:tiny编译器,源代码见课程中心

    第一章 绪论

    1.编译的含义:

      -机器语言

      -高级程序语言

    2.编译过程和环节

    3.编译器的构造方法学:模型、算法、工具

    4.编译技术的广泛应用

    5.程序语言的种类

    6.程序设计语言基础

    计算机(CPU+存储器)与机器语言:计算要快!

      数据->输入->CPU->进行运算,输出->存储器(单元地址)

     快的途径:

      提高单个CPU做事的速度。把电路做的越小,越灵敏,微电子技术:摩尔定理

      采用并行处理策略:多核CPU,多线程,集群系统

      第二种策略的发挥是有条件的:提交的计算任务要有并行性,如果是串行性计算任务,并行没有意义;

    因此,分析并提取任务中的并行性,构建并行执行的机器代码,是编译器中要考虑的重要问题,编译技术的高级话题。

    计算机的特点:

    CPU与存储器的不协调,CPU很快,存储器的速度慢得多

    则存储器分为了多种,【从左到右依次变大】

      1.寄存器Register(最快)2.缓存Cash 3.内存 4.磁盘

    因此,寄存器的分配,是一个编译器要考虑的另一重要问题。

    高级程序语言VS机器语言

    高级程序语言特点:

      概念与概念之间的逻辑关系表达

      变化和相互作用的时序和逻辑关系表达:流程与控制

        条件 if;互斥的离散事件:switch;循环:for,while

      直观表达,易于理解,简洁,易于掌握,修改;

      满足人处理的要求:

        追求的目标:

          易懂,通用(与计算机型号无关性),鲁棒(可靠),

          重用(组件化,可装配性,互操作能力;

    机器语言的特点:

      1.代码和数据的存储;2.数据的运算传输;3.控制指令:跳转

      满足机器处理的要求:

        概念单一:指令,数据,地址

        每句的含义单一;

        代码很长;

        多句综合难以理解;

        指令、存储器地址很多;

     编译技术的含义

      译:翻译,然后优化

        策略:高级语言->通用机器语言->优化->特定机器语言->优化;

      翻:编译器构建方法学:使用模型,算法,工具

        策略:用程序生成程序:

          编译器构造工具+简单的表达式  --》编译器

    编译过程:(符号表)7步

    分为前端和后端,

      前端不需要考虑目标机型,后端只需要通用机器代码转变成目标机器特定代码

      特点:彼此之间相互独立,又可对接,前提:中间代码有国际标准

    词法分析/扫描

    • 高级语言程序由句子串联而成,句子由词素(lexeme)串联而成
    • 词素分为两类:预定义符(保留字,标点符,运算符)和自定义符;
    • 词法单元 (token)

    语法分析

    语义分析

    中间代码生成  

      根据语义分析的输出,生成通用机器语言,也叫中间表示,例如:三地址码

    中间代码优化

    目标代码生成

    目标代码优化

    编译中优化的价值

    3.编译器构造方法学:

      就事论事:代价高,时间长,隐患多,脆弱

      编译器构造工具

    4.编译技术的广泛应用

      技术应用

      方法学

  • 相关阅读:
    菜鸟学自动化测试(三)—-selenium 命令
    菜鸟学自动化测试(二)—-selenium IDE 功能扩展
    用js实现自动打字动画效果
    hihoCoder #1015 : KMP算法
    hihoCoder #1014 : Trie树
    android相对布局中@id和@+id的区别(原理)
    android中动态给EditText获得焦点并弹起软键盘的方法详解
    网页版井字游戏(TicTacToe)人机对战的制作(附思路和源码)
    网页版番茄时钟的制作——Pomodoro Clock
    制作网页版简易计算器(Calculator)
  • 原文地址:https://www.cnblogs.com/Comet-Fei/p/12322217.html
Copyright © 2020-2023  润新知