Skip to content
/ ldpl-rs Public

πŸ¦• LDPL 4.4 compiler in Rust πŸ¦€

License

Notifications You must be signed in to change notification settings

xvxx/ldpl-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

LDPL + Rust

LDPL in Rust

crate

LDPL is a powerful compiled programming language designed from the ground up to be excessively expressive, readable, fast and easy to learn. It mimics plain English, in the likeness of the good parts of older programming languages like COBOL, with the desire that it can be understood by anybody. LDPL was designed to run on Unix systems, including AMD-64 Linux, macOS, ARMv8 Linux, Android Termux and both Intel and PowerPC OS X (tested from Tiger 10.4 onwards). It even supports UTF-8 out of the box.

β€” The Official LDPL Repository


This is an experimental LDPL 4.4 compiler written in Rust. Like the official compiler, LDPL code is translated to C++ code and then compiled into a standalone binary. Generated code should be 100% compatible with the official compiler, meaning LDPL-RS should work just fine with regular LDPL extensions.

Installation

LDPL-RS requires cargo to install and a C++ compiler to use.

Once you've got them both, installation is a breeze:

cargo install ldpl

You should now have an ldpl-rs binary in your $PATH that you can use to compile simple LDPL 4.4 programs, like any of the official examples:

git clone -b 4.4 git://github.com/lartu/ldpl
ldpl-rs ldpl/examples/99bottles.ldpl

Note the difference between the Crate name and binary. This is to avoid collision with the official LDPL compiler.

Building It

Building from source requires make and cargo. LDPL-RS also requires a C++ compiler to build LDPL programs, so you'll need one installed even after building the ldpl-rs binary.

Once you've got all that, clone and compile the project:

git clone git://github.com/xvxx/ldpl-rs
cd ldpl-rs
make

If that works, you've successfully built an ldpl-rs binary that you can use to compile any of the official LDPL examples:

git clone -b 4.4 git://github.com/lartu/ldpl
./ldpl-rs ldpl/examples/99bottles.ldpl

You can also use the "run" command to build and run a file in one go:

./ldpl-rs run ldpl/examples/99bottles.ldpl
99 bottles of beer on the wall...

To take it with you, just copy ldpl-rs to /usr/local/bin or something else in your $PATH.

Status

This project is in its infancy, but can compile simple LDPL programs. It supports all LDPL 4.4 statements, including C++ extensions, and can compile and run all the examples that shipped with LDPL 4.4. It can also compile Gild and ldpl-todo.

It passes 11 of 12 of the official LDPL tests.

However, these features are currently unsupported (but coming soon):

  • nested collections (NUMBER LIST LIST LIST)
  • OF syntax (LIST OF NUMBERS)

To run the tests, clone this project (instructions above) and run:

make test

LDPLTest Pass/Fail Status

Test Status Failure Reason
basicar βœ…
basictx βœ…
conflow βœ…
exec βœ…
explode βœ…
fibo βœ…
file βœ…
list βœ…
of ❌ OF syntax
quine βœ…
sqrt βœ…
vector βœ…

LDPL Examples Pass/Fail Status

Example Status Failure Reason
99bottles.ldpl βœ…
absolutevalue.ldpl βœ…
arguments.ldpl βœ…
bellman-ford.ldpl βœ…
brainfuck.ldpl βœ…
disancount.ldpl βœ…
euler.ldpl βœ…
explode.ldpl βœ…
factorial.ldpl βœ…
fibonacci.ldpl βœ…
floyd-warshall.ldpl βœ…
helloworld.ldpl βœ…
leapyear.ldpl βœ…
loop_counter.ldpl βœ…
oddornot.ldpl βœ…
quine.ldpl βœ…
sqrt.ldpl βœ…
strcmp-demo.ldpl βœ…

License

The LDPL-RS Compiler is distributed under the Apache 2.0 License, same as the official LDPL compiler. All LDPL Dinosaur logos where created by Lartu and are released under a Creative Commons Attribution 4.0 International (CC BY 4.0) license.

Portions of LDPL-RS are copied directly from LDPL. Thank you to the LDPL community for all their contributions!

About

πŸ¦• LDPL 4.4 compiler in Rust πŸ¦€

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published