2024-09-15 03:58:54 +01:00
<!DOCTYPE html>
< html lang = "en" >
< head >
<!-- implement highlight.js soon -->
< meta charset = "UTF-8" >
2024-09-15 04:17:31 +01:00
< title > fddl programming language< / title >
2024-09-15 03:58:54 +01:00
<!-- Google Fonts -->
< link href = "https://fonts.googleapis.com/css?family=Roboto:400,700|Source+Code+Pro" rel = "stylesheet" >
<!-- Styles -->
< style >
body {
margin: 0;
font-family: 'Roboto', sans-serif;
background-color: #1e1e1e;
color: #c0c0c0;
line-height: 1.6;
}
header {
background-color: #282828;
padding: 20px;
text-align: center;
}
header h1 {
color: #ffffff;
margin: 0;
font-size: 2.5em;
}
main {
max-width: 800px;
margin: 20px auto;
padding: 0 20px;
}
h2 {
color: #ffffff;
border-bottom: 1px solid #444;
padding-bottom: 5px;
margin-top: 40px;
}
p {
margin-bottom: 15px;
}
pre {
background-color: #2e2e2e;
padding: 15px;
overflow-x: auto;
font-family: 'Source Code Pro', monospace;
color: #dcdcdc;
border-radius: 5px;
}
code {
color: #dcdcdc;
font-family: 'Source Code Pro', monospace;
background-color: #2e2e2e;
padding: 2px 4px;
border-radius: 3px;
}
a {
color: #569cd6;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.images {
text-align: center;
margin: 30px 0;
}
.images img {
max-width: 100%;
border: 1px solid #444;
border-radius: 5px;
margin: 10px 0;
}
footer {
background-color: #282828;
padding: 10px;
text-align: center;
color: #808080;
margin-top: 40px;
}
.contact {
margin-top: 40px;
text-align: center;
}
.notes {
background-color: #2e2e2e;
padding: 20px;
margin: 20px 0;
border-radius: 5px;
}
ul {
list-style: none;
padding-left: 0;
}
li::before {
content: "• ";
color: #569cd6;
}
.task-list-item {
margin-bottom: 5px;
}
.task-list-item input {
margin-right: 10px;
vertical-align: middle;
}
< / style >
< / head >
< body >
< header >
2024-09-15 04:17:31 +01:00
< h1 > fddl< / h1 >
2024-09-15 03:58:54 +01:00
< / header >
< main >
< section class = "images" >
< img src = "01.png" alt = "Lexer Screenshot" >
< img src = "02.png" alt = "Lexer Tests Screenshot" >
2024-09-15 04:17:31 +01:00
< img src = "03.png" alt = "REPL Screenshot" >
2024-09-15 03:58:54 +01:00
< / section >
< h2 > Overview< / h2 >
2024-09-15 04:17:31 +01:00
< p > fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in < a href = "https://rust-lang.org" > Rust< / a > .< / p >
2024-09-15 03:58:54 +01:00
< p > 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.< / p >
< p > So I started learning Rust and really like it. I've been following some tutorials and the < a href = "http://craftinginterpreters.com/" > Crafting Interpreters< / a > site as guides for this very problematic programming language.< / p >
< p > 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.< / p >
< p > So I, like many of you, decided to make a hobby programming language to see what may be able to be done with it.< / p >
2024-09-15 04:17:31 +01:00
< br / >
< p > The fact that I have a REPL working in this language is nothing short of amazing to me. It's fucking magic.< / p >
2024-09-15 03:58:54 +01:00
< h2 > Features< / h2 >
< ul >
2024-09-15 04:17:31 +01:00
< li > Custom syntax with unique (and possibly deranged) operators and keywords< / li >
2024-09-15 03:58:54 +01:00
< li > Documentation comments using < code > #< / code > , similar to Rust's style< / li >
< li > Lexer and parser built from scratch in Rust< / li >
< / ul >
< h2 > Getting Started< / h2 >
< p > To run the REPL:< / p >
< pre > < code > cargo run< / code > < / pre >
2024-09-15 04:17:31 +01:00
< p > To run a fddl script:< / p >
2024-09-15 03:58:54 +01:00
< pre > < code > cargo run path/to/script.fddl< / code > < / pre >
< h2 > Examples< / h2 >
< pre > < code > ##! 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)}`);
< / code > < / pre >
< p > (At least for right now.)< / p >
< h2 > License< / h2 >
< p > This project is licensed under the MIT License.< / p >
< div class = "notes" >
< h2 > Notes and Next Steps< / h2 >
< ul >
2024-09-15 04:17:31 +01:00
< li class = "task-list-item" > < input type = "checkbox" checked disabled > Added first new set of tokens and features, added the first < code > lexer< / code > tests.< / li >
2024-09-15 03:58:54 +01:00
< li class = "task-list-item" > < input type = "checkbox" disabled > < code > parser< / code > module is a placeholder.< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > < code > interpreter< / code > module is a placeholder.< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Implement a more robust error handling mechanism instead of using < code > stderr< / code > .< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Implement string interpolation (backticks with < code > $variable< / code > )< / li >
< li class = "task-list-item" > < input type = "checkbox" disabled > Continue to expand tests to cover all new syntax and features.< / li >
2024-09-15 04:17:31 +01:00
< li class = "task-list-item" > < input type = "checkbox" checked disabled > Made a crappy website.< / li >
2024-09-15 03:58:54 +01:00
< / ul >
< / div >
< h2 > Running the Project< / h2 >
< p > Make sure your project compiles and the tests pass:< / p >
2024-09-15 04:17:31 +01:00
< pre > < code >
cargo build
2024-09-15 03:58:54 +01:00
cargo test
2024-09-15 04:17:31 +01:00
< / code > < / pre >
< p > Although there's not much there right now. But the REPL works!< / p >
2024-09-15 03:58:54 +01:00
< div class = "contact" >
< p > < a href = "mailto:tristan@fddl.dev" > Contact< / a > < / p >
< / div >
< / main >
< footer >
2024-09-15 04:17:31 +01:00
© 2024 fddl.dev
2024-09-15 03:58:54 +01:00
< / footer >
< / body >
< / html >