README file for Programming Assignment 3 (C++ edition)
======================================================
目录下的文件:
```
handle_flags.cc 请勿修改,用语定义运行参数
semant-phase.cc 主入口,main所在地
semant.h 语义分析器头文件
semant.cc 语义分析器实现
seal-expr.cc expr的AST节点声明定义
seal-lex.cc 词法分析文件
seal-stmt.cc stmt的AST节点声明定义
seal-tree.handcode.h AST相关头文件
stringtab.h 字符串表头文件
tree.h 树头文件
cgen_gc.h cgen选项
judge.sh 判断脚本
README.md 说明文件
seal-expr.h expr的AST节点声明头文件
seal.output bison产生的状态机信息文件
seal-stmt.h stmt的AST节点声明
seal.y 语法分析规则文件
utilities.cc 杂项函数
copyright.h 版权
list.h 链表
seal-decl.cc decl的AST节点声明定义
seal.h seal相关头文件
seal-parse.cc bison生成的文件
seal.tab.h bison生成的文件
stringtab.cc 字符串表实现
utilities.h 杂项函数头文件
dumptype.cc AST输出实现
Makefile make规则文件
seal-decl.h decl的AST节点声明头文件
seal-io.h seal相关文件
seal-parse.h bison生成的文件
seal-tree.aps seal的AST树节点介绍文件
stringtab_functions.h 字符串表函数头文件
tree.cc 树实现
*.* 其他文件
```
```
你可以任意修改已知的代码,然后便于实现语义分析
semant.cc是你需要添加内容的文件. main()函数调用 `ast_root'的`semant'方法
, `ast_root'是语法分析产生的AST树的树根(不必理会这个树是如何生成的,代码已经是给出的).
semant.cc中提供了错误输出的函数,请不要修改这些函数,直接拿来调用就行了
```
Instructions
------------
```
构建语义分析器:
% make semant
测试某个样例
% ./semant < test.seal
清理临时文件
% make clean
GOOD LUCK!
```
---8<------8<------8<------8<---cut here---8<------8<------8<------8<---
Write-up for PA3
----------------
所有的检查项目:
### 函数
* [x] 是否有`main`函数
* [x] `main`函数返回值为Void
* [x] `main`函数没有参数
* [x] 没有重复的函数声明
* [x] `printf`不可重定义
* [x] `printf`必须有至少一个参数,且第一个参数类型必须为`String`
* [x] 返回值仅限于`Int` `Void` `String` `Float` 和`Bool`
* [x] `return`语句返回的类型和声明的一致
* [x] 每一个函数声明在最外层逻辑结束前(即函数体的最外层右大括号闭合前)一定要有一个`return`语句
```c++
// 例:
Int func fun1(Bool x) {
if x { return 1;}
else { return 0;}
return 1; // 必须有return
}
```
* [x] 每个函数最多有6个参数(来自《Seal++语法手册》2.3节)
* [x] 形参没有重复命名的
* [x] 形参类型不可以为`Void`
* [x] 全局变量没有重复命名的
* [x] 变量类型不可以为`Void`
* [x] 局部变量一定先声明再使用
* [x] install_calls函数将预先配置所有函数的声明(这样写在前面的函数也可以调用后面才声明的函数)
* [x] install_globalVars函数将预先配置所有全局变量的声明(这样全局变量在文件哪里定义就无所谓了)
* [x] 赋值语句右值和左值类型相符
* [x] 函数调用时的实参一定要和声明的形参一致,且数目相同
* [x] `if`、`while`条件部分的类型一定是`Bool`,`for`的条件部分可以置空语句
* [x] 运算符的操作数必须满足类型约束,即四则运算和比较运算可以在`Int`和`Float`之间混合发生,布尔运算只能在`Bool`之间发生,位运算只能在`Int`之间发生
* [x] `continue`和`break`必须位于某一个循环体内
## 测试
`judge.sh`是测试脚本.
运行 `./judge.sh` 或者 `bash judge.sh`, 应该得到类似下列输出:
```
--------Test using test10.seal --------
Passed
--------Test using test1.seal --------
Passed
--------Test using test2.seal --------
20: object c has not been defined.
Compilation halted due to static semantic errors.
Passed
--------Test using test3.seal --------
12: Returns Bool , but need Void
Compilation halted due to static semantic errors.
Passed
--------Test using test4.seal --------
Passed
--------Test using test5.seal --------
Passed
--------Test using test6.seal --------
6: Main function should have return type Void.
9: break must be used in a loop sentence.
Compilation halted due to static semantic errors.
Passed
--------Test using test7.seal --------
Passed
--------Test using test8.seal --------
13: Function loop, the 1 parameter should be Bool but provided a Float.
7: Function main must have an overall return statement.
Compilation halted due to static semantic errors.
Passed
--------Test using test9.seal --------
Passed
```
没有合适的资源?快使用搜索试试~ 我知道了~
编译原理大作业 包含词法分析(15),语法分析(10),语义分析(10),目标代码生成(5)4个环节,总计40分+源代码+文档说
共307个文件
h:62个
cc:48个
o:46个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 57 浏览量
2024-01-07
20:27:27
上传
评论
收藏 26.31MB ZIP 举报
温馨提示
编译原理大作业 包含词法分析(15),语法分析(10),语义分析(10),目标代码生成(5)4个环节,总计40分+源代码+文档说 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
编译原理大作业 包含词法分析(15),语法分析(10),语义分析(10),目标代码生成(5)4个环节,总计40分+源代码+文档说 (307个子文件)
seal-tree.aps 3KB
seal-tree.aps 3KB
lex.yy.c 51KB
lex.yy.c 44KB
lex.yy.c 43KB
demo.c 115B
seal-parse.cc 80KB
seal-parse.cc 80KB
seal-parse.cc 79KB
seal-parse.cc 79KB
seal-lex.cc 66KB
seal-lex.cc 66KB
seal-lex.cc 66KB
seal-lex.cc 66KB
semant.cc 22KB
semant.cc 22KB
dumptype.cc 16KB
dumptype.cc 16KB
dumptype.cc 16KB
dumptype.cc 16KB
seal-expr.cc 8KB
seal-expr.cc 8KB
seal-expr.cc 8KB
seal-expr.cc 8KB
utilities.cc 8KB
utilities.cc 8KB
utilities.cc 8KB
utilities.cc 8KB
handle_flags.cc 3KB
handle_flags.cc 3KB
handle_flags.cc 3KB
handle_flags.cc 3KB
seal-stmt.cc 3KB
seal-stmt.cc 3KB
seal-stmt.cc 3KB
seal-stmt.cc 3KB
seal-decl.cc 2KB
seal-decl.cc 2KB
seal-decl.cc 2KB
seal-decl.cc 2KB
stringtab.cc 2KB
stringtab.cc 2KB
stringtab.cc 2KB
stringtab.cc 2KB
parser-phase.cc 2KB
parser-phase.cc 2KB
symtab_example.cc 2KB
symtab_example.cc 2KB
tree.cc 1KB
tree.cc 1KB
tree.cc 1KB
tree.cc 1KB
semant-phase.cc 964B
semant-phase.cc 964B
CountDigit 23KB
SEAL++语法手册.docx 647KB
语义分析作业要求.docx 34KB
语法分析作业要求.docx 30KB
附带代码包.docx 30KB
平台建立方法.docx 26KB
概述.docx 26KB
词法分析作业要求.docx 25KB
~$分析作业要求.docx 162B
semant.h.gch 13KB
semant.h.gch 13KB
tree.h 12KB
tree.h 12KB
tree.h 12KB
tree.h 12KB
seal-expr.h 12KB
seal-expr.h 12KB
seal-expr.h 10KB
seal-expr.h 10KB
seal-parse.h 6KB
seal-parse.h 6KB
seal-parse.h 6KB
seal-parse.h 6KB
symtab.h 5KB
symtab.h 5KB
seal-stmt.h 5KB
seal-stmt.h 5KB
stringtab.h 4KB
stringtab.h 4KB
stringtab.h 4KB
stringtab.h 4KB
seal-stmt.h 4KB
seal-stmt.h 4KB
seal.tab.h 4KB
seal.tab.h 4KB
seal-tree.handcode.h 3KB
seal-tree.handcode.h 3KB
seal-tree.handcode.h 3KB
seal-tree.handcode.h 3KB
seal-decl.h 3KB
seal-decl.h 3KB
stringtab_functions.h 2KB
stringtab_functions.h 2KB
stringtab_functions.h 2KB
stringtab_functions.h 2KB
seal-decl.h 2KB
共 307 条
- 1
- 2
- 3
- 4
资源评论
机智的程序员zero
- 粉丝: 2253
- 资源: 4286
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功