编译原理复习第一篇

1.编译原理的“前端”和“后端”

“前端”指的是编译器对程序代码的分析和理解过程。它通常只跟语言的语法有关,跟目标机器无关。而与之对应的“后端”则是生成目标代码的过程,跟目标机器有关。整个编译过程简要,如图:

 2.词法分析

用一套定义好的词法正则来解析程序字符串,最终得到单词。

3.语法分析:

用定义好的语法规则,生成AST语法树。这样计算机就知道如何执行一句一句的程序语句了。

4.demo:

查看以下网址,看看js代码生成的AST语法树。

https://resources.jointjs.com/demos/javascript-ast

 

5.常用的快速生成AST语法树的工具

https://blog.csdn.net/gongwx/article/details/99645305

 

6.语义分析:

对AST语法树的各个节点增加属性。具体做的事情是,比如:

  • 某个表达式的计算结果是什么数据类型?如果有数据类型不匹配的情况,是否要做自动转换?

  • 如果在一个代码块的内部和外部有相同名称的变量,我在执行的时候到底用哪个? 就像“我喜欢又聪明又勇敢的你”中的“你”,到底指的是谁,需要明确。

  • 在同一个作用域内,不允许有两个名称相同的变量,这是唯一性检查。你不能刚声明一个变量 a,紧接着又声明同样名称的一个变量 a,这就不允许了。

7.总结:

  • 词法分析是把程序分割成一个个 Token 的过程,可以通过构造有限自动机来实现。

  • 语法分析是把程序的结构识别出来,并形成一棵便于由计算机处理的抽象语法树。可以用递归下降的算法来实现。

  • 语义分析是消除语义模糊,生成一些属性信息,让计算机能够依据这些信息生成目标代码。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值