mirror of
https://git.fddl.dev/fddl/fddl.dev.git
synced 2024-12-25 23:10:31 +00:00
added more example code, updated goals
This commit is contained in:
parent
e4bc38017c
commit
86199fb28b
3 changed files with 77 additions and 128 deletions
55
examples-output.txt
Normal file
55
examples-output.txt
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
fddl examples.fddl
|
||||||
|
Func
|
||||||
|
Identifier("main")
|
||||||
|
LeftParen
|
||||||
|
RightParen
|
||||||
|
LeftBrace
|
||||||
|
Comment(" print statement")
|
||||||
|
Print
|
||||||
|
LeftParen
|
||||||
|
StringLiteral("hello, world in fddl")
|
||||||
|
RightParen
|
||||||
|
Semicolon
|
||||||
|
Comment(" variable declaration")
|
||||||
|
Let
|
||||||
|
Identifier("y")
|
||||||
|
Equal
|
||||||
|
Number(5.0)
|
||||||
|
Semicolon
|
||||||
|
Comment(" if statement")
|
||||||
|
If
|
||||||
|
LeftParen
|
||||||
|
Identifier("x")
|
||||||
|
Greater
|
||||||
|
Number(10.0)
|
||||||
|
RightParen
|
||||||
|
LeftBrace
|
||||||
|
Print
|
||||||
|
LeftParen
|
||||||
|
StringLiteral("x is greater than 10")
|
||||||
|
RightParen
|
||||||
|
Semicolon
|
||||||
|
RightBrace
|
||||||
|
Comment(" while loop")
|
||||||
|
While
|
||||||
|
LeftParen
|
||||||
|
Identifier("x")
|
||||||
|
Less
|
||||||
|
Number(100.0)
|
||||||
|
RightParen
|
||||||
|
LeftBrace
|
||||||
|
Print
|
||||||
|
LeftParen
|
||||||
|
Identifier("x")
|
||||||
|
RightParen
|
||||||
|
Semicolon
|
||||||
|
Let
|
||||||
|
Identifier("x")
|
||||||
|
Equal
|
||||||
|
Identifier("x")
|
||||||
|
Plus
|
||||||
|
Number(1.0)
|
||||||
|
Semicolon
|
||||||
|
RightBrace
|
||||||
|
RightBrace
|
||||||
|
EOF
|
33
index.html
33
index.html
|
@ -61,22 +61,25 @@
|
||||||
<p>To parse a fddl script:</p>
|
<p>To parse a fddl script:</p>
|
||||||
<pre><code class="language-bash">cargo run path/to/script.fddl</code></pre>
|
<pre><code class="language-bash">cargo run path/to/script.fddl</code></pre>
|
||||||
|
|
||||||
<h2>Examples</h2>
|
<h2>Examples:</h2>
|
||||||
<p>Your basic "hello, world":</p>
|
|
||||||
<pre><code class="language-rust">func main() {
|
<pre><code class="language-rust">func main() {
|
||||||
print("hello, world in fddl");
|
// print statement
|
||||||
}</code></pre>
|
print("hello, world in fddl");
|
||||||
<p>Defining a function inside a module, squaring a number:</p>
|
|
||||||
<pre><code class="language-rust"># This is a sample module
|
|
||||||
|
|
||||||
module math {
|
// variable declaration
|
||||||
|
let y = 5;
|
||||||
|
|
||||||
// Computes the square of a number
|
// if statement
|
||||||
func square(x) => x ^ 2;
|
if (x > 10) {
|
||||||
}
|
print("x is greater than 10");
|
||||||
|
}
|
||||||
|
|
||||||
sym number = 5;
|
// while loop
|
||||||
print(`The square of $number is ${math.square($number)}`);</code></pre>
|
while (x < 100) {
|
||||||
|
print(x);
|
||||||
|
let x = x + 1;
|
||||||
|
}
|
||||||
|
}</code></pre>
|
||||||
<p>At least for right now. I still want to do something odd.</p>
|
<p>At least for right now. I still want to do something odd.</p>
|
||||||
|
|
||||||
<h2>Running the Project</h2>
|
<h2>Running the Project</h2>
|
||||||
|
@ -86,6 +89,7 @@ print(`The square of $number is ${math.square($number)}`);</code></pre>
|
||||||
cargo test
|
cargo test
|
||||||
cargo run</code></pre>
|
cargo run</code></pre>
|
||||||
<p>Again, <code>cargo run</code> only starts the REPL for testing.</p>
|
<p>Again, <code>cargo run</code> only starts the REPL for testing.</p>
|
||||||
|
<p>running <code>fddl examples.fddl</code> (from the git repo) produces <a href="examples-output.txt">the following</a>.</p>
|
||||||
|
|
||||||
<div class="notes">
|
<div class="notes">
|
||||||
<h2>Goals and Projections:</h2>
|
<h2>Goals and Projections:</h2>
|
||||||
|
@ -98,11 +102,12 @@ cargo run</code></pre>
|
||||||
</ul>
|
</ul>
|
||||||
<p><strong><code>Parser</code>:</strong></p>
|
<p><strong><code>Parser</code>:</strong></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="task-list-item"><input type="checkbox" disabled> Currently a placeholder. Implement parsing for function calls, expressions, checks, literally everything.</li>
|
<li class="task-list-item"><input type="checkbox" disabled> Working on building out functions to parse simple functionality in the language (if, while, for), and to read their expressions and values</li>
|
||||||
|
<li class="task-list-item"><input type="checkbox" disabled> Implement parsing for function calls, expressions, checks, literally everything.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><strong><code>Compiler</code>:</strong></p>
|
<p><strong><code>Compiler</code>:</strong></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="task-list-item"><input type="checkbox" disabled> Currently a placeholder. Implement the compiler to compile parsed code.</li>
|
<li class="task-list-item"><input type="checkbox" disabled> Currently a placeholder. We're a long way from here. If I see this step I'll be lucky.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><strong>Comments:</strong></p>
|
<p><strong>Comments:</strong></p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
111
index2.html
111
index2.html
|
@ -1,111 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>fddl Programming Language</title>
|
|
||||||
<!-- Meta Tags for SEO -->
|
|
||||||
<meta name="description" content="fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust.">
|
|
||||||
<meta name="keywords" content="fddl programming language, Rust, hobby language, lexer, parser, interpreter, custom syntax, language implementation">
|
|
||||||
<meta name="author" content="Tristan">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<!-- Open Graph Meta Tags for Social Sharing -->
|
|
||||||
<meta property="og:title" content="Fiddle Programming Language">
|
|
||||||
<meta property="og:description" content="A small programming language designed to help learn language implementation concepts in Rust.">
|
|
||||||
<meta property="og:url" content="https://fddl.dev/">
|
|
||||||
<meta property="og:type" content="website">
|
|
||||||
<!-- Twitter Card Meta Tags -->
|
|
||||||
<meta name="twitter:title" content="Fiddle Programming Language">
|
|
||||||
<meta name="twitter:description" content="A Rust-based hobby programming language with custom syntax and unique features.">
|
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
|
||||||
<!-- Google Fonts -->
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Roboto:400,700|Source+Code+Pro" rel="stylesheet">
|
|
||||||
<!-- Highlight.js Styles -->
|
|
||||||
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/default.min.css">
|
|
||||||
<!-- Custom Stylesheet -->
|
|
||||||
<link rel="stylesheet" href="styles.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1>fddl Programming Language</h1>
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
<section class="images">
|
|
||||||
<img src="01.png" alt="Lexer Screenshot">
|
|
||||||
<img src="02.png" alt="Lexer Tests Screenshot">
|
|
||||||
<img src="03.png" alt="REPL Screenshot">
|
|
||||||
<img src="04.png" alt="Parsing 'hello, world'">
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<h2>Overview</h2>
|
|
||||||
<p>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.</p>
|
|
||||||
<p>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.</p>
|
|
||||||
|
|
||||||
<p>I like aspects of many programming languages, but I didn’t fully enjoy any of them, which made it difficult to commit to one. So, like many others, I decided to create my own hobby programming language.</p>
|
|
||||||
|
|
||||||
<h2>Features</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Custom syntax with unique operators and keywords</li>
|
|
||||||
<li>Documentation comments using <code>#</code>, similar to Rust's style</li>
|
|
||||||
<li>Lexer and parser built from scratch</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>Getting Started</h2>
|
|
||||||
<p>To clone the repo:</p>
|
|
||||||
<pre><code class="language-bash">git clone https://git.fddl.dev/fddl/fddl.git</code></pre>
|
|
||||||
<p>To run the REPL:</p>
|
|
||||||
<pre><code class="language-bash">cargo run</code></pre>
|
|
||||||
<p>To run a fddl script:</p>
|
|
||||||
<pre><code class="language-bash">cargo run path/to/script.fddl</code></pre>
|
|
||||||
|
|
||||||
<h2>Examples</h2>
|
|
||||||
<p>Your basic "hello, world":</p>
|
|
||||||
<pre><code class="language-rust">
|
|
||||||
func main() {
|
|
||||||
print(`hello, world in fddl`);
|
|
||||||
}
|
|
||||||
</code></pre>
|
|
||||||
<p>Defining a function inside a module, squaring a number:</p>
|
|
||||||
<pre><code class="language-rust">##! 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 now.)</p>
|
|
||||||
|
|
||||||
<h2>Notes and Next Steps</h2>
|
|
||||||
<ul>
|
|
||||||
<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>
|
|
||||||
<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>
|
|
||||||
<li class="task-list-item"><input type="checkbox" checked disabled> Made a basic website.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>Running the Project</h2>
|
|
||||||
<p>Make sure your project compiles and the tests pass:</p>
|
|
||||||
<pre><code class="language-bash">cargo build
|
|
||||||
cargo test</code></pre>
|
|
||||||
|
|
||||||
<div class="contact">
|
|
||||||
<p><a href="mailto:email@example.com">Contact</a></p>
|
|
||||||
<p><a href="https://git.fddl.dev/fddl/fddl">Git repo</a></p>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
<footer>
|
|
||||||
© 2024 fddl Programming Language
|
|
||||||
</footer>
|
|
||||||
<!-- Highlight.js Scripts -->
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
|
|
||||||
<script>hljs.highlightAll();</script>
|
|
||||||
<!-- Cloudflare Email Protection Script -->
|
|
||||||
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in a new issue