about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-03-09 12:13:00 +0100
committerBaitinq <[email protected]>2025-03-09 12:14:18 +0100
commit0fa3e2ed212e780c52c14818bbc6e6fd1eca7b62 (patch)
tree96bef14ed50b22c49da927f347a465f2b1c571a9
parentExamples: Add new more complex examples (diff)
downloadinterpreter-0fa3e2ed212e780c52c14818bbc6e6fd1eca7b62.tar.gz
interpreter-0fa3e2ed212e780c52c14818bbc6e6fd1eca7b62.tar.bz2
interpreter-0fa3e2ed212e780c52c14818bbc6e6fd1eca7b62.zip
Misc: Add README
Diffstat (limited to '')
-rw-r--r--README.md50
1 files changed, 50 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a6e18d3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,50 @@
+# Programming Language
+
+Simple statically typed and compiled programming language implemented in Zig, with support for variables, control flow, functions, and code generation using LLVM.
+
+## Building and Running
+
+1. Ensure you have Zig and LLVM installed on your system.
+2. Run the compiler on an example file:
+   ```
+   zig build run -- examples/8.src compile
+   ```
+3. Link the generated object file to create an executable:
+   ```
+   cc output.o
+   ```
+4. Run the executable:
+   ```
+   ./a.out
+   ```
+
+## Language Features
+
+- **Variables and Declarations**: Uses `let` for variable declaration.
+- **Control Flow**: Supports `if` and `while` statements.
+- **Functions**: Supports function declarations with parameters and return types.
+- **Expressions**: Includes additive, multiplicative, equality, and unary expressions.
+- **Code Generation with LLVM**: Translates AST to LLVM IR and generates object files for native execution.
+
+## Example Program
+
+```js
+let main = () => i64 {
+	let fib = (n: i64) => i64 {
+		if n == 0 {
+			return 0;
+		};
+		if n == 1 {
+			return 1;
+		};
+		return fib(n-2) + fib(n-1);
+	};
+
+	let result = fib(30);
+	print(result);
+	return result;
+};
+```
+```
+Output: 832040
+```