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
andoutput
signalslocal
variableseach
,par
,seq
,await
andemit
statements- Conditional tests with
if
,elif
,else
andendif
- The ability to use submodules within a module with the
extern
andsubmodule
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9dfa0ef5ab7e2961d20ad8ae3e1a61644136650e284425e1819c49fa3969c77c |
|
MD5 | a2f64b9792b7268f559d0b71177b8f96 |
|
BLAKE2b-256 | 08466c4acac4b602b754a98796a85a40a79296bacbc0f7070f4ec911590fbc95 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f3875839973663bdb8c84934d9b7096c3181b4e71659c9d52df97fb837a0f443 |
|
MD5 | 6e9ea4ef10da82709eb86d15be36d6e2 |
|
BLAKE2b-256 | dfd7be5dd84736015e10dfdff3636a941ee6154fc7e175f30a4605c10dddafb7 |