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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file roadelou-compass-0.0.8.tar.gz.

File metadata

  • Download URL: roadelou-compass-0.0.8.tar.gz
  • Upload date:
  • Size: 29.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/49.1.3 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for roadelou-compass-0.0.8.tar.gz
Algorithm Hash digest
SHA256 9dfa0ef5ab7e2961d20ad8ae3e1a61644136650e284425e1819c49fa3969c77c
MD5 a2f64b9792b7268f559d0b71177b8f96
BLAKE2b-256 08466c4acac4b602b754a98796a85a40a79296bacbc0f7070f4ec911590fbc95

See more details on using hashes here.

File details

Details for the file roadelou_compass-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: roadelou_compass-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 81.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/49.1.3 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2

File hashes

Hashes for roadelou_compass-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 f3875839973663bdb8c84934d9b7096c3181b4e71659c9d52df97fb837a0f443
MD5 6e9ea4ef10da82709eb86d15be36d6e2
BLAKE2b-256 dfd7be5dd84736015e10dfdff3636a941ee6154fc7e175f30a4605c10dddafb7

See more details on using hashes here.

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