神奇的编译原理

来源:互联网 发布:ubuntu修改文件夹权限 编辑:程序博客网 时间:2024/05/17 08:12

**

1.了解编译原理

**
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2.图解编译过程

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

3.编译原理

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

这里写图片描述
这里写图片描述
这里写图片描述

简单来讲就是和枚举出来的类型进行匹配判断,符合就归为此类,不符合再从能判定不符合的地方继续进行匹配判断
这里写图片描述
这里写图片描述
判断字母和数字的过程
这里写图片描述
右侧是执行程序 switch语句表示
这里写图片描述
这里写图片描述
动态想象
这里写图片描述
回顾

2.语法分析

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

这里写图片描述
看一看效果
这里写图片描述
再次看一看效果
这里写图片描述
判断出来main和fun是函数后……
这里写图片描述
语法树的强大

这里写图片描述
这里写图片描述
再来一遍执行,计算机就是这么拙!!!
必须要判断出来什么是什么,才能怎么什么!!
这里写图片描述
下面的过程简略
这里写图片描述
这里写图片描述
return语句goto处理
这里写图片描述
这里写图片描述
注意注意 导致跳转的语句是基本块的边界语句
这里写图片描述
下面的处理过程非天赋奇高,生下来就会敲代码者不能懂也!!!!
这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
执行
m=10
结束
清栈
Good Bye!

原创粉丝点击