← Back to Docs

🔧 Building a Language

Step-by-step guide to building your first language with The Guardian

Overview

Building a language with The Guardian is simple. You'll create a lexer, parser, and compiler that generates bytecode for The Guardian's VM.

Step 1: Create the Lexer

The lexer tokenizes source code into tokens.

#include <guardian/parser/parser.hpp>

using namespace guardian::parser;

class MyLexer : public Lexer {
public:
    MyLexer(const std::string& source) : Lexer(source) {}
    
    std::vector tokenize() {
        // Custom tokenization logic
        return Lexer::tokenize();
    }
};

Step 2: Create the Parser

The parser builds an AST from tokens.

class MyParser : public Parser {
public:
    MyParser(const std::vector& tokens) : Parser(tokens) {}
    
    std::unique_ptr parse() override {
        // Custom parsing logic
        return Parser::parse();
    }
};

Step 3: Generate Bytecode

Use The Guardian's CodeGen to generate bytecode.

#include <guardian/vm/codegen.hpp>

vm::CodeGen codegen;
codegen.pushInt(42);
codegen.print();
codegen.halt();
auto bytecode = codegen.getBytecode();

Step 4: Run on The Guardian VM

#include <guardian/vm/vm.hpp>

vm::VM vm;
vm.load(bytecode);
vm.run();

Full Example: Axiom Language

Check out the complete Axiom language implementation:

git clone https://github.com/Taha95-dev/The-Guardian
cd The-Guardian/examples/axiom
cat compiler.cpp

Next Steps