pasta_dsl 0.1.22

Pasta DSL - Independent DSL parser and AST definitions
Documentation
# pasta_dsl


**Pasta DSL - Independent DSL parser and AST definitions**

Pasta DSLの独立パーサークレート。Luaバックエンドやレジストリに依存せず、DSL文法解析とAST型定義のみを提供します。

## Purpose


- Pasta DSLスクリプトを解析してAST(抽象構文木)に変換
- 外部開発者がpasta_dslのみを依存に追加してDSL解析を利用可能
- 新しいバックエンド実装(Lua以外)を容易にする

## Features


- **PEG文法パーサー**: Pest 2.8による堅牢な文法駆動パーサー
- **完全なAST型定義**: `PastaFile`, `FileItem`, `GlobalSceneScope`, `Action`- **独立エラー型**: `ParseError`, `ParseErrorInfo` による詳細なパース診断
- **ゼロバックエンド依存**: Lua、レジストリ、ランタイムへの依存なし
- **ステートレス**: 複数スレッドから安全に呼び出し可能

## Usage


```rust
use pasta_dsl::parser::{parse_str, FileItem};

let source = "*挨拶\n  Alice:こんにちは\n";
let ast = parse_str(source, "test.pasta").unwrap();

for item in &ast.items {
    match item {
        FileItem::FileAttr(attr) => println!("Attr: {}", attr.key),
        FileItem::GlobalWord(word) => println!("Word: {}", word.name),
        FileItem::GlobalSceneScope(scene) => println!("Scene: {}", scene.name),
        FileItem::ActorScope(actor) => println!("Actor: {}", actor.name),
    }
}
```

## Public API


### Parse Functions


- `parse_str(source, filename)` — 文字列からDSLをパース
- `parse_file(path)` — ファイルからDSLをパース

### AST Types


- `PastaFile` — ファイル全体のAST
- `FileItem` — ファイルレベルアイテム(属性、単語定義、シーン、アクター)
- `GlobalSceneScope` — グローバルシーン定義
- `LocalSceneScope` — ローカルシーン定義
- `ActorScope` — アクター定義
- `Action` — アクション(Talk, WordRef, VarRef, FnCall, SakuraScript, Escape)
- `Span` — ソース位置情報(行/列 + バイトオフセット)

### Error Types


- `ParseError` — パースエラー(SyntaxError, PestError, IoError, MultipleErrors)
- `ParseErrorInfo` — 個別パースエラー情報
- `ParseResult<T>``Result<T, ParseError>` エイリアス

## Dependencies


| クレート    | バージョン | 用途                 |
| ----------- | ---------- | -------------------- |
| pest        | 2.8        | PEG文法解析エンジン  |
| pest_derive | 2.8        | ビルド時パーサー生成 |
| thiserror   | 2          | エラー型生成マクロ   |

**注**: レジストリ関連(fast_radix_trie, rand)やLuaランタイム(mlua)への依存は一切ありません。

## Architecture


```
pasta_dsl
├── src/
│   ├── lib.rs               # クレートエントリーポイント
│   ├── error.rs             # ParseError, ParseErrorInfo, ParseResult
│   └── parser/
│       ├── mod.rs           # パーサーAPI(parse_str, parse_file)
│       ├── parse_scene.rs   # シーン解析
│       ├── parse_action.rs  # アクション解析
│       ├── parse_elements.rs # 要素解析
│       ├── ast/             # AST型定義(ディレクトリ)
│       │   ├── mod.rs       # AST公開エントリ
│       │   ├── span.rs      # Span型定義
│       │   ├── scene.rs     # シーン関連AST
│       │   └── action.rs    # アクション関連AST
│       └── grammar.pest     # Pest文法定義(権威的仕様)
└── tests/
    ├── actor_code_block_test.rs   # アクターコードブロック解析テスト
    ├── ast_test.rs                # AST型テスト
    ├── digit_id_var_test.rs       # 全角数字変数テスト
    ├── parser_test.rs             # パーサー統合テスト
    ├── sakura_symbol_tag_test.rs  # さくらスクリプト記号タグテスト
    └── span_byte_offset_test.rs   # バイトオフセットテスト
```

## License


MIT OR Apache-2.0