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节总结&备忘

  • 相关阅读:
    各种犯下的错误(2)
    c3p0封装
    servlet模板
    各种犯下的错误(1)
    连接池的创建与封装
    jdbc连接用工具类
    Java从入门到入坟(1)
    小米商城网页版(js+css)
    JavaScript学习篇(9)
    JavaScript学习篇(8)
  • 原文地址:https://www.cnblogs.com/kangyun/p/4329269.html
Copyright © 2011-2022 走看看