编译器学习笔记之一:概述(未完)

本文介绍了编译器的基本概念及其工作流程,包括从源代码到可执行程序的全过程,如预处理、编译、汇编及链接等步骤,并解释了本地编译器与交叉编译器的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



        编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

        一个现代编译器的主要工作流程如下:
源代码(sourcecode)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(objectcode)→连接器(Linker)→可执行程序(executables)

        编译器可以生成与编译器本身所在的计算机和操作系统相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成其它平台上运行的目标代码,这种编译器又叫做交叉编译器

        预处理器:预处理器(preprocessor)作用是通过代入预定义等程序段将源程序补充完整。

        编译器前端:编译器前端(frontend),前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a = b ; + c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

        编译器后端:编译器后端(backend)编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值