Skip to content

tekknolagi/scrapscript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

84a2bf6 · Feb 26, 2025
Feb 7, 2025
Jun 22, 2024
Feb 7, 2025
Feb 7, 2025
May 28, 2024
May 28, 2024
Nov 29, 2023
Dec 21, 2023
Dec 11, 2023
Feb 10, 2025
Jun 22, 2024
Feb 20, 2025
Jan 27, 2025
Feb 7, 2025
Feb 7, 2025
Jan 27, 2025
Feb 26, 2025
Feb 26, 2025

Repository files navigation

Scrapscript Interpreter

See scrapscript.org for some more information. Keep in mind that the syntax on the website will change a little bit in the coming weeks to match this repository.

Take a look inside scrapscript.py and all of its tests to get an idea for how the language works.

Usage

We support python3.8+.

# With a file
python3 scrapscript.py eval examples/0_home/factorial.scrap

# With a string literal
python3 scrapscript.py apply "1 + 2"

# With a REPL
python3 scrapscript.py repl

or with Cosmopolitan:

./util/build-com

# With a file
./scrapscript.com eval examples/0_home/factorial.scrap

# With a string literal
./scrapscript.com apply "1 + 2"

# With a REPL
./scrapscript.com repl

(if you have an exec format error and use Zsh, either upgrade Zsh or prefix with sh)

or with Docker:

# With a file (mount your local directory)
docker run --mount type=bind,source="$(pwd)",target=/mnt -i -t ghcr.io/tekknolagi/scrapscript:trunk eval /mnt/examples/0_home/factorial.scrap

# With a string literal
docker run -i -t ghcr.io/tekknolagi/scrapscript:trunk apply "1 + 2"

# With a REPL
docker run -i -t ghcr.io/tekknolagi/scrapscript:trunk repl

The experimental compiler:

Normal ELF

./scrapscript.py compile some.scrap  # produces output.c
./scrapscript.py compile some.scrap --compile  # produces a.out

Cosmopolitan

CC=~/Downloads/cosmos/bin/cosmocc ./scrapscript.py compile some.scrap  --compile # produces a.out

Wasm

CC=/opt/wasi-sdk/bin/clang \
CFLAGS=-D_WASI_EMULATED_MMAN \
LDFLAGS=-lwasi-emulated-mman \
./scrapscript.py compile some.scrap --compile  # produces a.out

Development Workflow

Running Tests

python scrapscript_tests.py

Type Checking the Python Sources

mypy --strict scrapscript.py

Formatting the Python Sources

ruff format scrapscript.py

Checking for Format Errors

ruff check scrapscript.py

Using uv

If you choose to use uv to manage development dependencies, you can run any of the previous four commands by prefixing them with uv run, e.g.:

uv run python scrapscript_tests.py