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 fromcommon
andsts
into theModule
type.ir/
: Converts instances ofModule
into pre-compiled LLVM modules in parallel.lexer/
: Transforms source code into instances ofToken
.parser/
: Constructs anAST
from 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.c
file throughsrc
and validating the resulting LLVM module.
- Includes a
Dockerfile
for each assignment, enabling completion without local installations. SafeLLVM
provides a simplified and safe API for interfacing with LLVM.
- Compatible with major Linux distributions and MacOS.
llvm-17
,llvm-17-dev
, andllvm-17-tools
clang-17
llvm_sys
rustc
cargo
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.