Files
mash/README.md
2025-10-07 14:08:44 +03:00

70 lines
1.7 KiB
Markdown

# Lispy stuff
[![status-badge](https://ci.emin.software/api/badges/2/status.svg)](https://ci.emin.software/repos/2)
Simple lisp-ish language compiler written in C++.
Right now it doesn't compile much - it's just a parser.
The end goal is to emit bytecode. The bytecode format is not decided yet.
## Build
All you need is:
- CMake
- A modern C++ compiler
- The [Catch2](https://github.com/catchorg/Catch2) library v3 or higher installed on your system
Once you have these, you can build with:
```bash
cd build
cmake ..
make
```
This will build two executables, `main` and `test`. `test` runs all tests
on the compiler itself.
## Development
I use clangd as the language server. If you want your include files to be handled
correctly, you'll need to generate `compile_commands.json` yourself. You can
do this using cmake:
```bash
cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..
cp compile_commands.json ../
```
After this, clangd should not give you errors on every included header.
### Toolchain
C++ can be somewhat error-prone, so in order to reduce the possibility of
certain bugs, cmake toolchain options are provided that build the project
with the undefined behaviour sanitizer and the address sanitizer.
You can build a sanitized version like this:
```
cd build
cmake .. --toolchain ../toolchain/sanitize.cmake
make
```
Catch2 testing framework is used to maintain code correctness.
## Progress
Woodpecker CI/CD system is integrated.
Currently using Catch2 for unit testing.
- Lexing - complete, more token types may be added as necessary
- Parsing - the main steps are done, but things may change as time progresses
- Optimizations -
- Emitting Bytecode - the goal.