博客
关于我
编译原理及技术(一)——简单介绍一个编译器的结构
阅读量:798 次
发布时间:2019-03-25

本文共 1227 字,大约阅读时间需要 4 分钟。

一个编译器的结构

编译器作为 translators,连接人写的语言代码与计算机能够执行的机器码。整个编译过程可以分为预处理器、编译器、汇编器、链接器和加载器等几个步骤。预处理器负责处理宏定义和其他前处理工作,编译器接着将预处理后的源代码转化为汇编语言,汇编器再将汇编语言生成可重定位置的机器码,而链接器和加载器则负责连接各个模块并加载程序到内存中。

一、语言处理器

语言处理器是编译器的核心,主要负责将人写的语言代码转化为计算机能理解的机器码。其结构分为三个主要阶段:词法分析、语法分析和语义分析。

1. 词法分析

词法分析的任务是将输入的字符分割为词法单元。词法单元可以分为关键字、标识符、常数、操作符等,各有不同的种别码和属性值。例如,源代码“while (value != 100)”会被分割为“WHILE”、”(“、”value“、”!”、”100”、”)“等词法单元。

2. 语法分析

语法分析则是在词法分析的基础上,根据词法单元的种别码和符号表信息,构建语法树,描述源程序的语法结构。如赋值语句“position = initial + rate * 60;”对应的语法树结构。

3. 语义分析

语义分析器则检查源程序是否符合语言定义的语义,完成类型检查和符号表管理。例如,检查变量的使用是否声明,运算符和操作数的类型是否匹配。

二、编译器的工作流程

  • 源程序分析:编译器首先进行词法分析、语法分析和语义分析,确保源程序的语法和语义正确无误。
  • 中间代码生成:将语法和语义分析结果转化为中间表示,如三地址码。三地址码主要通过四元式表示运算。
  • 目标代码生成:根据中间代码,对机器码进行优化和生成,最终形成目标机器码。
  • 三、技术分析

    1. 词法分析实例

    源代码“while (value != 100) {num++;}”的词法分析过程可以分为以下几个步骤:

    • 识别“while”为关键字,对应种别码WHILE。
    • 识别”(“为左括号,对应种别码LPAREN。
    • 识别”value“为标识符,对应种别码IDN,属性值为“value”。
    • 识别”!=100”中的”!”和整数数值100分别为运算符和标识符。
    • 最终完全分割为六个词法单元。

    2. 语法树构建

    赋值语句“position = initial + rate * 60;”的语法树如下:

    • 左子树为标识符“position”。
    • 右子树为加法表达式,左子树为标识符“initial”和常量60,右子树为标识符“rate”和常量60。
    • 表达式的加法运算会产生结果。

    3. 语义检查

    在语法分析的基础上,编译器会检查语义是否正确。一方面,符号表用于管理标识符信息;另一方面,类型检查确保运算分量一致。例如,数组下标必须为整数,避免类型不匹配错误。

    四、得出结论

    通过以上详细分析,可以看到编译器的内部架构及其各步骤的重要性。从词法分析到语义分析,每一步骤的作用均不可或缺,为生成高效、安全的目标代码奠定基础。

    转载地址:http://etbyk.baihongyu.com/

    你可能感兴趣的文章
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>