Files
mash/README.md
haxala1r 2dd10e08d9
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
Added toolchain file for sanitized builds
2025-10-02 17:56:30 +03:00

1.6 KiB

Lispy stuff

status-badge

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
  • An appropriate C++ compiler

I use cmake for the build system. I prefer to build out-of-tree, here's how to build if you've never used cmake:

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:

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 - This is the next step.
  • Optimizations -
  • Emitting Bytecode - the goal.