1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//! Cue command AST types for `!` command lines.
//!
//! `!id[@scoped_ident][(args)]` 形式のキューコマンド行を構造的に表現する AST ノード型。
//! コマンド名の意味解釈は行わない(dola 側の責務)。
use Span;
// ============================================================================
// CueCommandNode - Cue Command Line AST Node
// ============================================================================
/// キューコマンド行の AST ノード。
///
/// `!id[@scoped_ident][(args)]` 形式のキューコマンドを構造的に保持する。
/// コマンド名の意味解釈は行わない(dola 側の責務)。
///
/// # grammar.pest 対応
///
/// `cue_cmd_line = { pad ~ cue_cmd_marker ~ cue_cmd_name ~ cue_cmd_scope? ~ cue_cmd_args? ~ or_comment_eol }`
///
/// # 例
///
/// | DSL 記法 | command | scope | args |
/// |---------|---------|-------|------|
/// | `!emote@普通(normal)` | `"emote"` | `Some(ScopedName { actor: None, name: "普通" })` | `[Ident("normal")]` |
/// | `!mark@挨拶後` | `"mark"` | `Some(ScopedName { actor: None, name: "挨拶後" })` | `[]` |
/// | `!yield(10.0)` | `"yield"` | `None` | `[Float(10.0)]` |
/// | `!clear` | `"clear"` | `None` | `[]` |
// ============================================================================
// ScopedName - Scoped Identifier
// ============================================================================
/// スコープ付き識別子。
///
/// `@name` または `@actor:name` 形式を表現する。
/// `:` で区切られた場合、前半が `actor`、後半が `name`。
///
/// PEG 文法の `cue_scoped_ident` はアトミックルールであるため、
/// Rust 側で `:` 分割を行う。
///
/// # 例
///
/// - `@笑顔` → `ScopedName { actor: None, name: "笑顔" }`
/// - `@さくら:笑顔` → `ScopedName { actor: Some("さくら"), name: "笑顔" }`
// ============================================================================
// CueArgToken - Cue Command Argument Token
// ============================================================================
/// キューコマンド引数のトークン。
///
/// 既存文法のプリミティブを組み合わせた引数トークンを表現する。
/// 各トークンは構文解析レベルの型情報のみを持ち、意味解釈は dola 側で行う。
///
/// # grammar.pest 対応
///
/// `cue_arg = _{ cue_arg_at_ref | number_literal | string_literal | cue_arg_id }`
///
/// # バリアント
///
/// - `Ident`: 汎用識別子(`cue_arg_id`)
/// - `StringLiteral`: 文字列リテラル(`string_literal`)
/// - `Integer`: 整数リテラル(`number_literal` で小数点なし)
/// - `Float`: 浮動小数点リテラル(`number_literal` で小数点あり)
/// - `AtRef`: @参照(`cue_arg_at_ref`)