设计实现一个编译程序的方法和过程
1个回答
关注
展开全部
咨询记录 · 回答于2022-11-21
设计实现一个编译程序的方法和过程
具体编译程序的方法和过程如下:编译分为三个阶段组成:1.预处理器(preprocessor)处理--预编译。 在这个阶段,预处理器在源代码上执行一些文本操作。2.源代码经过解析,判断它的语句的意思。这个阶段产生绝大多数的错误和警告。3.形成符号表,产生目标代码程序执行的过程:1.程序必须载入内存中(由冯曼依诺计算机体系决定)。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。 2.程序的执行便开始。接着便调用main函数。3.开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。4.终止程序。正常终止main函数;也有可能是意外终止。运行时和编译时的本质:像标志符(类型名、变量名、函数名等)、类型定义、const关键字、访问限定符(public/private/protected)、引用(&)等只是存在于源码中,他们不会被带入二进制可执行程序中,这是“编译时”的本质。存在于二进制可执行程序中的只是指令、地址和数据,没有别的东西(实际上地址也是数据的一种),这就是“运行时”的本质。C/C++源代码中的语句、指针和变量都将被转化成二进制程序中的指令、地址和数据。因此,通过名字直接引用一个变量、对象即其成员,这样的代码在编译和链接完成后,实际上都被转换成了通过变量、对象或成员变量的地址(即内存元的地址)进行访问。