Skip to content

jfet97/pitogo

Repository files navigation

PiTOGo

PiTOGo is a compiler from $\pi$-calculus expressions into golang code written in typescript.

Usage

Requires nodejs, npm and pnpm installed on your machine.

First, in the root directory of the project, run the following command to install dependencies:

pnpm i

Then, run the following command to compile the typescript code:

npx tsx path/to/file/.ts

Example usage can be seen in the file __tests__/transpiler.test.ts. Running

npx tsx __tests__/transpiler.test.ts

will generate a file __tests__/program.go containing the golang code.

Syntax

The syntax of processes is that of $\pi$-calculus, where the following constructs can be written in this way (where p is a process, a and b are channel names, x is a message, and P is a process identifier):

Construct $\pi$-calculus Syntax PiTOGo Syntax
Nil process $nil$ nil
Parallel composition $p \mid p$ p | p
Choice $p + p$ p + p
Restriction $(a) p$ (a)p
Matching $[a=b]p$ [a=b]p
Input $a(x).p$ a(x).p
Output $\overline{a}x.p$ a<x>.p
Process definition $P(a) \triangleq p$ P(a) = p;
Process invocation $P\langle a \rangle$ P<a>
Replication $!p$ !p

A special write-only channel log is provided to print messages to the console.

A program is a list of process definitions terminated by semicolons, where the last process definition is the main process:

P1(a) = p1;
P2(b) = p2;
...

main = p3;

Project structure

The project is structured as follows:

  • __tests__/ contains example code for all the components;
  • src/common/ and src/utils/ contain utility code;
  • src/scanner/ contains the code for scanning and lexing strings into tokens that will be consumed by the parser;
  • src/parser/ contains the code for parsing tokens generated by the tokenizer and building the abstract syntax tree of $\pi$-calculus expressions;
  • src/transpiler/ contains the code for generating golang code starting from the abstract syntax tree;

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages