zoukankan      html  css  js  c++  java
  • 编译器的普遍翻译步骤

    1.扫描程序(scanner)

      把源代码中的语句扫描进来,并分解成token。即词法分析。

    2.语法分析程序(parser)

      进行语法分析,并将分析结果用分析树(parse tree)或者语法树(syntax tree)表示出来。

    3.语义分析程序(semantic analyzer)

      在语法树下面添加语义分析

      如a[index]=4+2;

      将a识别成 array of integer ,index识别成integer,4、2识别成常量。

      并补充在语法树下面。

    4.源代码优化程序(source code optimizer)

      改进源代码,生成中间代码。

      例如a[index] = 4+2

      t=4+2

      a[index]=t;

      则经过源代码优化后可形成a[index]= 6 这也被称为常量合并。

      源代码优化程序在语法树的基础上进行,并将其转化为三元式或类似的线性结构进行输出而成为中间代码。

    5.代码生成器(code generator)

      生成目标代码

      在本书中以汇编语言作为目标代码,上式a[index]=4+2;经过以上步骤后,代码生成器生成的目标代码为

      mov r0,index

      mul r0,2

      mov r1,&a;

      mov r1,r0;

      mov *r1,6

      注:以上取地址的方式参照C语言,故取a的地址用&a,取r1的地址用*r

    6.目标代码优化程序(target code optimizer)

      优化目标代码

      在这个阶段中,编译器尝试着改进由代码生成器生成的目标代码。这种改进包括选择编址模式以提高性能、将速度慢的指令更换成速度快的,以及删除多余的操作。

      如上述汇编代码可优化为:

      mov r0,index

      shl r0

      mov &a[r0],6

    PS:以上为阅读该书1.3节总结&备忘

  • 相关阅读:
    3: Flink 运行命令 设置port
    4: docker 安装flink 1.14
    6: Docker Compose简单知识
    十二 docker 安装kafka
    十三 查看kafka版本
    2: Windows安装1.9.3 flink && first demo project
    5: win10 使用IDEA调试编译flink 1.14
    1: Windows上安装Flink
    Chrome 96 新功能
    js map遍历与promise一起使用会出现的问题,以及解决方案
  • 原文地址:https://www.cnblogs.com/kangyun/p/4329269.html
Copyright © 2011-2022 走看看