# 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.