# TL言語 トークン一覧

このドキュメントでは、TL言語（TinyLlama Compiler Language）で使用されるトークン（字句）の全リストを定義します。これらはコンパイラの `Lexer` によってソースコードから抽出されます。

## 1. キーワード (Keywords)

これらの語句は予約語であり、識別子（変数名や関数名など）として使用することはできません。

| トークン | キーワード | 説明 |
| :--- | :--- | :--- |
| `Fn` | `fn` | 関数定義の開始 |
| `Struct` | `struct` | 構造体定義の開始 |
| `Impl` | `impl` | 実装ブロックの開始 |
| `Let` | `let` | 変数宣言 |
| `Mut` | `mut` | 可変（mutable）修飾子 |
| `If` | `if` | 条件分岐 |
| `Else` | `else` | 条件分岐のelse節 |
| `Return` | `return` | 関数からの戻り値 |
| `For` | `for` | 繰り返し処理（forループ） |
| `In` | `in` | イテレータの指定 |
| `While` | `while` | 繰り返し処理（whileループ） |
| `Loop` | `loop` | 無限ループ |
| `Break` | `break` | ループの中断 |
| `Continue` | `continue` | 次の反復へスキップ |
| `Match` | `match` | パターンマッチング |
| `True` | `true` | 真理値リテラル (真) |
| `False` | `false` | 真理値リテラル (偽) |
| `Pub` | `pub` | 公開（public）修飾子 |
| `Use` | `use` | モジュールのインポート |
| `Mod` | `mod` | モジュール宣言 |
| `As` | `as` | 型キャスト |
| `Extern` | `extern` | 外部関数宣言 |
| `Enum` | `enum` | 列挙型定義 |
| `Self_` | `self` | メソッドのレシーバ (インスタンス自身) |

## 2. プリミティブ型 (Primitive Types)

これらは基本的なデータ型を表すキーワードです。

| トークン | 型名 | 説明 |
| :--- | :--- | :--- |
| `F32Type` | `f32` | 32ビット浮動小数点数 |
| `F64Type` | `f64` | 64ビット浮動小数点数 |
| `I32Type` | `i32` | 32ビット整数 |
| `I64Type` | `i64` | 64ビット整数 |
| `BoolType` | `bool` | 真理値型 |
| `UsizeType` | `usize` | ポインタサイズ符号なし整数 |
| `VoidType` | `void` | 値を持たない型 |
| `StringType` | `String` | 文字列型 |
| `CharType` | `Char` | 文字型 |

## 3. 識別子 (Identifiers)

ユーザー定義の名前です。

*   **正規表現**: `[a-zA-Z][a-zA-Z0-9_]*` または `_[a-zA-Z0-9_]+`
*   **例**: `count`, `my_variable`, `Type_Name`, `_unused`

## 4. リテラル (Literals)

直接記述される固定値です。

| トークン | 例 | 説明 |
| :--- | :--- | :--- |
| `IntLiteral` | `42`, `-10` | 整数リテラル |
| `FloatLiteral` | `3.14`, `1.0e-5` | 浮動小数点リテラル |
| `StringLiteral` | `"hello"`, `"foo\nbar"` | 文字列リテラル |
| `CharLiteral` | `'a'`, `'\n'` | 文字リテラル |

## 5. 記号・デリミタ (Symbols & Delimiters)

構文構造を定義するための単一または複数の記号です。

| トークン | 記号 | 説明 |
| :--- | :--- | :--- |
| `LParen` | `(` | 左括弧 |
| `RParen` | `)` | 右括弧 |
| `LBrace` | `{` | 左波括弧（ブロック開始） |
| `RBrace` | `}` | 右波括弧（ブロック終了） |
| `LBracket` | `[` | 左角括弧（配列/インデックス） |
| `RBracket` | `]` | 右角括弧 |
| `Comma` | `,` | カンマ（区切り） |
| `Dot` | `.` | ドット（フィールドアクセス/メソッド呼び出し） |
| `Colon` | `:` | コロン（型注釈） |
| `SemiColon` | `;` | セミコロン（文末） |
| `Assign` | `=` | 代入 |
| `Arrow` | `->` | 関数の戻り値の型指定 |
| `FatArrow` | `=>` | マッチアームの区切り |
| `DoubleColon` | `::` | パス区切り |
| `Range` | `..` | 範囲指定 |

## 6. 演算子 (Operators)

算術、比較、論理演算に使用される演算子です。

| トークン | 演算子 | 説明 |
| :--- | :--- | :--- |
| `Plus` | `+` | 加算 |
| `Minus` | `-` | 減算 |
| `Star` | `*` | 乗算 |
| `Slash` | `/` | 除算 |
| `Percent` | `%` | 常世 |
| `Eq` | `==` | 等価比較 |
| `Ne` | `!=` | 非等価比較 |
| `Lt` | `<` | 小なり |
| `Gt` | `>` | 大なり |
| `Le` | `<=` | 小なりイコール |
| `Ge` | `>=` | 大なりイコール |
| `And` | `&&` | 論理積 (AND) |
| `Or` | `||` | 論理和 (OR) |
| `Not` | `!` または `not` | 論理否定 (NOT) |
| `Pipe` | `|` | パイプ (ビットORまたはクロージャ引数) |
| `Ampersand` | `&` | アンパサンド (ビットAND) |
| `Caret` | `^` | キャレット (ビットXOR) |

### 代入演算子 (Assignment Operators)

| トークン | 演算子 | 説明 |
| :--- | :--- | :--- |
| `PlusAssign` | `+=` | 加算代入 |
| `MinusAssign` | `-=` | 減算代入 |
| `StarAssign` | `*=` | 乗算代入 |
| `SlashAssign` | `/=` | 除算代入 |
| `PercentAssign` | `%=` | 剰余代入 |

## 7. 特殊記号 / 論理プログラミング用 (Logic Programming / Special)

TL言語の拡張機能（DatalogやTensor操作）などで使用される特殊な記号です。

| トークン | 記号 | 説明 |
| :--- | :--- | :--- |
| `LArrow` | `<-` | 左矢印 (ジェネレータなど) |
| `Entails` | `:-` | 含意 (Datalogルール) |
| `Underscore` | `_` | ワイルドカード |
| `Question` | `?` | 任意またはオプショナル |
| `Dollar` | `$` | 特殊変数またはマクロ |

## 8. 無視される要素 (Ignored)

以下の要素はトークン化の際にスキップされます。

*   空白文字 (` `, `\t`, `\n`, `\f`)
*   行コメント (`//` から行末まで)
*   ブロックコメント (`/* ... */`)
