编译原理实验4:中间代码生成实验包-C++文档类资源-CSDN下载编译原理实验4:中间代码生成实验包更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_48456383/85358075

参考的一些有关mips的博客

Compiler Explorerhttps://godbolt.org/ 
MIPS指令集:寄存器_无色云的博客-CSDN博客_mips寄存器   不同的计算机架构中寄存器的种类和数量也不相同。MIPSmips中用到的寄存器按照功能分为有通用寄存器、协处理器0、浮点寄存器、乘法部件寄存器。通用寄存器共32个,是没有特殊限制,一般程序员可以使用的寄存器。协处理器0寄存器也叫控制寄存器,共32个,用来控制并管理CPU。浮点寄存器和乘法部件寄存器都是专用寄存器。浮点寄存器也叫协处理器1寄存器,共32个,用来存储和浮点计算相关的数据。乘法部件...https://blog.csdn.net/weixin_38669561/article/details/104859871

MIPS汇编语言SYSCALL指令的用法_csshuke的博客-CSDN博客_mips syscallSYSCALL functions available in MARSIntroductionA number of system services, mainly for input and output, are available for use by your MIPS program. They are described in the table below.Mhttps://blog.csdn.net/csshuke/article/details/48542677

mips指令集(功能分组)_monkeyzh123的博客-CSDN博客_mips指令集指令组指令空操作nop、ssnop(不能和其他指令同时发射,至少需要一个时钟周期)寄存器间的数据传送指令move、movf、movt、movn、movz(后四个为条件传递指令)常数加载指令dla、la(获取某些标号地址或程序中变量地址的宏指令);dli、li(加载常数立即数指令);lui(加载高位立即数指令)算术/逻辑操作指令addu、addiu、daddu,daddiu(加法指令);dsub、sub(会触发溢出...https://blog.csdn.net/monkeyzh123/article/details/121167856

MIPS小总结__YiFei的博客-CSDN博客_mips 二维数组MIPS读入输出字符串输出.ascii与.asciiz.ascii不会在字符串后加上'\0',而.asciiz会在字符串加'\0'。两者均以字节为单位存储数据,这会对我们带来一些小麻烦,.asciiz之后分配的空间首地址有可能无法字对齐,因此我们在定义.ascii与.asciiz时尽量写在最后面#正确写法.dataarray_int: .space 28space: .asciiz " "#错误示范.dataspace: .asciiz " " array_int: .sphttps://blog.csdn.net/qq_45551930/article/details/109641713?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165234369916781432926253%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165234369916781432926253&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-6-109641713-null-null.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=mips+scanf&spm=1018.2226.3001.4187

【MIPS汇编编程练习Lab2】加减乘除 简单运算_Taneeyo的博客-CSDN博客_mips 加法整数加法.datanum1:.word 5num2:.word 10.textlw $t0,num1($zero)lw $t1,num2($zero)add $t2,$t0,$t1 # t2 = t0 + t1li $v0 ,1add $a0,$zero,$t2syscall另一版本.data a: .word 3b: .word 7.textlw $t0,a lw $t1,badd $t2,$t1,$t0li $v0,https://blog.csdn.net/Taneeyo/article/details/116136050

【问题描述】

请在词法分析、语法分析及错误处理作业的基础上,为编译器实现语义分析、代码生成功能。输入输出及处理要求如下:

(1)需根据文法规则及语义约定,采用自顶向下的语法制导翻译技术,进行语义分析并生成目标代码(任选其一);

(2)对于选择生成MIPS的编译器,约定如下:

完成编译器,将源文件(统一命名为testfile.txt)编译生成MIPS汇编并输出到文件(统一命名为mips.txt),具体要求包括:

a)需自行设计四元式中间代码,再从中间代码生成MIPS汇编,请设计实现输出中间代码的有关函数,本次作业不考核,后续会有优化前后中间代码的输出及评判(输出文件命名为学号_姓名_优化前/后中间代码.txt)。

b)若选择此项任务,后续的作业需参加竞速排序,请提前预留代码优化有关的接口,并设计方便切换开启/关闭优化的模式

c)自行调试时,可使用Mars仿真器(使用方法见“Mars仿真器使用说明.docx”),提交到平台的编译器只需要能按统一的要求生成MIPS汇编代码文件即可

d)此类提交的编译器请仅读取testfile.txt文件并生成相应的MIPS代码,编译器自身不要读入标准输入中的内容。

(3)对于选择生成PCODE的编译器,约定如下:

完成编译器和解释执行程序,将源文件(统一命名为testfile.txt)编译生成PCODE目标代码并解释执行,得到解释执行的结果(以输出至"pcoderesult.txt"文件中的形式给出),具体要求包括:

a)需自行设计PCODE,可参考PASCAL-S编译器的处理

b)将生成的PCODE直接进行解释执行,在提交的作业中不需要输出PCODE

c)执行PCODE时,输入从标准输入中读取;输出至pcoderesult.txt文件中

【输入形式】testfile. txt为符合文法要求的测试程序,另外可能存在来自于标准输入的数据。

【输出形式】 按照选择的不同难度分为两类:

1)生成MIPS的编译器

按如上要求将目标代码生成结果输出至mips.txt中,中文字符的编码格式要求是UTF-8。

2)生成PCODE的编译器

按如上要求生成PCODE并解释执行,在pcoderesult.txt中记录解释执行结果,中文字符的编码格式要求是UTF-8。

【样例输入】

testfile.txt如下:

int test;
void main(){printf("Hello World");scanf(test);printf(test);
}

标准输入如下:

1837

【样例输出】

Hello World
1837

【评分标准】

按与预期结果不一致的行数扣分,每项扣10%。

【特别说明】

(1)本次作业是为了让同学们尽快实现一个完整的编译器,测试程序中仅涉及常量说明、变量说明、读语句、写语句、赋值语句,无函数定义及调用,无数组声明及引用。

(2)两种目标代码任选其一完成,若生成PCODE代码,成绩总分为85分;若生成MIPS汇编,成绩总分为100分;请严格按照目标代码的输入输出要求完成,以免造成评判错误。

(3)本次作业仅用正确的测试程序进行考核,但产生的编译器应具有错误处理能力。

【目标代码说明】

(1)PCODE代码的定义可参见教材《编译技术》P458,张莉等,高等教育出版社,Pascal-S指令代码集,可以进行修改,解释执行程序也可以借鉴Pascal-S编译器源码中的解释执行程序,若PCODE代码修改了请相应修改解释执行程序

(2)MIPS代码可以选择基础指令及伪指令,不能选择宏指令; MARS 使用 4.5 版本,请下载修改过的版本,关闭延迟槽,内存配置为默认选项

这个实验水一水吧,工程量太大了,首先还是基于实验一,词法分析,实验二,语法分析的基础上去写。

用到之前的KV.h,error.h,ConstantAndVariable.h,Function.h

编译原理实验:错误处理程序(2)_奶奶滴,为什么不学java的博客-CSDN博客工具类函数:首先是KV.h,用来保存键值对#ifndef __KV_H__#define __KV_H__#include <algorithm>#include <ctype.h>#include <fstream>#include <iostream>#include <map>#include <stdlib.h>#include <string.h>#include <vector&https://blog.csdn.net/weixin_48456383/article/details/124610075用到之前的token.h,grammar.h

编译原理实验:错误处理程序(3)_奶奶滴,为什么不学java的博客-CSDN博客词法分析处理程序Token.h 用于词法分析class Token {private: string filename; map<string, string> Category_code = { { "identifier", "IDENFR" }, { "else", "ELSETK" }, { "-", "MINU" }, { "=", "ASSIGN" }, { "int_constant",https://blog.csdn.net/weixin_48456383/article/details/124610195

编译原理实验:代码生成作业(2)_奶奶滴,为什么不学java的博客-CSDN博客目录Code.h 生成mips中间代码主函数Code.h 生成mips中间代码在之前实验三的基础上改的,有冗余代码,我也不想删了#ifndef __CODE_H__#define __CODE_H__#include <ConstantAndVariable.h>#include <Function.h>#include <KV.h>#include <algorithm>#include <ctype.h&..https://blog.csdn.net/weixin_48456383/article/details/124743494 编译原理实验:代码生成作业(3)_奶奶滴,为什么不学java的博客-CSDN博客作者:lmx希冀平台可提交版本#include <ctype.h>#include <stdlib.h>#include <string.h>#include <algorithm>#include <fstream>#include <iostream>#include <map>#include <vector>#include<queue>using namespahttps://blog.csdn.net/weixin_48456383/article/details/124743528

​​​​​​​

编译原理实验:代码生成作业(1)相关推荐

  1. html解析器编译原理,编译原理实验报告词法分析器(内含源代码).docx

    编译原理实验报告词法分析器(内含源代码) 编译原理实验(一) --词法分析器 实验描述 运行环境:vc++2008 对某特定语言A ,构造其词法规则. 该语言的单词符号包括: 1该程序能识别的单词符号 ...

  2. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc

    逆波兰式算法的编译原理实验过程 实验目的 深入理解算符优先分析法 掌握FirstVt和LastVt集合的求法有算符优先关系表的求法 掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化 实验内容及要求 ...

  3. 编译原理:代码生成(pcode),C语言实现

    编译原理:代码生成(pcode),C语言实现 部分参考代码及函数: #include #include <stdio.h> #include <string.h> #inclu ...

  4. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

  5. 编译原理--实验2 语法分析

    文章目录 前言 1.1实验目的 1.2 实验任务 1.3 实验内容 1.3.1 实验要求 1.3.2 输入格式 1.3.3 输出格式 1.3.4 样例 1.4 程序 1.4.1 程序流程图 1.4.2 ...

  6. 编译原理实验二:赋值语句的语法分析程序设计

    编译原理实验二:赋值语句的语法分析程序设计 1.1实验内容 目的: 在前面实验的基础上,通过设计.编制.调试一个典型的赋值语句的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查,进一步掌握 ...

  7. 编译原理实验:自上而下语法分析

    编译原理实验:自上而下语法分析 1. 实验题目:自上而下语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自上而下语法分析 ...

  8. java编程实现算符优先分析法,编译原理实验三-算符优先分析法

    编译原理实验3-算符优先分析法 #include #include #include #include #define SIZE 128 char priority[6][6]; //算符优先关系表数 ...

  9. 编译原理实验 -- 文法分析

    编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...

最新文章

  1. matlab矢量相乘并打印显示
  2. 检查是否已使用jQuery选中复选框
  3. matlab转c++
  4. python自动化办公都能做什么菜-Python 让我再次在女同学面前长脸了!(真实案例)...
  5. SQL数据库基础知识总结(三)---对象
  6. JavaWeb学习笔记九 过滤器、注解
  7. 70后存款100万,有房有车无贷款,每月租金1.5万,可以退休吗?
  8. QT Core | 信号槽01 - GUI上按钮触发应用程序里某个类的函数
  9. javascript基础-ajax
  10. 掌业宝服务器维护升级,奇游联机宝APP焕新升级 主机加速多设备各享最优区服...
  11. 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_14、SpringBoot2.x使用Dev-tool热部署...
  12. JavaScript 根据两点的经纬度坐标,计算实际的直线距离
  13. 【转】keil5 missing close quote 错误解决
  14. Bejson上线 在线png、jpg图片转svg功能
  15. 彩灯控制器课程设计vhdl_基于VHDL的彩灯控制器的设计
  16. 冒号后面跟着function()是什么意思
  17. 如何在windows中添加smb共享
  18. 字符串加密后md5为 0exxxx 的字符串
  19. 【AAAI 2020】全部接受论文列表(三)
  20. JavaScript数据结构与算法 - 树

热门文章

  1. Type-C边充电边OTG芯片LDR6028A
  2. 找出数组x中的最大值和该值所在的元素下标,数组元素从键盘输入。
  3. Blender 3.2 强势更新!附下载地址和更新内容
  4. Spark on Hive Hive on Spark傻傻分不清?
  5. 【墨尘】变态心理学(北京大学)
  6. Spark2.1.0之初体验
  7. 2019年私域流量的演变历程剖析:定义、演变、成因、改变企业营销决策!
  8. 如何在WPS中给一组字母上方添加一个横线
  9. 为什么美国大城市里不修二环三环四环五环?
  10. 节省处理HPC数据泛滥开支的可用工具