C-- Compiler using Antlr4
This project aims to design a compiler for a new language: C—. This language is primarily composed of C99 constructs, and hints of C++, Python, Swift, and GNU built ins absorbed into the language. The language is currently in the process of incremental development and is expecting complex data types in the near future.
This compiler utilizes Antlr4 to autogenerate the front end parser and scanner. The intermediate and backend of the compiler is written in C++. The target assembly is Jasmin, a JVM assembly language that can be assembled into Java *.class files. From there, the JVM can be invoked to execute the program.
.
├── antlr4-runtime # ANLTR runtime header and source files, usually untouched
├── build # Build files (bin)
├── generated # Autogenerated ANTLR files
├── grammars # All the grammar files
│ └── Cmm.g4 # The only grammar file under development
├── libs # ANTLR program specific files
│ ├── antlr-4.7-complete.jar # Java ANTLR program
│ ├── libantlr-runtime.a # Static library built from ANTLR runtime source files
│ └── PascalRTL.jar # Java helper runtime libraries
├── outputs # Where the output *.j and *.class files are created
├── samples # Sample C-- programs to test ANTLR with
├── scripts # Bash and python scripts for build automation
│ ├── assemble.sh # Assembles the *.j file into a *.class file
│ ├── build.sh # Builds the lexer / parser for C++ target
│ ├── compile.sh # Compiles the *.c file into a *.j file
│ └── recompile.sh # Recompiles the ANTLR library into a static library
├── src # Non-ANTLR source files
├── tools # Various tools
│ ├── jasmin-assembler # Used for assembling *.j files
│ └── Krakatau # Used for disassembling *.class files into *.j
├─ SConsript # SCons build script
└─ SConstruct # SCons root environment
SCons is responsible for the build process and automation.
$JAVA_JDK_PATH
scons.py
from the directory that contains SConstruct
Use scons.py run=SAMPLE_PROGRAM
to build and run.
Use bash assemble.sh SAMPLE_ASSEMBLY
to assemble a jasmin source file
Use bash compile.sh SAMPLE_PROGRAM_NO_EXTENSIONS_UNDER_SAMPLES_DIR
to compile a source file
build.sh
scriptThe runtime library has already been compiled into a static library for easy linking, no need to worry about the runtime source files
However, it will not run on all machines. Use the recompile.sh
to recompile a static library on your machine which will appear underantlr4-runtime/temp
.
# | Task |
---|---|
JasminEmitter module |
|
4 | Integrate JasminEmitter into the visitors |
5 | Add all the operators into the language |
6 | Add for loops |
7 | Add switch case |
8 | Add tests |
9 | Add arrays |
10 | Add structs |
11 | Add enums |