Authors: Haoyang Shi, Tinghao Xie
This repository contains our course project for Compiler Principle at ZJU.
- type system: char, int, double and n-dimensional array type; Pointer type is not supported in this version.
- no controled jumps, gotos and labels , i.e. break, continue and switch statements are not supported.
scanfandprintfare automaticly declared and linked with libc in runtime- calling convention of
scanfmodified. e.g. you shall usescanf("%d",i)to read the value into variable i and drop the&symbol. forloop switched to pascal-likefor(i: 0 to n){}andfor(i: n downto 0){}snippet where i is only seen within the scope of this loop- unary operators not supported
Try out the test samples to get a better understanding of the gramma.
- Advanced self-defined types (nested struct and arrays)
- MACRO support (
#define/#define f(X),#ifdef/ifndefand nested) - Error detection and recovery (primary)
- flex 2.5+
- bison 3.0+
- clang 7.0+
- llvm 7.0+
which is easily accessible via apt and other package managers.
It has been successfully tested with
- flex 2.6.4 + bison 3.0.4 + llvm-12 on Ubuntu 18.04 (x86_64)
- flex 2.5.35 + bison 3.7.6 + llvm-12 on MacOS (x86_64)
Clean the directory with:
make cleanInstall with:
makeIf you want to install with a specific version of bison, install with:
make BISON=[YOUR-BISON-PATH]If you are installing RCC with LLVM12 on MacOS, install with:
make DEFINE='-D MACOS'./rcc src_file
./a.outThe generated ELF object file and executable are named output.o and a.out respectively by default.