首页 > 其他分享 >Lab2 中间代码生成,在Cminusf 解析器基础上,完成从语法树向中间代码的自动化翻译过程。

Lab2 中间代码生成,在Cminusf 解析器基础上,完成从语法树向中间代码的自动化翻译过程。

时间:2024-10-24 16:17:28浏览次数:6  
标签:解析器 代码生成 git 中间代码 lab1 实验 main IR 分支

本次实验需要同学们在 Lab1 实现的 Cminusf 解析器基础上,完成从语法树向中间代码的自动化翻译过程。contact me help-assignment

实验要求

根据 Lab1 的要求,学生有两个远程仓库:

  • upstream:课程发布实验代码的公开仓库
  • origin:学生 fork 得到的私有仓库

两个仓库各有 3 条分支(红色字体):main、lab0 和 lab1,如下图。最上边的 lab1 和 main 代表本地的分支,分别追踪远程的 origin/lab1 和 origin/main,main 前边的星号 * 和绿色字体代表当前处于 main 分支下:

以上两条命令分别是:git remote -v 和 git branch --all -vv,如果第二条命令的输出中缺少 upstream 的分支,你可以通过 git fetch --all 来获取。

在实验一中,我们通过 lab1 分支发布实验,与 lab0 作为区分,因此学生也是处于 lab1 分支下完成实验。为了更优雅地发布实验,从 lab2 开始,我们将使用 main 分支发布实验。在开始撰写本次实验代码之前,学生需要抓取最新的 main 分支到本地,然后将 lab1 分支合并到 main 分支,并处理可能的冲突。以下是详细的指导。

拉取最新代码

首先切换到 main 分支下:

  • git checkout main:如果 git branch 的输出存在 main;
  • 或 git checkout -b main --track origin/main:如果 git branch 的输出不存在 main。

然后使用 git pull upstream main 获取最新内容。此时你应该可以在项目下找到 tests/2-ir-gen/** 和 src/lightir/** 等内容。

合并 lab1 分支

检查当前关于 lab1 的实验内容:src/parser/lexical_analyzer.lsrc/parser/syntax_analyzer.y 和 src/common/ast.cpp,你会发现曾经完成的代码不见了,这三个文件处于 lab1 开始前的版本。现在使用 git merge lab1,将你在 lab1 完成的内容合并到主分支(main)下。

如果你遇到了冲突

此时进入 build 文件夹,执行 cmake .. 和 make -j 编译最新的程序,然后进入 lab1 的测试目录 tests/1-parser,执行 lab1 的两个脚本。在正确合并分支的情况下,你应该能够正常编译项目并通过 lab1 的两个脚本,这时你可以开始本次实验的撰写了。

ZLIB 相关报错

如果你在 cmake .. 一步遇到如下报错Target "IR_lib" links to target "ZLIB::ZLIB" but the target was not found.,请使用 sudo apt install zlib1g-dev 安装 zlib 库,然后重新 cmake .. && make

实验内容

本次实验需要分阶段完成及验收。

阶段一

阶段一需要 回答 Light IR 预热访问者模式文档中的思考题,回答内容保存为 answer.pdf。并完成 tests/2-ir-gen/warmup/stu_ll 与 tests/2-ir-gen/warmup/stu_cpp 目录下代码的编写。

Deadline

2024 年 10 月 18 日 23:59

阶段二

阅读 IR 自动化生成Cminusf 语义,补充 include/cminusfc/cminusf_builder.hpp 与 src/cminusfc/cminusf_builder.cpp 文件,并通过 tests/2-ir-gen/autogen/testcases/目录下 lv0_1lv0_2lv1 级别的测试样例。

Deadline

2024 年 10 月 27 日 23:59

阶段三

在阶段二的基础上,继续补充 include/cminusfc/cminusf_builder.hpp 与 src/cminusfc/cminusf_builder.cpp 文件,并通过 tests/2-ir-gen/autogen/testcases/ 目录下所有提供的测试样例。

contact me help-assignment before deadline

标签:解析器,代码生成,git,中间代码,lab1,实验,main,IR,分支
From: https://blog.csdn.net/m0_74315230/article/details/143212251

相关文章

  • 「Java开发指南」如何共享Spring代码生成自定义?
    本教程将引导您共享Spring代码生成自定义,共享自定义有助于在开发人员和项目之间设置编码标准,并允许通过开发人员社区扩展功能。在本教程中,您将学习如何:创建自定义项目将项目打包以便共享在另一个项目中使用打包的自定义注意:自定义Spring代码生成需要MyEclipseSpring或Bling......
  • Mybatis-Plus代码生成模块代码
    Mybatis-Plus代码生成模块代码:importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.generator.AutoGenerator;importcom.baomidou.mybatisplus.generator.config.DataSourceConfig;importcom.baomidou.mybatisplus.generator.config.Glo......
  • PDManer 入门教程:超强代码生成工具!
    操作手册说明:https://www.yuque.com/pdmaner/docs/pdmaner-manual下载地址说明:https://gitee.com/robergroup/pdmaner/releases开源博客介绍说明:4.0最新版说明https://my.oschina.net/skymozn/blog/5515012PDman2.2.0下载地址:http://www.downza.cn/soft/278049.htmlPD......
  • 用C++构建自己的编译器:从词法分析到代码生成
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界本文将带领读者从零开始构建一个简单的C++编译器。我们将逐步讲解如何进行词法分析、语法分析,以及如何将这些结果转换为目标代码。这篇文章的目标是帮助读者理解编译器的基本构成和工作原理,并提供可扩展的编译器......
  • 手写Java代码生成工具(五)生成service和serviceImpl文件
    目录前言一、创建service文件以及导入所需的类二、生成service类需要的方法三、创建ServiceImpl文件以及生成导入语句四、生成的ServiceImpl类文件中添加内容五、遍历索引,生成基础增删改查前言写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项......
  • java代码生成器(controller,service,mapper)
    packagecom.cn.codeGenerator;importjava.awt.*;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;publicclassCodeGenerator{privatestaticfinalStri......
  • Qwen2.5-Coder——专门从事代码生成、完成和数学推理任务的 LLM
    1.概述论文地址:https://arxiv.org/pdf/2409.12186源码地址:https://github.com/qwenlm/qwen2.5-coderQwen2.5-Coder是其前身CodeQwen1.5的重大演进,专门设计用于执行代码生成和代码修改等编程相关任务。该系列包括两个型号,参数分别为15亿(15亿)和70亿(70亿)。2.算法......
  • ReplitLM: 开源代码生成模型的新突破
    ReplitLMReplitLM模型简介ReplitLM是由在线编程平台Replit公司开发的一系列开源大型语言模型(LLM),专门用于代码生成和自然语言处理任务。这些模型在大规模代码数据集上进行训练,能够理解和生成多种编程语言的代码,为开发人员提供强大的AI辅助编程工具。目前,ReplitLM模型系列......
  • android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk
    openssl编译本篇文章的操作是在Linux环境之下,在虚拟机ubuntu20版本上操作的步骤1.openssl下载解压tar包openssl下载地址:https://openssl-library.org/source/下载完解压:tar-zxvfopenssl-3.3.2.tar.gz//我这里下载openssl-3.3.2.tar.gz版本2.编译openssl库,得......
  • 【gRPC】2—gRPC与PB&桩代码生成与扩展
    gRPC与PB&桩代码生成与扩展⭐⭐⭐⭐⭐⭐Github主页......