关于编译的一些思路和猜想

一、编译原理的难度

编译原理特别复杂,研究的是高级语言如何翻译成汇编语言的过程。


二、编译过程中一些思路

(一)语义识别的作用
语义识别指的是把一些无关字符忽略,把一些变量名保存在一起,把用空格隔开的关键字单独放一起。

例如:
从源代码第一个字符开始遍历,如果:
1、遇到 //开头的字符,那么后面直到换行符之间的字符都是注释,就可以忽略。

2、如果遇到一个字符,它的左边是一行的开头,或者是空格,那么保存起来,继续读取直到下一个空格或者特殊符(特殊符是各种括号,各种运算符),就把这一段字符集中保存在一起。

3、判断第2步获取的字符是变量名,还是关键字。

4、遇到运算符或者括号就保存起来,作为一个单位。

5、遇到语句结束符也单独作为一个单位。


(二)语法判断的思路
1、把从语义识别过程中得到的每个单位构造成一棵树。

2、树的根是每个重新开始的语义单位,例如 var、 for、while、int等等。

3、根节点的子节点是遍历过程中出现的下一个语义单位。

4、持续第3步,直到语句结束符;的添加。

5、根据编程语言的设计规则,来判断以上构造的语法树是否合法。
也就是判断每个节点是否允许出现该子节点,例如 for节点是否允许出现 int节点?不能。for节点一般子节点是 左花括号{节点。

语法判断完成后,就能得出程序编码是否有错误。


(三)把每个语法树转成汇编语言
1、把声明和创建变量的代码替换为 分配内存空间,把变量名和内存地址号保存起来。

2、如果是循环,就建立一个子程序,名字是唯一生成的,把循环体作为子程序的内容,循环验证条件就转换成汇编的判断条件。

如果满足就调用子程序,不满足就结束子程序。

3、如果使用网络读写、磁盘读写,就调用对应的主板中断程序。

4、如果是一些运算,就用对应的汇编运算符来替代,把结果存入寄存器或者内存块中。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值