Skip to content

scatyf3/TinyCompiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

一个迷你的编译器

北师大 2024春 编译原理实验

功能

前端

  • 关键字: int, return, main, void, if, else, while, continue, break
  • 标识符: 符合C89 标准的标识符[A-Za-z_][0-9A-Za-z_]*
  • 常量: 十进制整型,如1、223、10等
  • 赋值操作符: =
  • 运算符:
    • 一元运算符: - ! ~
    • 二元运算符: + - * / % < <= > >= == != & | ^ && ||
  • 标点符号: ; { } ( )

后端

  • 变量声明 int a, b=111, c=1+3;
  • 表达式赋值语句 a = (d+b&1)/(e!=3^b/c&d); a = b+c;
  • return语句 return a+b; return func(a);
  • 函数调用 println_int(a+b);
  • 条件语句 if ( condition6 ) { ...},if ( condition6 ) { ...7 } else { ... 7 }
  • 循环语句 while ( condition6 ) { ... }
  • 循环控制语句 continue; break;
  • 函数
  • 系统自带函数: println_int

项目结构

✗ tree -L 1
.
├── README.md 
├── bison_example //之前用来测试bison的小例子
├── build //构建相关,目前本地使用makefile
├── docs //实验要求和实验报告
├── log.md //开发碎碎念
├── out //输出结果
├── src //源代码
│   ├── MIPS.h //头文件,将一些常见的汇编,比如push,pop变成宏
│   ├── compilerlab1.cpp
│   ├── parser.y
│   ├── sign_table.cpp
│   ├── sign_table.hpp
│   ├── tcc
│   ├── tcc.hpp
│   └── tokenrizer.l
└── test //测试用例

依赖

  • flex
  • bison
  • spim
  • MacOS/Linux操作系统

usage

cd build
make run
sh run_cases_<number>.sh
cd ../out/case_<number>
vim case_<number>.log #输出结果

log

log.md,开发碎碎念

credit

  • 这个实验由敬爱的计老师开发,这个实验非常酷,而且深刻的锻炼了我们的编译能力
    • 再带我们冲一次吧😭
    • 希望其他课程的实验也能如此良好的组织
  • 这个实验的代码由我独立完成,但在有的idea实在匮乏的时候,我参考了下面的网站,获得了一些方向上的指引,具体的参考在log.md里提及
  • 感谢LukeBriton同学

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published