Skip to content

Latest commit

 

History

History
87 lines (50 loc) · 2.7 KB

plan.md

File metadata and controls

87 lines (50 loc) · 2.7 KB

语言介绍

SysY 语言是本实验的源语言。是一个 C 语言的子集,SysY 语言是单文件的,去除了 C 语言中的 include/define/pointer/struct 等较复杂特性。SysY 语言本身不具有 IO 功能,通过链接运行时库的方式进行 IO。

LLVM 是一个模块化的、可重用的编译器和工具链的集合,目的是提供一个现代的、基于 SSA 的、能够支持任意静态和动态编译的编程语言的编译策略。在最近几年已经成为表现上能够和 gcc 对标的项目。

LLVM IR 是 LLVM 项目中通用的中间代码格式,用于连接其他语言和目标体系架构 是 n*1*m 中的1 ,(在目前的计划中)是学生需要从源语言中编译并翻译到的目标语言。

具体实验设计

总共分为 6-7 次实验,实验之间具有先后关系,评测方式暂定为使用上届助教的评测机,大致实验内容为

助教全程工作

  • 维护评测系统
  • 实验答疑
  • 编写实验指导
  • 编写示例编译器(会尽快)

pre %15

学生工作

LLVM 工具链的熟悉与使用

ANTLR 工具链的熟悉与使用

评测机的使用

词法分析与语法分析的小实验(token 与 表达式计算)

助教工作

编写 LLVM 工具链的教程,编写 ANTLR 工具链的教程

指导学生从现有 LLVM IR 中选取需要的指令

介绍 LLVM IR 中最关键的几个概念(User Value Operand 等)

设计词法与语法分析的小实验(用于代替过去实验中的词法分析以及语法分析

仅有 main 函数的编译器 10%

  • part 1 设计实现从 AST 翻译到 LLVM IR 的架构,并实现最简单的从 main 函数的返回的 codegen Middle
  • part 2 注释

常量表达式 10%

  • part 3 实现正号,负号
  • part 4 实现四则运算及模运算

局部变量 10%

  • part 5 局部变量与赋值
  • part 6 调用函数

条件语句 10%

  • part 7 if 语句与条件表达式

作用域与全局变量 10%

  • part 8 作用域与块
  • part ⑨ 全局变量

循环 10%

  • part 10 循环语句
  • part 11 continue、break 与代码回填

数组 10%

  • part 12 一维数组、二维数组

函数 10%

  • part 13 函数

挑战实验 20%

  • 14 mem2reg 20%
  • 15 多维数组 10%
  • 16 函数内联(因为没有函数声明,所以只有调用自身的递归,还是比较简单的)10%
  • 17 短路求值(需要提前放出,不然到后面代码逻辑得大改)10%
  • 满分 20% 不会溢出

每完成一次实验的内容,就应该上交一份(电子的,不允许超过字数限制的)实验报告,简要地介绍自己实现的思路以及主要参考的文献和代码