pasta_core
Pasta DSL のレジストリとユーティリティを提供する言語非依存層クレートです。
概要
pasta_core は Pasta DSL のシーン/単語テーブル管理を担当します。
DSLパーサーは独立クレート pasta_dsl に分離されており、
本クレートはバックエンド(Lua等)に依存しない純粋なデータ構造を提供します。
アーキテクチャ
pasta_core
├── Registry # シーン/単語テーブル管理
│ ├── SceneRegistry # シーン登録(Pass 1)
│ ├── WordDefRegistry # 単語定義登録
│ ├── SceneTable # シーン検索(Radix Trie)
│ └── WordTable # 単語検索
└── Error # テーブルエラー型定義
Note: DSLパーサーは独立クレート pasta_dsl に分離されています。
ディレクトリ構成
pasta_core/
├── Cargo.toml
└── src/
├── lib.rs # クレートエントリーポイント
├── error.rs # SceneTableError, WordTableError
└── registry/ # 型管理レイヤー
├── mod.rs # Registry API
├── scene_registry.rs # SceneRegistry
├── word_registry.rs # WordDefRegistry
├── scene_table.rs # SceneTable(Radix Trie)
├── word_table.rs # WordTable
└── random.rs # RandomSelector インターフェース
Note: パーサーモジュール(parser/, grammar.pest)は独立クレート pasta_dsl に移動されました。
公開API
パーサーAPI(
parse_str,parse_file, AST型)は pasta_dsl クレートに移動されました。
Registry
| 型 | 説明 |
|---|---|
SceneRegistry |
シーン登録・管理(Pass 1) |
WordDefRegistry |
単語定義登録 |
SceneTable |
シーン検索(完全一致 + 前方一致) |
WordTable |
単語検索 |
SceneEntry |
シーン情報エントリ |
WordEntry |
単語情報エントリ |
Random
| 型 | 説明 |
|---|---|
RandomSelector |
ランダム選択トレイト |
DefaultRandomSelector |
本番用ランダム実装 |
MockRandomSelector |
テスト用固定選択実装 |
使用例
基本的なパース
// DSLパーサーは pasta_dsl クレートを使用してください
use ;
let source = r#"
*挨拶
Alice:こんにちは
Bob:やあ!
"#;
let ast = parse_str.unwrap;
// グローバルシーン数をカウント
let scene_count = ast.items.iter
.filter
.count;
println!;
シーンテーブルの構築
use ;
let mut table = new;
// シーンを登録
let entry = SceneEntry ;
table.insert;
// 完全一致検索
let selector = new;
if let Some = table.get_exact
前方一致検索
use ;
let selector = new;
// "挨拶" で始まるすべてのシーンからランダムに1つ選択
if let Some = table.get_prefix
依存関係
| クレート | バージョン | 用途 |
|---|---|---|
| thiserror | 2 | エラー型定義 |
| fast_radix_trie | 1.1.0 | 前方一致検索(SceneTable) |
| rand | 0.9 | ランダム選択 |
| tracing | 0.1 | ロギング・診断 |
関連クレート
- pasta_dsl - DSLパーサー
- pasta_lua - Luaバックエンド
- pasta_shiori - SHIORI DLL統合
- プロジェクト概要 - pasta プロジェクト全体
ライセンス
プロジェクトルートの LICENSE ファイルを参照してください。