(转)编译原理之概述

(转自:李达_August http://blog.csdn.net/lidatgb/article/details/8037224)

    正在学文法,单纯学文法,不知其所属、不知其用,学的实在是难受,其实文法是编译原理中编译原理的一部分,所以从编译原理开始学,先从高处看这些知识,对这些知识有宏观的把控,在细学其中的知识点,即“自上而下、逐级分解” 。

    编译原理的职能是把程序设计语言的程序翻译为等价的机器语言程序,包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成,各部分之间的关系如图所示:

    

    在概述阶段,先介绍这几个部分的作用,后续博客会仔细介绍每个部分的作用,当然包括头疼的文法。

    词法分析

    由图也可以看出,词法分析是编译程序的第一步,它接受的是源程序中的字符。词法分析阶段主要的作用是把接受的源程序转换为词法分析阶段可以处理的形式,分别有以下几个功能:

  • 识别源程序中意义独立的最小单位(单词),然后确定其类型(标识符、关键字、操作符等)。
  • 删除无用的符号,例如空格、回车、注释等。
  • 报告在词法分析阶段中的错误

    经过词法分析阶段的处理,源程序转换为单词串,供语法分析和语义分析部分再行处理。

    语法分析/语义分析

    语法分析部分根据特定程序设计语言的文法规则,检查单词串是否符合这些既定规则,如果语法分析部分分解出来一个文法结构,语法分析的结果表示为分析树或语法树,语义分析部分就会进行相应的语义检查,在必要的时候输出相对应的中间代码。

    代码优化

    上个步骤生成的中间代码已经可以交付代码生成部分生成机器代码了,但是为了提高目标代码的运行效率、减小目标代码大小,可以使用代码优化部分,在不改变代码的功能前期下对中间代码修改,使之成为更有效的处理方式。

    代码生成

    接受以上步骤处理的中间代码,由代码生成程序生成特定的系统下的机器代码。

    错误管理/符号表管理

    在整个过程中,还需要进行符号表管理和出错管理,符号表用来记录源程序中的每个标识符及其属性,在整个编译过程中,各部分都可以访问标识符的属性,包括其类型、数组维数、所需存储空间和地址等。

    错误管理部分是在分析过程发现程序有错误无法继续时工作的,主要作用是记录并向用户发送错误报告,或者尝试进行恢复工作。

    从高处看,才能看到每条小路!

转载于:https://www.cnblogs.com/eric-cui/articles/4863527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值