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

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

# 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 :arrow_down_small:

# 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.

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
  • Many C-inspired operators for expressions

: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.3.tar.gz (22.5 kB view details)

Uploaded Source

Built Distribution

roadelou_compass-0.0.3-py3-none-any.whl (65.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: roadelou-compass-0.0.3.tar.gz
  • Upload date:
  • Size: 22.5 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.3.tar.gz
Algorithm Hash digest
SHA256 07d1e6e11e5cd59e79d6f4bacc33715f46b7d4ae042b6f2570239b972bf6d383
MD5 2f3be2e38dc2f8c670dc359421982dab
BLAKE2b-256 3f7d0c35460290310dac8c838f7ffdfbe5e2d8817757975333874fceb6e51875

See more details on using hashes here.

File details

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

File metadata

  • Download URL: roadelou_compass-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 65.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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 978e5af0603cdf981572e77454e3e61fb10fa38db79ea4bce57a9a499bb74bf6
MD5 43f571cdf4c363a07a87e7c332944f65
BLAKE2b-256 729166c76977da924638031ce3e6c6f1013227b436249da1bc84620fb69667cc

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