博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
语法制导翻译——语义分析
阅读量:4657 次
发布时间:2019-06-09

本文共 666 字,大约阅读时间需要 2 分钟。

  • 语义分析中间代码生成可以同时进行,称为语义翻译
  • 语法分析语义分析中间代码生成可以同时进行,称为语法制导翻译

参考:

 

  1. SDT中的语义分析,和中间代码生成绑到一块了;
  2. 在花括号中执行语义动作(可以包括生成中间代码和类型检查),就认为是计算了节点属性;

  参考:第三个回答

  1. 而属性是什么完全是看需求来的。

 

预备知识:

  1. PLY不会为用户生成符号表,参考龙书P53知符号表不一定要在词法分析时创建,可以在语法分析时创建,每次遇到标识符的声明即在符号表中创建一个该标识符的条目,符号表参考要检查的错误类型确定其数据类型,P56标明使用SDT和使用符号表的关系

  2. 在语法分析构建语法分析树时添加语义动作,包括类型检查和中间代码生成。添加的动作在parser.py中尽量简洁,可以引入自定义模块,使用该模块中的方法。

  参考: 在语法树上实现SDT部分

语义分析需要检查的错误类型:

  1. 声明时看是否重复声明,否则添加声明,
  2. 使用变量时看是否声明
  3. 赋值时判断两边类型是否一致
  4. 对方法查看是否有该内置方法,
  5. 方法的参数类型,个数是否正确

所有错误类型参考:

 

 

参考:

语义分析错误类型:

语法制导翻译过程:

编译原理国外系列教程,含SDT:

自己动手开发编译器之语义分析,含JAVA代码:

阿里大佬写的语法树和分析树,解释器的实现

语义分析总结性博客:

AST到中间代码生成,以js为例:

没看的,SDT的介绍:

 

编译器优化

可以参考的资料:

转载于:https://www.cnblogs.com/IcarusYu/p/11021733.html

你可能感兴趣的文章
.net 使用AgsXMPP与openfire连接,实现跨平台信息流通。
查看>>
DP动态规划【专辑@AbandonZHANG】
查看>>
Android TextureView简易教程
查看>>
fatal: the remote end hung up unexpectedly
查看>>
Delphi-操作剪贴板
查看>>
hdu 1029
查看>>
Docker 容器的网络连接 & 容器互联
查看>>
吾爱专题脱壳练习----压缩壳练习之三
查看>>
LeetCode -- Palindrome Linked List
查看>>
栈应用——逆波兰式表达式的值
查看>>
vscode 快速生成html
查看>>
HTML5 全屏化操作功能
查看>>
返本求源——DOM元素的特性与属性
查看>>
4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托
查看>>
部署DLL webservices 若干费脑点
查看>>
zabbix监控报错zabbix server is not running解决方法
查看>>
MyEclips快捷键,多行注释
查看>>
【原】ios打包ipa的四种实用方法(.app转.ipa)
查看>>
python中的nonloca和global
查看>>
JavaScript延时执行函数中对call和apply的应用
查看>>