Skip to content

roadelou/compass

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compass

Disclaimer: This is a personal side-project

Compass 🧭 is a small programming language with strong inpiration from Esterel. It is a synchronous programming language meant to build finite state machines easily for your C code.

Unlike Esterel, Compass is very bare bones and uses a rather trivial compilation process, which can lead to very different behaviours for code that looks similar.

The ABRO code example adapted for Compass looks like:

module abro(input A, input B, input R, output O)
    each R seq {
        par {
            await A;
            await B;
        };
        emit O;
    }
endmodule

Installation

The Compass compiler is distributed as a Python source package. To install it, one can run:

# Fetch the source code
git clone https://github.com/roadelou/compass.git
# Go into the repository
cd compass
# Install the python package
pip3 install .

A PyPi package is also available for the compiler, and it can be installed with pip3 install roadelou-compass 🎉

Usage

Once the compiler is installed, it can be used from the terminal through the compass command. Basic usage is:

# This will output a C file called abro_compass.c
compass abro.cmps
# To compile the header file to use the C code
compass --lang header abro.cmps
# To compile a CLI interface to test the module
compass --lang debug abro.cmps

Examples

Some examples of the language can be found in the examples folder.

Compass Builder

Compass Builder is a small tool provided by the package to automate the compilation of projects with submodules. It takes a JSON file describing the project as input and outputs a Makefile to automate the compilation of the project.

💡 For an example JSON description of a project, see cascade_abro.json.

Basic usage of compass-builder is:

# Creates a Makefile from the description given in project.json
compass-builder project.json Makefile

Features

The version of compass in the repository supports:

  • input and output signals
  • local variables
  • each, par, seq, await and emit statements
  • Conditional tests with if, elif, else and endif
  • The ability to use submodules within a module with the extern and submodule keywords
  • Many C-inspired operators for expressions, including bitwise, arithmetic and boolean operators

⚠️ Be careful about the syntax for end-of lines. The ; operator should only be used to separate several statements in a list of statements, i.e. only in seq and par blocks. The last ; is optional by the way.

METADATA

Field Value
📝 Contributors roadelou
📧 Contacts
📅 Creation Date 2021-03-12
💡 Language Markdown Document

EOF

About

Simple synchronous programming language

Resources

License

Stars

Watchers

Forks

Packages

No packages published