编译原理 —— 编译器各阶段工作

分享到:

 1. 词法分析

词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。

2. 语法分析

语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。

3. 语义分析

语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。

4. 中间代码生成

中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。

5. 中间代码优化

优化是编译器的一个重要组成部分,由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。

6. 目标代码生成

目标代码生成是编译器的最后一个阶段。在生成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及内存的组织等。编译器生成的目标程序代码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。

7 符号表管理

符号表的作用是记录源程序中符号的必要信息,并加以合理组织,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。符号表中的某些内容甚至要保留到程序的运行阶段。

8 出错处理

用户编写的源程序中往往会有一些错误,可分为静态错误和动态错误两类。所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,也被称作动态语义错误,如变量取值为零时作为除数,数组元素引用时下标出界等。静态错误又可分为语法错误和静态语义错误。语法错误是指有关语言结构上的错误,如单词拼写错、表达式中缺少操作数、begin和end不匹配等。静态语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的两个操作数中一个是整型变量名,而另一个是数组名等。

继续阅读
华为自研加速引擎系统“方舟编译器”应用速度可提升近一半

于前段时间中,华为推出了自家研发的加速引擎系统“方舟编译器”,这款新的编译器诞生之初可谓是备受关注,与此同时“万物皆Turbo”的梗又再次重现。而据此前官方给出的数据来看,经过方舟编译器处理过后的应用速度可提升近一半,那么别家厂商又是如何应对的呢?就目前情况而言,仅OPPO一家推出的加速引擎与之抗衡,称之为“国产双绝”不为过。

华为的方舟编译器真的把手机变流畅了吗?

经常会有小伙伴在后台问小雷一些手机、处理器、电脑等等各类问题,于是小雷决定为大家解决回答一些实用的问题。有不同意见的小伙伴也可以留言告诉小雷你的看法哦!

华为方舟编译器将开源,方舟编译器能做什么?

在P30系列手机上海发布会上,余承东公布了华为在系统方面两项研发成果——超级文件系统EROFS和华为方舟编译器。在会上,余承东称,采用EROFS的系统能让随机读性能提高20%,系统空间节省14%;而应用方舟编译器后,系统操作流畅度提高了24%以上。

Portland Group发布新版高性能计算编译器及开发工具

PGI 2012支持OpenACC GPU指令和针对多核x86优化的原生CUDA C/C++

意法半导体进一步扩大其深受市场欢迎的STM8微控制器的选择范围

横跨多重电子应用领域、全球领先的半导体供应商意法半导体 (STMicroelectronics,简称ST;纽约证券交易所代码:STM)进一步扩大其深受市场欢迎的STM8微控制器的选择范围,支持智能装置设计人员选用STM8微控制器开发方便现代工作生活的经济型计算任务。