0.2.7 • Published 11 months ago

pitogo v0.2.7

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
11 months ago

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 SyntaxPiTOGo 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;
0.2.1

12 months ago

0.2.0

12 months ago

0.2.7

11 months ago

0.2.6

11 months ago

0.2.3

11 months ago

0.2.2

11 months ago

0.2.5

11 months ago

0.2.4

11 months ago

0.1.7

12 months ago

0.1.6

12 months ago

0.1.5

12 months ago

0.1.4

12 months ago

0.1.3

12 months ago

0.1.2

12 months ago

0.1.1

12 months ago

0.1.0

12 months ago