klex 0.1.0

A simple lexer (tokenizer) generator for Rust
Documentation
# klex (kujira-lexer)

シンプルなLexer(字句解析器)ジェネレーターです。

## 概要

klexは、定義ファイルからRustのLexerコードを自動生成するツールです。正規表現でトークンのパターンを記述でき、自動的にToken構造体とLexer構造体を含むRustコードを出力します。

## インストール

```bash
cargo build --release
```

## 使い方

### 基本的な使い方

```bash
cargo run -- <入力ファイル> [出力ファイル]
```

### 入力ファイルの形式

入力ファイルは3つのセクションから構成され、`%%`で区切ります:

```
(ここにRustのコード - use文など)
%%
(ここにルール - 正規表現でトークンパターンを記述)
%%
(ここにRustのコード - main関数やテストなど)
```

### ルールの記述方法

各ルールは1行に1つ記述します:

```
正規表現パターン -> トークン名
```

例:
```
[0-9]+ -> NUMBER
[a-zA-Z_][a-zA-Z0-9_]* -> IDENTIFIER
\+ -> PLUS
\- -> MINUS
```

### 生成されるToken構造体

生成されるLexerは以下のToken構造体を出力します:

```rust
struct Token {
    kind: u32,        // トークンの種類(定数で定義される)
    value: String,    // トークンの文字列値
    row: usize,       // 行番号(1から開始)
    col: usize,       // 列番号(1から開始)
    length: usize,    // トークンの長さ
    indent: usize,    // インデント(行頭の空白数)
    tag: isize,       // カスタムタグ(デフォルトは0)
}
```

## 

`example.klex`ファイルを参照してください。

### Lexerの生成

```bash
cargo run -- example.klex generated_lexer.rs
```

### 生成されたLexerの使用

生成されたファイルには、`Lexer`構造体と関連する定数が含まれています:

```rust
let input = "123 + abc".to_string();
let mut lexer = Lexer::new(input);

while let Some(token) = lexer.next_token() {
    println!("{:?}", token);
}
```

## テスト

```bash
cargo test
```

## ライセンス

MITライセンスの下で公開されています。