atlas-core 0.7.0

(In Alpha) Embeddable functional programming language
Documentation
# Atlas-core


Crate to host the [Atlas77](https://github.com/RedGear-Studio/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``:

```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:

```rust

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


Use the ``keyword!`` macro to define keywords:

```rust

keyword! {
    "if",
    "else",
    "while",
    // Add more keywords as needed
}
```
## Configuring Number Parsing


Use the ``number!`` macro to configure number parsing options:

```rust

number! {
    enable_f64: true,
    enable_i64: true
}
```

## Generating the Lexer


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

```rust

lexer!();
```

# Example


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

```rust

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](https://github.com/RedGear-Studio/atlas-core/blob/main/LICENSE). See the LICENSE file for details.