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

 编译原理实验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

​​​​​​​

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验为实现一个小型的 C 语言到 MIPS 汇编语言的编译器,需要完成以上所有步骤并验证测试正确。实验需要选择一个合适的 C 语言子集,能够体现 C 语言基本语法,特有关键字等,同时要能在这个子集的基础上写出具有特色的测试程序。在通过本实验所做编译编译完成后,通过 MARS 汇编器将汇编代码汇编汇编语言后测试运行结果需和 C 程序功能预期结果相符。 实验分为四次,依次完成词法和语法分析,静态语义分析、中间代码生成和代码优化,目标代码生成。同时为了体现课程之间的关联性,测试程序最终生成的机器代码将在计算机组成原理课程设计所设计的 CPU 中执行。 词法和语法分析器分别利用现有工具,Flex,Bison 完成,根据输入的文法和语法树构建规则自动生成分析源程序的 C 语言程序,生成抽象语法树并打印之。 语义分析器需要一个 C 语言程序,通过遍历抽象语法树构造符号表并检验上下文是否有语义错误。 中间代码生成器在语义分析器的基础上,在同一遍遍历语法树的基础上,利用当下的符号表生成中间代码。优化器需要一个新的 C 程序,接收中间代码, 利用DAG 算法生成图,并在此基础上进行代码重构和优化,输出优化后的代码。目标代码生成器需要一个单独的 C 程序,接收中间代码序列在中间代码的基 础上,根据中间代码节点的类型,为临时变量,以及存储器变量的值和地址分配寄存器,并生成目标代码。 实验的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理解,提高学生系统软件研发技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值