'Twas brillig, and the slithy toves
Did gyre and gimble in the wabe;
All mimsy were the borogoves,
And the mome raths outgrabe.
This repository contains the sources for my Bachelor's thesis project, titled Designing and Implementing a Functional Programming Language. This project will not be actively maintained.
To use this project, you will need:
- A recent Rust toolchain, at least 1.85.1.
- The
tree-sitter-clitool (available viacargo). - A local C compiler.
- A Racket installation with the R6RS language package.
For any of the following commands, jabber can be exchanged with cargo run -- if you're in the project directory.
jabber,jabber help, andjabber --helpwill display some usage instructions in the terminal.jabber -l <LIBS_ROOT> compile -i <INPUT_ROOT> -o <OUTPUT_ROOT>will compile the package at<INPUT_ROOT>against the libraries in<LIBS_ROOT>and place the files in<OUTPUT_ROOT>.jabber -l <LIBS_ROOT> run -s <SUPPORT_ROOT> -i <INPUT_ROOT> -o <OUTPUT_ROOT>will compile as above, but then will also run the package usingracketwith the given<SUPPORT_ROOT>.
compileris the root of the Rust crate that implements the Jabber compiler.libscontains Jabber's standard libraries, of which the most important iscore.reportcontains the source files for the report itself, and can be compiled with Typst.speccontains normative (binding) documents describing Jabber, and is intended to be the source of truth for the language;supportcontains the runtime support library used by the compiled Racket artifacts.testscontains several Jabber packages to test the compiler against.tree-sitter-jabberis a Tree-sitter parser for Jabber, defined ingrammar.js—it also serves as the front-end CST parser for the Jabber compiler.
- The artifacts in
tree-sitter-jabber/srcwill change slightly based on the system that runstree-sitter generate. Systems can rungit update-index --assume-unchanged <FILENAME>to locally ignore changes to these files. - Tree-sitter appears to currently have a bug that causes
tree-sitter testto ignore test tags on Windows.