C++源文件编译器过程

C++源文件编译会有以下四个部分:编译预处理 => 编译、优化阶段(编译原理便用于这个阶段)=> 编译过程,编译成目标文件.o文件 => 链接成binary文件

1. 编译预处理:

  • 宏定义指令:如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换
  • 条件编译指令:如#ifdef,#endif,预编译程序将根据有关文件将那些不必要的文件过滤掉
  • 头文件包含指令:#include"FileName"等,将相应的文件包含进来
  • 特殊符号:预编译长须可以识别一些特殊的符号,例如#line表示将被解释成当前行号
  • 预处理模块:#Pragma完成,这个命令将设置编译器的状态或者是指示编译器完成一些特定的动作

2. 编译、优化阶段

经过预编译得到的输出文件中,只有常量,如数字、字符串、变量的定义、关键字if else for等等

词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 代码生成 -> 符号表管理 -> 将多个步骤组合成趟 -> 编译器构造工具

 

3.汇编过程

汇编雨涵代码翻译成目标机器指令的过程,对于被翻译系统处理的每一个Cpp语言源程序,都将处理得到目标文件 .O文件

目标文件有段组成,通常一个目标文件至少有2个段:数据段和代码段

 

4. 链接程序

将相关的目标文件彼此相连接:静态链接、动态链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个编译器的源代码是我原先为了完成编译原理实验课作业而写的,所以只具有教学价值,现在发出来和大家共享 ;-)<br/><br/>和网上流传的版本不同,它从文法开始,一直做到了符号表的实现. 想实现自己的编译器的话,只需在把Initializtion.h中的文法修改为自己的即可.<br/><br/>工程结构:<br/>Initializtion.h 初始化文法,便于进一步进行分析,它为构造GRAMMAR类提供了信息.其中默认非终极符用<>括上,修改时需要注意.<br/>Grammar.cpp Grammar.h 定义了文法GRAMMAR类,它通过initializtion.h的信息建立文法的内部表示。<br/>LL1_Analyser.cpp LL1_Analyser.h 定义了LL1分析器,即LL1_Analyser类.<br/>LL1_Recognizer.cpp LL1_Recognizer.h 为LL1语法分析驱动器,可以通过文法,TOKEN序列和LL1分析表,判定语法是否正确,同时驱动动作.<br/>Rec_Parse.cpp Rec_Pares.h 实现了递归下降分析器Rec_Parse类, 递归下降的思想和LL1驱动器一样,不过是把压栈改成调用自己,而把弹栈改成返回.<br/>Scanner.cpp Scanner.h 实现了词法分析器,可以将程序变为TOKEN序列. 扫描的源程序文件路径也在这里被定义(默认为.//demo.txt)<br/>Action.cpp Action.h 实现了语义栈的操作,_Action类定义了动作符号所对应的动作.<br/>SymTable.cpp SymTable.h 实现了符号表的建立和输出.<br/><br/>希望大家能通过该程序对STL和编译原理有更深刻的理解,Have Fun and Good Luck!<br/><br/> -- David.Morre

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值