src | ||
tests | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
readme.md |
Fiddle Programming Language
Fiddle is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust.
I have, off and on throughout the last 15 or so years attempted to learn a programming language of some sort. I could always get through the basics, but would get stuck with any real world projects. And I wouldn't know who to turn to even if I knew where to start.
So I started learning Rust and really like it. So I've been following some tutorials and the Crafting Interpretors site as guides for this very problematic programming language.
I like aspects of so many programming languages, but I don't really like any of them, so I always found it hard to pick one and stick with it. But I had the same problem playing World of Warcraft, too.
So I, like many of you, decided to make a hobby programming language to see what may be able to be done with it.
Features
- Custom syntax with unique operators and keywords
- Documentation comments using
#
, similar to Rust's style - Lexer and parser built from scratch in Rust
Getting Started
To run the REPL:
cargo run
To run a fiddle script:
cargo run path/to/script.fddl
Examples
##! 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)}`);
(At least for right now.)
License
This project is licensed under the MIT License.
Notes and Next Steps
- Added first new set of tokens and features, added the first lexer tests.
parser
module is a placeholder.interpreter
module is a placeholder.- Implement a more robust error handling mechanism instead of using
stderr
. - Imlement string interpolation (backticks with
$variable
) - Continue to expand tests to cover all new syntax and features.
Running the Project
Make sure your project compiles and the tests pass:
cargo build
cargo test