added more example code, updated goals

This commit is contained in:
Tristan Smith 2024-09-20 01:49:24 -04:00
parent e4bc38017c
commit 86199fb28b
3 changed files with 77 additions and 128 deletions

55
examples-output.txt Normal file
View 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

View file

@ -61,22 +61,25 @@
<p>To parse 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>
<h2>Examples:</h2>
<pre><code class="language-rust">func main() {
// print statement
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 {
// variable declaration
let y = 5;
// Computes the square of a number
func square(x) => x ^ 2;
}
// if statement
if (x > 10) {
print("x is greater than 10");
}
sym number = 5;
print(`The square of $number is ${math.square($number)}`);</code></pre>
// while loop
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>
<h2>Running the Project</h2>
@ -86,6 +89,7 @@ print(`The square of $number is ${math.square($number)}`);</code></pre>
cargo test
cargo run</code></pre>
<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">
<h2>Goals and Projections:</h2>
@ -98,11 +102,12 @@ cargo run</code></pre>
</ul>
<p><strong><code>Parser</code>:</strong></p>
<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>
<p><strong><code>Compiler</code>:</strong></p>
<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>
<p><strong>Comments:</strong></p>
<ul>

View file

@ -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, 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.</p>
<p>I like aspects of many programming languages, but I didnt 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>
&copy; 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>