编译原理小结

编译原理

1. 编译的过程:
		词法分析 --> 语法分析 --> 语义分析 --> 生成中间代码 --> 代码优化 --> 汇编代码(或者直接就是机器码)
	到这里编译器的工作就已经完成了
	
	接下来就是让汇编器登场了, 汇编器将代码汇编成机器码(.o文件), 接着分两种情况:
		if 采用静态链接库:	在汇编完成之后直接链接生成可执行文件
		else if 采用动态链接库: 在汇编完成之后, 除了链接标准C库中的RuntimeLibrary(有了他, main函数才会被调用)中的库(.o)之外其余的都不链接,
				 等到运行时再调用动态链接器动态的链接, 达到节省内存的效果, 但是与静态链接库相比, 启动的速度稍微慢一些
				 
2. 词法分析:
	单个字符读取, 将读取到的关键词, 标识符, 常量等存储到符号表中
		比如:
			读取到一个'a'时, 继续读取, 知道读取到一个' '或者'\t'时停止读取, 那么在这之前读到的就是标识符了, 我们假设就是'abc', 显然它是一个标识符, 我们将它
		以<标识符, 'abc'>的形式存到符号表中, 如果读到的是'if'这个关键字时, 怎么能让程序知道这是关键字呢? 很显然我们在程序运行时需要初始化一个标识符的字典, 
		里面存放的是if, while等关键字, 这样只需要在这个字典中寻找即可.
		
3. 语法分析:
	在进行词法分析的同时, 语法分析器也在工作, 他根据词法分析器的输出构建语法分析树(展示的是计算的逻辑)
	
4. 总之在进行完上述的操作之后, 会通过语法分析树这样一个有逻辑的树生成中间的代码, 有点类似于Python中的字节码指令, 接着在解释器执行的时候, 他只要读取这些执行就可以了


posted @ 2018-06-08 17:09  gogogo11  阅读(289)  评论(0编辑  收藏  举报