Git Product home page Git Product logo

compiler's Introduction

C- - Language

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.

C- - Compiler

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.

Directory Structure

.
├── 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

How To Build

SCons is responsible for the build process and automation.

  1. Install SCons from their website https://scons.org/pages/download.html
  2. Install JAVA JDK from their website http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
    • Add the JDK bin path to your environment path
  3. Set up the paths in the build scripts : $JAVA_JDK_PATH
  4. Run 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

How To Generate The Parse Tree

  1. Run the build.sh script
  2. Use the optional command line arguments for a different grammar file or a different sample program

ANTLR Runtime

The 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 under antlr4-runtime/temp.

TODO

# Task
1 Strip repository of unneeded files
2 Clean up and rewrite intermediate modules
3 Finish writing 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

compiler's People

Contributors

andrewkyu avatar johntumath avatar jpan127 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.