Steps of source code change to executable application

程序运行的整个过程,学习一下

  • 源代码 (source code) →
  • 预处理器 (preprocessor) →
  • 编译器 (compiler) →
  • 汇编程序 (assembler) →
  • 目标代码 (object code) →
  • 连接器 (Linker) →
  • 可执行程序 (executables)

1. 词法分析

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

2. 语法分析

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

3. 语义分析

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

4. 中间代码生成

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

5. 中间代码优化

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

6. 目标代码生成

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

7 符号表管理

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

8 出错处理

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

时间: 2024-11-05 20:31:40

Steps of source code change to executable application的相关文章

Memcached source code analysis -- Analysis of change of state--reference

This article mainly introduces the process of Memcached, libevent structure of the main thread and worker thread based on the processing of the connection state of mutual conversion (not involving data access operations), the main business logic is t

Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization

A code sequence made up multiple instructions and specifying an offset from a base address is identified in an object file. The offset from the base address corresponds to an offset location in a memory configured for storing an address of a variable

Tips for newbie to read source code

作者:ll kid链接:https://zhuanlan.zhihu.com/p/23796485来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. This post is first posted on my WeChat public account: GeekArtT Reading source code is always one big part for software engineers. Just like the writers to learn

Map Data to Source Code

Map Data to Source Code 仪器需要有关项目的准确信息以提供最佳结果.如果系统可以看到与项目相关联的所有符号,则获得最完整的信息.当由工具分析工具生成的跟踪文档中显示地址而不是符号时,您可以手动提供丢失的信息.地址到符号的映射是包含在一个dsym文件.通常情况下,仪器自动发现dsym文件,基于你在聚光灯的指标和仪器的喜好指定路径的位置.然而,你可以点工具在正确的方向,当它不能自动找到一个dsym.一旦完成,仪器就可以将地址映射到相关联的符号和行号信息.Instruments

12 Source Code Profilers for C & C++

Source :http://open-tube.com/12-source-code-profilers-for-cc/ Code Profilers are very distinct from traditional debuggers. They are able to catch the trivial and non fatal coding errors which are often hard for humans to catch. These trivial bugs lat

ubuntu 12.04 下 eclipse关联 source code

一.JDK source code 命令行中: sudo apt-get install openjdk-7-source 下好的jdk源码在 Linux 在目录 usr/lib/jvm/openjdk-7/src.zip Windows在目录  C:\Program Files\Java\jdk1.6.0_20\src.zip In Eclipse, select Windows -> Preferences -> Java -> Installed JREs , expands rt

How to build windows azure PowerShell Source Code

Download any version source code of Windows Azure Powershell from https://github.com/Azure/azure-sdk-tools/releases Downdload Wix ToolSet from http://wix.codeplex.com/releases/view/115492 and install it to let your VS supports Wix component. Build \W

Tree - AdaBoost with sklearn source code

In the previous post we addressed some issue of decision tree, including instability, lack of smoothness, sensitivity to data, and etc. One solution is Boosting Method. In simple words Boosting combines multiple weak learners to get a powerful predic

How to Build MySQL from Source Code on Windows & compile MySQL on win7+vs2010

Not counting obtaining the source code, and once you have the prerequisites satisfied, [Windows] users can build from source code in 5 easy steps. Prerequisites – Install & ensure they are in the $PATH: CMake <-- Download C++ compiler <-- Visual