added github as repo

This commit is contained in:
LunarAkai 2025-08-06 12:10:42 +02:00
commit e769b891ab
9 changed files with 24 additions and 114 deletions

View file

@ -1 +1,3 @@
pub mod ast;
pub mod parser;
pub mod tokens;

View file

@ -1,6 +1,6 @@
use chumsky::{combinator::Or, prelude::{choice, just, recursive}, recursive, select, text::{self, ascii::ident}, IterParser, Parser};
use crate::{ast::ast::Expression, tokens::Token};
use crate::{language_frontend::ast::ast::Expression, language_frontend::tokens::Token};
#[allow(clippy::let_and_return)]

View file

@ -1,4 +0,0 @@
use std::collections::HashMap;
use inkwell::{builder::Builder, context::Context, module::Module, values::{FunctionValue, PointerValue}};

View file

@ -1,103 +0,0 @@
use std::collections::HashMap;
use inkwell::values::{BasicValueEnum, FunctionValue, PointerValue};
use crate::ast::ast::Expression;
pub mod compiler;
// LLVM Codegen
struct CodegenContext<'ctx> {
builder: inkwell::builder::Builder<'ctx>,
module: inkwell::module::Module<'ctx>,
context: &'ctx inkwell::context::Context,
variables: HashMap<String, PointerValue<'ctx>>,
functions: HashMap<String, FunctionValue<'ctx>>,
}
impl<'ctx, 'src> Expression<'src> {
fn codegen(&self, ctx: &mut CodegenContext<'ctx>) -> BasicValueEnum<'ctx> {
match self {
Expression::VariableName(name) => {
todo!()
},
Expression::Integer(_) => {
todo!()
},
Expression::Float(_) => {
todo!()
},
Expression::String(_) => {
todo!()
},
Expression::Bool(_) => {
todo!()
},
Expression::Negatation(expression) => {
todo!()
},
Expression::Add(
lhs,
rhs
) => {
let l = lhs.codegen(ctx).into_int_value();
let r = rhs.codegen(ctx).into_int_value();
ctx.builder.build_int_add(l, r, "addtmp").unwrap().into()
},
Expression::Substract(
lhs,
rhs
) => {
todo!()
},
Expression::Multiply(
lhs,
rhs
) => {
todo!()
},
Expression::Divide(
lhs,
rhs
) => {
todo!()
},
Expression::Var {
name,
rhs,
then
} => {
let value = rhs.codegen(ctx);
let ptr = ctx.builder.build_alloca(ctx.context.f32_type(), name).unwrap();
let _ = ctx.builder.build_store(ptr, value);
ctx.variables.insert(name.to_string(), ptr);
then.codegen(ctx)
},
Expression::Function {
name,
args,
body,
then
} => {
todo!()
},
Expression::Unit => {
todo!()
},
}
}
}

View file

@ -1,12 +1,9 @@
use chumsky::Parser;
use logos::Logos;
use crate::{parser::parser, tokens::Token};
use crate::{language_frontend::parser::parser, language_frontend::tokens::Token};
mod tokens;
mod language_frontend;
mod parser;
mod llvm_backend;
fn main() {
let lexer = Token::lexer("(1 + 1) * 3");