| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 华中科技大学编译原理实验四攻略|完整版 -> 正文阅读 |
|
[C++知识库]华中科技大学编译原理实验四攻略|完整版 |
文章目录写在最前刚刚看到有答案,那散了散了,这个是我写实验报告用来参考的东西,具体怎么写你们直接看答案吧。 Quick Start使用头歌命令行调试 打开头歌,打开命令行,进入代码仓库。
然后不要思考,直接make。
生成
在代码仓库下有测试样例,以第3关为例,对应 用minic编译一个样例,并将中间代码存储至
编译任何一个样例,得到中间代码。 如果生成中间代码成功了, 如果这是一个正确的中间代码,而且它需要编译运行,并接收一定的输入,请这样:
第1关主要是根据c语言翻译,有两个地方对我造成了困扰:
第2关官方对于IF-ELSE等基本块的操作,跟着官方来很好做。。
第3关1. astnode.cpp需要修改的函数正好十个。
2. astnode.h需要修改的函数
3. 一个分析过程4. 举几个典型的例子4.1. 各种List
4.2 错误判断++ 错误类型 1:变量在使用时未经定义。 4.3 难点
4.4 调试经验在头歌修改代码后,命令行可能没有同步。此时先点击提交,命令行就会同步了。在命令行用make编译,编译成功后,这样调试:
就有输出。 如果你对它的解析过程完全不了解,可以这样:
第4关有了第3关的基础,第四关明显简单了许多。 1. astnode.cpp需要修改的函数只有四个,非常快乐。
2. 难点2.1 一些函数出现了很多老师没给样例的函数。
我是如何查找的?【经验分享】
2.2 NArgs如何解析
正解:参考NFunDec::funcodegen中对NVarList的解析即可。
注意,exp解析得到的Value*的类型,直接用getType就可以取到了,很好写,不要想太复杂了。 3. 错误判断++ 错误类型 4:函数出现重复定义(即同样的函数名被多次定义)。
++ 错误类型 5:赋值号两边的表达式类型不匹配。 ++ 错误类型 6:赋值号左边出现一个只有右值的表达式。 ++ 错误类型 7:return 语句的返回类型与函数定义的返回类型不匹配。 ++ 销误类型 8:函数调用时实参与形参的数目或类型不匹配。 没什么好说的叭,能写出第三题没理由写不出错误判断。 第5关1. astnode.cpp需要修改的函数
2. astnode.h需要修改的函数
3. 分析思路首先看样例: 这个题没有涉及任何错误判断,需要完成的是算术运算 3.1 if-else结构其中ifelse结构直接参考实验2的,对应的是NIfElseStmt::codegen,应该没什么好说的吧。写了这个之后样例1就都过了。 样例1:
3.2 变量的作用域问题看样例3:
因为一些因素,我没有用样例分析,而是用了更复杂的深层结构,分析以及伪代码如下。 3.3 或运算||的解析提示:用基本块。多看看生成的中间代码和预期的区别。 贴一下报错,这个报错是因为while循环过多栈炸了,可能是因为条件判断写得有问题,心态稳住。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:54:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |