Skip to content

ladroid/ToyLang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Toy language

Example how to develop AST tree, parser and lexer

How to use

fn main() {
    println!("Hello, world!");
    let lexer = Lexer::new("2 + 2 * 2");
    let mut parser = Parser::new(lexer);
    let ast = parser.expr();
    println!("AST: {:?}", ast);

    let mut interpreter = Interpreter {
        symbol_table: std::collections::HashMap::new(),
    };

    println!("Result: {}", interpreter.eval(&ast));

    println!("=============================");
    let lexer_if = Lexer::new("if 3 < 2 then 1+2 else 1*4");
    let mut parser_if = Parser::new(lexer_if);
    let ast_if = parser_if.if_then_else();
    println!("AST: {:?}", ast_if);

    let mut interpreter_if = Interpreter {
        symbol_table: std::collections::HashMap::new(),
    };

    println!("Result: {}", interpreter_if.eval(&ast_if));

    println!("=============================");
    let lexer_print = Lexer::new("print 2+2*2");
    let mut parser_print = Parser::new(lexer_print);
    let ast_print = parser_print.expr();
    println!("AST: {:?}", ast_print);

    let mut interpreter_print = Interpreter {
        symbol_table: std::collections::HashMap::new(),
    };

    println!("Result: {}", interpreter_print.eval(&ast_print));
}

Features

Completed

✅ Mathematical operations

✅ If then else

✅ Built-in function

Partial

❓ While loop

Will be

❗ Variable assign

❗ While loop

❗ Functions typed

Releases

No releases published

Packages

No packages published

Languages