2025-05-10 03:24:47 -04:00
2024-09-20 01:40:17 -04:00
2024-09-20 01:40:17 -04:00
for
2025-05-26 13:05:38 -04:00
2025-05-09 19:14:49 -04:00

fddl Programming Language

fddl is a small, experimental programming language, built in Rust, designed to explore language implementation concepts. It's a blend of ideas from various languages but remains unique, with its own syntax and quirks.

This project is both a learning experience and a passion project, where the goal is to build a working language from scratch, while embracing some of the core features I enjoy from other languages.

Why fddl?

For years, Ive tried to learn various programming languages, and while I could master the basics, the real-world projects often eluded me. Rust, however, clicked for me, and fddl was born out of this journey. fddl is my attempt to combine the aspects I appreciate from many languages into something uniquely my own.

No, but why "fddl", as in the name?

Oh, I see...

Well, Ferris, the mascot of Rust, is a crab. There's a type of crab that exists called a Fiddler Crab. So, yeah, that.


Current Features

  • Custom Syntax: fddl introduces unique operators and keywords to make programming more intuitive and fun.
  • Lexer: A working lexer that tokenizes fddl scripts into understandable pieces of the language.
  • Tilde Operator: Includes a custom ~ and ~= operator for creative syntax possibilities.

Getting Started

To start experimenting with fddl, you can run it in two ways:

Run the REPL (Interactive Mode)

cargo run

Parse a fddl Script

cargo run path/to/script.fddl

Running the Project

Make sure your project compiles and the tests pass:

cargo build
cargo test

Examples

Here are a couple of examples showcasing the current capabilities of fddl:

Hello World

func main() {
    print("hello, world in fddl");
}

Simple Math Module and Variable Declaration

# This is a sample module

module math {
    # Computes the square of a number
    func square(x) => x ^ 2;
}

define $number := 5;
print(`The square of $number is ${math.square($number)}`);

(Note: This feature is under development, and string interpolation is planned for the future.)


Roadmap and Next Steps

fddl is very much a work in progress, with lots of planned improvements and additions. Here's a breakdown of whats done and whats coming up:

  • Lexer:

    • Built and tested for basic syntax and operators.
    • Supports single-line and documentation comments.
    • Add support for more complex syntax and features.
  • Parser:

    • Parser parsing tilde and minus successfully
    • Parser parsing function calls
    • Parser parsing the rest of the operators (mostly complete)
    • Working on building out functions to parse simple functionality in the language (if, while, for), and to read their expressions and values
    • Implement parsing for function calls, expressions, checks, literally everything.
    • L & R Values
  • Compiler:

    • Currently a placeholder. Implement the compiler to compile parsed code.
  • Comments:

    • Added support for single-line and documentation comments.
    • Implement multi-line comments.
    • Implement document building comments.
  • Error Handling:

    • Replace stderr with a more robust error handling mechanism.
    • Errors as values
  • Testing:

    • Added initial lexer tests.
    • Expand tests to cover more syntax and edge cases.

License

This project is licensed under the GPL License.

Description
No description provided
Readme 100 KiB
Languages
Rust 100%