CS143-PA4: 抽象语法树语义分析
2023-04-18 14:59:47 时间
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检查
- 检查条件表达式返回类型是否是
Bool
类型;
Case / Branch检查
- 检查是否存在重复分支,按照规范不应该存在;
Let检查
- 检查标识符声明的类型是否被定义;
- 检查标识符初始化过程中被推导出的类型是否与声明相符;
Plus, Sub, Mul, Div, Neg, LT, LEQ (+, -, *, /, ~, <, <=)
- 检查是否所有参数都是
Int
类型;
EQ检查 (=)
- 如果其中一个参数是
Int
,Bool
或者String
类型,其他参数也应该是相同类型;
Comp检查 (not)
- 检查参数类型是否为
Bool
类型;
New检查
- 检查
new
是否被用于未定义的类,按照规范不应该;
Object检查
- 检查标识符是否被声明。
相关文章
- 苹果将如何支撑旗下5大OS的未来?
- Siri开始说人话,声纹识别终到来,今天的苹果够AI
- iPadOS系统发布:桌面级体验 告别大号iPhone
- 苹果四大新系统兼容设备一览 没抛弃SE
- iTunes要关了,「买专辑」的时代结束了
- 华为被Wi-Fi联盟、SD协会等组织暂停成员资格
- 免root就能给手机装上双系统,三步搞定!
- 为什么Arm对华为禁令不会起到实质效果?
- 任正非:华为有三大突破点,要做就做世界第一
- 苹果、小米“变软”的尴尬:互联网服务营收迟迟扶不上墙
- 谷歌秘密硬件团队刚刚失去了三位重要成员
- 美国封杀中国5G 华为回应:限制华为不会让美国更强大
- 定了!11月底前在全国实施“携号转网”
- 6.6万部iPhone被销毁,你知道真相吗?
- 白天不懂夜的黑!Android Q拿什么打赢iOS 13
- iOS系统的底层通知框架库
- 像心理学家一样做设计!5个掌控用户行为的实用技巧
- IOS 13 新增8大功能,苹果又一产品再见...
- 当iPhone不再神奇,频繁人事变动显露苹果的艰难抉择
- Google意外发布了Fuchsia OS的第一个“候选版本”