Skip to main content

Simple synchronous programming language

Project description

Compass

Disclaimer: This is a personal side-project

Compass :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 :tada:

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.

:bulb: 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

:warning: 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
:pencil: Contributors roadelou
:email: Contacts
:date: Creation Date 2021-03-12
:bulb: Language Markdown Document

EOF

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

roadelou-compass-0.0.8.tar.gz (29.7 kB view hashes)

Uploaded Source

Built Distribution

roadelou_compass-0.0.8-py3-none-any.whl (81.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page