mirror of
https://git.fddl.dev/fddl/fddl.git
synced 2024-12-25 13:50:26 +00:00
108 lines
3.1 KiB
Markdown
108 lines
3.1 KiB
Markdown
# 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, I’ve 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.
|
||
|
||
---
|
||
|
||
## 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)
|
||
```sh
|
||
cargo run
|
||
```
|
||
|
||
### Parse a fddl Script
|
||
```sh
|
||
cargo run path/to/script.fddl
|
||
```
|
||
|
||
## Running the Project
|
||
|
||
Make sure your project compiles and the tests pass:
|
||
|
||
```bash
|
||
cargo build
|
||
cargo test
|
||
```
|
||
|
||
---
|
||
|
||
## Examples
|
||
|
||
Here are a couple of examples showcasing the current capabilities of fddl:
|
||
|
||
### Hello World
|
||
|
||
```fddl
|
||
func main() {
|
||
print("hello, world in fddl");
|
||
}
|
||
```
|
||
|
||
### Simple Math Module and Variable Declaration
|
||
|
||
```fddl
|
||
# 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 a future update.)
|
||
|
||
---
|
||
|
||
## Roadmap and Next Steps
|
||
|
||
fddl is very much a work in progress, with lots of planned improvements and additions. Here's a breakdown of what’s done and what’s coming up:
|
||
|
||
- **Lexer**:
|
||
- [x] Built and tested for basic syntax and operators.
|
||
- [x] Supports single-line and documentation comments.
|
||
- [ ] Add support for more complex syntax and features.
|
||
|
||
- **Parser**:
|
||
- [ ] 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.
|
||
|
||
- **Compiler**:
|
||
- [ ] Currently a placeholder. Implement the compiler to compile parsed code.
|
||
|
||
- **Comments**:
|
||
- [x] 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.
|
||
|
||
- **Testing**:
|
||
- [x] Added initial `lexer` tests.
|
||
- [ ] Expand tests to cover more syntax and edge cases.
|
||
|
||
---
|
||
|
||
## License
|
||
|
||
This project is licensed under the MIT License.
|