atlas-core

Crates.ioatlas-core
lib.rsatlas-core
version0.7.0-beta2
sourcesrc
created_at2023-10-24 12:40:35.666685
updated_at2024-12-05 15:30:39.898737
description(In Alpha) Embeddable functional programming language
homepagehttps://redgear.tk/
repositoryhttps://github.com/RedGear-Studio/atlas-core
max_upload_size
id1012332
size39,285
Gipson62 (Gipson62)

documentation

README

Atlas-core

Crate to host the Atlas77 project. An embeddable functional language.

atlas_core

atlas_core is a Rust library designed to facilitate lexical analysis and token parsing for programming languages. It provides a flexible and customizable lexer implementation, along with macros to define language-specific tokens, keywords, and symbols. Features

  • Lexer Generation: Automatically generate lexer structures and methods using macros.
  • Token Kind Definition: Easily define various token kinds including literals, keywords, and symbols.
  • Error Handling: Robust error handling with detailed error messages and support for recoverable errors.
  • Customizable: Configure your lexer with specific keywords, symbols, and number parsing options.

Installation

Add the following to your Cargo.toml:


[dependencies]
atlas_core = "0.6.0"

Usage

Defining Symbols

Everything is under refactoring, so it won't work like that. Stay tuned for update!

Use the symbols! macro to define symbols used in your language:


symbols! {
    '+' => Plus,
    '-' => Minus,
    '*' => Asterisk,
    '/' => Slash,
    // Add more symbols as needed
}

Defining Keywords

Use the keyword! macro to define keywords:


keyword! {
    "if",
    "else",
    "while",
    // Add more keywords as needed
}

Configuring Number Parsing

Use the number! macro to configure number parsing options:


number! {
    enable_f64: true,
    enable_i64: true
}

Generating the Lexer

Use the lexer! macro to generate the lexer with default or customized configurations:


lexer!();

Example

Here's an example of using atlas_core to create a simple lexer:


use atlas_core::prelude::*;

symbols! {
    '+' => Plus,
    '{' => LBracket,
    '}' => RBracket,
    ';' => SemiColon,
}

keyword! {
    "if",
    "return"
}

number! {
    enable_f64: true,
    enable_i64: true
}

lexer!();

fn main() {
    let source = "if x + y { return 42; }";
    let tokens = Lexer::tokenize("example.rs", source).unwrap();
    
    for token in tokens {
        println!("{:?}", token);
    }
}

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Commit count: 52

cargo fmt