博客
关于我
编译原理及技术(一)——简单介绍一个编译器的结构
阅读量: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/

    你可能感兴趣的文章
    watch
    查看>>
    MySQL命令行操作的相关语法
    查看>>
    MySQL命令行登陆,远程登陆MySQL
    查看>>
    mysql命令:set sql_log_bin=on/off
    查看>>
    mySQL和Hive的区别
    查看>>
    MySQL和Java数据类型对应
    查看>>
    mysql和oorcale日期区间查询【含左右区间问题】
    查看>>
    MYSQL和ORACLE的一些操作区别
    查看>>
    mysql和redis之间互相备份
    查看>>
    MySQL和SQL入门
    查看>>
    mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
    查看>>
    Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
    查看>>
    Mysql在Windows上离线安装与配置
    查看>>
    MySQL在渗透测试中的应用
    查看>>
    Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
    查看>>
    Mysql在离线安装时提示:error: Found option without preceding group in config file
    查看>>
    MySQL基于SSL的主从复制
    查看>>
    Mysql基本操作
    查看>>
    mysql基本操作
    查看>>
    mysql基本知识点梳理和查询优化
    查看>>