编译器之语义分析
2016-07-20 19:36
260 查看
semantic: 语言的意义
编译器的语义分析阶段将变量与其用法关联起来,检查每个表达式是否有正确的类型,还有, 将抽象的语法翻译成更简单的形式以
方便生成机器语言(码)。
要知道这些函数,变量的意义时,就去这个表里查。
每一个局部变量都有其作用域(scope). 举个例子, let D in E end
所有在D里面声明的变量、类型,还有函数只能在E结束之前是可见的,相应的,语义分析到达一个作用末尾时,后续的就直接丢弃处理。
我们将多个这种绑定叫做环境(environment), 用箭头 |-> 表示,比如, {g |->string, a|-> int|, 其函义为a是一个整型变量,g是一个字符串
型变量。
举一个简单的例子:
编译器的语义分析阶段将变量与其用法关联起来,检查每个表达式是否有正确的类型,还有, 将抽象的语法翻译成更简单的形式以
方便生成机器语言(码)。
符号表
符号表将标识符和其类型、位置关联起来,当我们去处理变量,函数的声明时,就是将这些信息组织(绑定)起来,放在表里,当需要知道这些函数,变量的意义时,就去这个表里查。
每一个局部变量都有其作用域(scope). 举个例子, let D in E end
所有在D里面声明的变量、类型,还有函数只能在E结束之前是可见的,相应的,语义分析到达一个作用末尾时,后续的就直接丢弃处理。
我们将多个这种绑定叫做环境(environment), 用箭头 |-> 表示,比如, {g |->string, a|-> int|, 其函义为a是一个整型变量,g是一个字符串
型变量。
举一个简单的例子:
function f(a:int, b:int, c:int) = (print_int(a+c); let var j := a+b var a := "hello" in print(a); print_int(j) end; print_int(b) )
相关文章推荐
- Biker's Trip Odometer(求平均速度)
- Python从入门到放弃(三):基本语句和语法
- __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
- python运行不了 AttributeError: module object has no attribute getdefaultlocale
- 内存管理
- clipchildren 咸鱼app 中间 图标很大的 底部 tab栏 实现方案
- listview、scollview、webview的下拉刷新,上拉加载。效果特别好,带刷新时间和图片
- [CentOS] 结合Nginx部署DotNetCore的demo项目
- HTML5和CSS3实例教程[总结二]
- POJ 2777 Count Color
- 【Poj】-1363-Rails(栈)
- 三态门的概念
- 常用rsync命令操作梳理
- Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for use
- 黑马程序员_Map集合中按value值进行排序
- php基础要点总结
- 29. Divide Two Integers
- 调试CAN程序时遇到的几个问题
- leetcode Generalized Abbreviation
- 浅谈fork与vfork函数