自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析
2023-03-09 22:21:44 时间
2.1.4 语义分析
编译原理教材中,将语言的文法分为4种:0型、1型、2型、3型,并且这几类文法对语言的描述能力依次减弱。其中,3型文法也称为正规文法,词法分析器中有限自动机能处理的语言文法正是3型文法。2型文法也称为上下文无关文法,也是目前计算机程序语言所采用的文法。顾名思义,程序语言的文法是上下文无关的,即程序代码语句之间在文法层次上是没有关联的。例如在分析赋值语句时,LL(1)分析器无法解决“被赋值的对象是已经声明的标识符吗?”这样的问题,因为语法分析只关心程序语言语法形式的正确性,而不考虑语法模块上下文之间联系的合法性。
然而实际的情况是,程序语言的语句虽然形式上是上下文无关的,但含义上却是上下文相关的。例如:不允许使用一个未声明的变量,不允许函数实参列表和形参列表不一致,不允许对无法默认转换的类型进行赋值和运算,不允许continue语句出现在循环语句之外等,这些要求是语法分析器不能完成的。
根据本书设计的程序语言文法,编译器的语义分析模块(见图2-7)处理如下类似问题:
1)变量及函数使用前是否定义?
2)break语句是否出现在循环或switch-case语句内部?
3)continue语句是否出现在循环内部?
4)return语句返回值的类型是否与函数返回值类型兼容?
5)函数调用时,实参列表和形参列表是否兼容?
6)表达式计算及赋值时,类型是否兼容?
语义分析是编译器处理流程中对源代码正确性的最后一次检查,只要源代码语义上没有问题,编译器就可以正常引导目标代码的生成。
相关文章
- 腾讯云轻量云服务器、云服务器如何进行内网互联?
- Linux service、systemd的作用和用法是什么?
- Olaparib 有望治疗 UBQLN4 过表达型肿瘤 | MedChemExpress
- selenium 自动化测试 Chrome 大于 63 版本 不能重定向问题解决办法
- WordPress主题开发,从入门到精通。
- 修改人人商城核销码有效时间
- Selenium Chrome 版本与 ChromeDriver 版本兼容对照对比
- 记录自己常用的PHPStorm文件代码模板
- django sitemap.xml 修改 loc 显示的 example.com
- 正则断言有哪几种?正则如何实现与或非?
- django 按年月日归档
- Stylelint该如何配置?Stylelint使用以及相关配置说明
- Eslint该如何配置?Eslint使用以及相关配置说明
- Vue 2.7 “Naruto”发布,新特性介绍
- Vite4新特性介绍,相较于Vite3有哪些新功能?
- nginx 同一 iP 多域名配置方法(多子配置文件,含 https)
- Openresty、Lua学习笔记,从入门到精通,持续记录
- adb 官方文档介绍
- 如何取消Chrome浏览器跨域请求限制、跨域名携带Cookie限制、跨域名操作iframe限制?
- composer 国内镜像