神奇的编译原理

**

1.了解编译原理

**
神奇的编译原理_第1张图片
神奇的编译原理_第2张图片神奇的编译原理_第3张图片
神奇的编译原理_第4张图片
神奇的编译原理_第5张图片
神奇的编译原理_第6张图片
神奇的编译原理_第7张图片
神奇的编译原理_第8张图片

2.图解编译过程

1.预编译
神奇的编译原理_第9张图片
2.动态说明程序在计算机中的运行
神奇的编译原理_第10张图片
程序如右侧所示
神奇的编译原理_第11张图片
ebp指向栈底,esp指向栈顶。顺序执行或者跳转:执行完eip跳转到指定的位置,该位置需从动态数据区读取
神奇的编译原理_第12张图片
蓝色区域存储的第一格内容是ebp开始时指向的地址神奇的编译原理_第13张图片
对fun函数的处理
神奇的编译原理_第14张图片
程序运行的过程就是不断压栈和清栈的过程,先进先出
fun执行完开始清除,通过main函数地址回到main再继续执行
神奇的编译原理_第15张图片
神奇的编译原理_第16张图片
神奇的编译原理_第17张图片

3.编译原理

1.词法分析
程序可以看成一串非常长的字符,计算机中用ascii码表示
根据跟进规则遍历确定标识符,当能确定的时候,除非空格,从能确定的地方再开始遍历

神奇的编译原理_第18张图片
神奇的编译原理_第19张图片
神奇的编译原理_第20张图片

简单来讲就是和枚举出来的类型进行匹配判断,符合就归为此类,不符合再从能判定不符合的地方继续进行匹配判断
神奇的编译原理_第21张图片
神奇的编译原理_第22张图片
判断字母和数字的过程
神奇的编译原理_第23张图片
右侧是执行程序 switch语句表示
神奇的编译原理_第24张图片
神奇的编译原理_第25张图片
动态想象
神奇的编译原理_第26张图片
回顾

2.语法分析

编译全过程
神奇的编译原理_第27张图片
神奇的编译原理_第28张图片
根据一系列枚举出来的语法规则进行匹配判断,从而归类
神奇的编译原理_第29张图片
存储类型static和extern两类,int不符合,pass
神奇的编译原理_第30张图片
如果遇到变换无穷的怎么用匹配判断?如if-else大量嵌套语句
神奇的编译原理_第31张图片
用产生式解决
神奇的编译原理_第32张图片
陷入了循环(左递归),召唤T1,T2兄弟
神奇的编译原理_第33张图片
神奇的编译原理_第34张图片
神奇的编译原理_第35张图片
以上为int fun在产生式系统中的判断
用以上的方式进行判断心累,因为匹配不成功就得回溯
神奇的编译原理_第36张图片
神奇的编译原理_第37张图片
匹配成功要执行多少次????
神奇的编译原理_第38张图片
神奇的编译原理_第39张图片
int fun 可能是函数也可能只是函数声明,声明的话现在不用执行,这么多次费劲地判断它不值啊
想办法简化合并
神奇的编译原理_第40张图片
神奇的编译原理_第41张图片
神奇的编译原理_第42张图片
神奇的编译原理_第43张图片

神奇的编译原理_第44张图片
看一看效果
神奇的编译原理_第45张图片
再次看一看效果
神奇的编译原理_第46张图片
判断出来main和fun是函数后……
神奇的编译原理_第47张图片
语法树的强大

神奇的编译原理_第48张图片
神奇的编译原理_第49张图片
再来一遍执行,计算机就是这么拙!!!
必须要判断出来什么是什么,才能怎么什么!!
神奇的编译原理_第50张图片
下面的过程简略
神奇的编译原理_第51张图片
神奇的编译原理_第52张图片
return语句goto处理
神奇的编译原理_第53张图片
神奇的编译原理_第54张图片
注意注意 导致跳转的语句是基本块的边界语句
神奇的编译原理_第55张图片
下面的处理过程非天赋奇高,生下来就会敲代码者不能懂也!!!!
神奇的编译原理_第56张图片
神奇的编译原理_第57张图片

就这么一步步变成了汇编代码 add ……………………
mult……………………

神奇的编译原理_第58张图片
神奇的编译原理_第59张图片
神奇的编译原理_第60张图片
神奇的编译原理_第61张图片
神奇的编译原理_第62张图片
执行
m=10
结束
清栈
Good Bye!

你可能感兴趣的:(计算机科学与技术)