# tiger-compiler-25sp **Repository Path**: east-china-normal-university_ttb_cs/tiger-compiler-25sp ## Basic Information - **Project Name**: tiger-compiler-25sp - **Description**: Tiger Compiler source code for 24sp modern compiler implementation course. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: lab1 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2024-05-11 - **Last Updated**: 2025-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tiger Compiler Labs in C++ ## Overview We rewrote the Tiger Compiler labs using the C++ programming language because some features in C++ like inheritance and polymorphism are more suitable for these labs and less error-prone. We provide you all the codes of all labs at one time. In each lab, you only need to code in some of the directories. ## Difference Between C Labs and C++ Labs 1. Tiger compiler in C++ uses [flexc++](https://fbb-git.gitlab.io/flexcpp/manual/flexc++.html) and [bisonc++](https://fbb-git.gitlab.io/bisoncpp/manual/bisonc++.html) instead of flex and bison because flexc++ and bisonc++ is more flexc++ and bisonc++ are able to generate pure C++ codes instead of C codes wrapped in C++ files. 2. Tiger compiler in C++ uses namespace for modularization and uses inheritance and polymorphism to replace unions used in the old labs. 3. Tiger compiler in C++ uses CMake instead of Makefile to compile and build the target. ## Installing Dependencies We provide you a Docker image that has already installed all the dependencies. You can compile your codes directly in this Docker image. 1. Install [Docker](https://docs.docker.com/). 2. Run a docker container and mount the lab directory on it. ```bash # Run this command in the root directory of the project docker run -it --privileged -p 2222:22 -v $(pwd):/home/stu/tiger-compiler yuexizou/tiger-compiler-env:new # or make docker-run ``` ## Compiling and Debugging There are five makeable targets in total, including `test_slp`, `test_lex`, `test_parse`, `test_semant`, and `tiger-compiler`. 1. Run container environment and attach to it ```bash # Run container and directly attach to it docker run -it --privileged -p 2222:22 \ -v $(pwd):/home/stu/tiger-compiler yuexizou/tiger-compiler-env:new # or `make docker-run` # Or run container in the backend and attach to it later docker run -dt --privileged -p 2222:22 \ -v $(pwd):/home/stu/tiger-compiler yuexizou/tiger-compiler-env:new docker attach ${YOUR_CONTAINER_ID} ``` 2. Build in the container environment ```bash mkdir build && cd build && cmake .. && make test_xxx # or `make build` ``` 3. Debug using gdb or any IDEs ```bash gdb test_xxx # e.g. `gdb test_slp` ``` **Note: we will use `-DCMAKE_BUILD_TYPE=Release` to grade your labs, so make sure your lab passed the released version** ## Testing Your Labs Use `make` ```bash make gradelabx ``` You can test all the labs by ```bash make gradeall ``` ## Other Commands Utility commands can be found in the `Makefile`. They can be directly run by `make xxx` in a Unix shell. Windows users cannot use the `make` command, but the contents of `Makefile` can still be used as a reference for the available commands.