Caleb L'Italien, John Daly, Kevin Welch, Thomas Breimer, Livi Gwinnett, Aaron Cass
SICC is a compiler for a subset of the C99 standard, designed for undergraduate-level compiler design courses. SICC is written in Rust and uses LLVM for backend processing with SafeLLVM serving as a wrapper for llvm_sys.
common/: Definitions for Abstract Syntax Trees (AST) and shared modules.integration/: Integrates functionality fromcommonandstsinto theModuletype.ir/: Converts instances ofModuleinto pre-compiled LLVM modules in parallel.lexer/: Transforms source code into instances ofToken.parser/: Constructs anASTfrom instances ofToken.src/: Main driver for the compiler.sts/: Generates a Symbol Table Stack (STS) from anAST.tests/: Conducts end-to-end testing by processing a.cfile throughsrcand validating the resulting LLVM module.
- Includes a
Dockerfilefor each assignment, enabling completion without local installations. SafeLLVMprovides a simplified and safe API for interfacing with LLVM.
- Compatible with major Linux distributions and MacOS.
llvm-17,llvm-17-dev, andllvm-17-toolsclang-17llvm_sysrustccargo
Alternatively:
- Docker CLI
- Docker Daemon
Clone the repository and navigate to the project directory:
git clone git@github.com:UnionCompilerDesign/starter_code.git
cd starter_code
Build and test the project using Cargo:
cargo build --all
cargo test --all
SICC is freely available for use. A complete version of the project can be provided upon request by instructors.
Contributions are welcome! Please refer to the CONTRIBUTING.md file for guidelines on how to submit patches and bug reports. Contributions to the complete version are restricted to avoid potential conflicts of interest and breaches of academic integrity.
Distributed under the MIT License. See the LICENSE file for more details.
Special thanks to Professor Aaron Cass of Union College for his guidance and expertise throughout the development of this project.
For any inquiries, contact Caleb L'Italien at litaliencaleb@gmail.com.