fddl/readme.md

108 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
---
## 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 whats done and whats 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.