前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CS143-PA4: 抽象语法树语义分析

CS143-PA4: 抽象语法树语义分析

作者头像
hunterzju
发布2021-12-09 14:25:39
7460
发布2021-12-09 14:25:39
举报
文章被收录于专栏:编译器开发

Class检查

  • class符号表中添加了5种基本类(Object, IO, Int, Bool, Str);
  • 检查主类Main和主函数main是否定义,按照规范应该被定义;
  • 检查SELF_TYPE类是否被定义,按照规范不应该被定义;
  • 检查类(class)或者函数(method)是否被重复定义,按照规范不应该被定义;
  • 检查是否存在自定义类继承了Int,Str,Bool,SELF_TYPE或者未定义的类,按照规范不应该存在;
  • 检查类的父类(parent class)(默认父类为Object)是否存在,按照规范应该存在;
  • 检查类之间继承关系是否构成环,按照规范不应该构成。

Method检查

  • 当子类重载父类中定义的方法时,检查函数参数数量,参数类型和返回值是否与父类中的定义一致;
  • 检查形式参数中是否包含self,按照规范不应该包含;
  • 检查形式参数是否被重复定义,按照规范不应该被重复定义;
  • 检查形式参数的类型是否被定义,按照规范应该被定义;
  • 检查返回类型是否被定义,按照规范应该被定义;
  • 检查推导出来的返回类型和声明的返回类型是否一致,按照规范应该一致。

Attribute检查

  • 检查属性的类型声明是否被定义,按照规范应该定义;
  • 检查属性初始化时被推导出的类型与声明是否符号,按照规范应该符合。

Assign检查

  • 检查标识符是否定义,按照规范应该定义;
  • 检查assign语句的返回类型与声明是否一致,按照规范应该一致。

Dispatch检查(调用检查)

  • 检查静态调用声明的类型是否被定义,仅在静态调用时检查,按照规范应该被定义;
  • 检查表达式类型是否被定义,按照规范应该被定义;
  • 检查表达式类型与静态调用的声明是否符合,仅在静态调用时检查,按照规范应该符合;
  • 检查函数是否被定义,按照规范应该被定义;
  • 检查实参和形参的类型是否符合,按照规范应该符合;
  • 检查函数调用的参数数量与定义是否符合,按照规范应该符合。

Cond & Loop检查

Case / Branch检查

  • 检查是否存在重复分支,按照规范不应该存在;

Let检查

  • 检查标识符声明的类型是否被定义;
  • 检查标识符初始化过程中被推导出的类型是否与声明相符;

Plus, Sub, Mul, Div, Neg, LT, LEQ (+, -, *, /, ~, <, <=)

  • 检查是否所有参数都是Int类型;

EQ检查 (=)

  • 如果其中一个参数是Int,Bool或者String类型,其他参数也应该是相同类型;

Comp检查 (not)

  • 检查参数类型是否为Bool类型;

New检查

  • 检查new是否被用于未定义的类,按照规范不应该;

Object检查

  • 检查标识符是否被声明。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Method检查
  • Attribute检查
  • Assign检查
  • Dispatch检查(调用检查)
  • Cond & Loop检查
  • Case / Branch检查
  • Let检查
  • Plus, Sub, Mul, Div, Neg, LT, LEQ (+, -, *, /, ~, <, <=)
  • EQ检查 (=)
  • Comp检查 (not)
  • New检查
  • Object检查
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档