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
use ;
let source = "*挨拶\n Alice:こんにちは\n";
let ast = parse_str.unwrap;
for item in &ast.items
Public API
Parse Functions
parse_str(source, filename)— 文字列からDSLをパースparse_file(path)— ファイルからDSLをパース
AST Types
PastaFile— ファイル全体のASTFileItem— ファイルレベルアイテム(属性、単語定義、シーン、アクター)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