comby
A short example below shows how comby simplifies matching and rewriting compared to regex approaches like sed.
Need help writing patterns or have other problems? Consider posting in Gitter.
Install (pre-built binaries)
Mac OS X
brew install comby
Ubuntu Linux
bash
Arch and other Linux: The PCRE library is dynamically linked in the Ubuntu binary. For other distributions, like Arch, a fixup is needed: ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3. Alternatively, consider building from source.
Windows
Install the Windows Subsystem for Linux and install Ubuntu. Then run bash
Docker
docker pull comby/comby
click to expand an example invocation for the docker image
Running with docker on stdin:
echo '(👋 hi)' | docker run -a stdin -a stdout -i comby/comby '(:[emoji] hi)' 'bye :[emoji]' lisp -stdin
Isn't a regex approach like sed good enough?
Sometimes, yes. But often, small changes and refactorings are complicated by nested expressions, comments, or strings. Consider the following C-like snippet. Say the challenge is to rewrite the two if conditions to the value 1. Can you write a regular expression that matches the contents of the two if condition expressions, and only those two? Feel free to share your pattern with @rvtond on Twitter.
if (fgets(line, 128, file_pointer) == Null) // 1) if (...) returns 0
return 0;
...
if (scanf("%d) %d", &x, &y) == 2) // 2) if (scanf("%d) %d", &x, &y) == 2) returns 0
return 0;
To match these with comby, all you need to write is if (:[condition]), and specify one flag that this language is C-like. The replacement is if (1). See the live example.
Build from source
Install opam
Create a new switch if you don't have OCaml installed:
opam init
opam switch create 4.09.0 4.09.0
Linux: sudo apt-get install pkg-config libpcre3-dev
Mac: brew install pkg-config pcre
Then install the library dependencies:
git clone https://github.com/comby-tools/comby
cd comby && opam install . --deps-only -y
Build and test
make
make test
If you want to install comby on your PATH, run
make install