Skip to main content

oak_zig/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum ZigElementType {
8    Root,
9    // 基础 kind
10    Whitespace,
11    Newline,
12    Comment,
13    DocComment,
14    Error,
15    Eof,
16
17    // 字面量
18    Identifier,
19    StringLiteral,
20    CharLiteral,
21    IntegerLiteral,
22    FloatLiteral,
23    BooleanLiteral,
24    Literal, // Added
25
26    // Zig 关键字 - 基本结构
27    Const,
28    Var,
29    Fn,
30    Struct,
31    Union,
32    Enum,
33    Opaque,
34    Type,
35    Comptime,
36    Inline,
37    NoInline,
38    Pub,
39    Export,
40    Extern,
41    Packed,
42    Align,
43    CallConv,
44    LinkSection,
45
46    // Zig 关键字 - 控制流
47    If,
48    Else,
49    Switch,
50    While,
51    For,
52    Break,
53    Continue,
54    Return,
55    Defer,
56    ErrDefer,
57    Unreachable,
58    NoReturn,
59
60    // Zig 关键字 - 错误处理
61    ErrorKeyword,
62
63    // Zig 关键字 - 测试和异步
64    Test,
65    Async,
66    Await,
67    Suspend,
68    Resume,
69    Cancel,
70
71    // Zig 关键字 - 内存管理
72    Undefined,
73    Null,
74    Volatile,
75    AllowZero,
76    NoAlias,
77
78    // Zig 关键字 - 其他
79    And,
80    Or,
81    AnyFrame,
82    AnyType,
83    ThreadLocal,
84
85    // 基本类型
86    Bool,
87    I8,
88    I16,
89    I32,
90    I64,
91    I128,
92    Isize,
93    U8,
94    U16,
95    U32,
96    U64,
97    U128,
98    Usize,
99    F16,
100    F32,
101    F64,
102    F80,
103    F128,
104    CShort,
105    CUshort,
106    CInt,
107    CUint,
108    CLong,
109    CUlong,
110    CLongLong,
111    CUlongLong,
112    CLongDouble,
113    CVoid,
114    Void,
115    ComptimeInt,
116    ComptimeFloat,
117
118    // 操作符
119    Plus,
120    Minus,
121    Star,
122    Slash,
123    Percent,
124    StarStar,
125    PlusPercent,
126    MinusPercent,
127    StarPercent,
128    PlusPlus,
129    MinusMinus,
130
131    // 位操作符
132    Ampersand,
133    Pipe,
134    Caret,
135    Tilde,
136    LessLess,
137    GreaterGreater,
138
139    // 比较操作符
140    Equal,
141    NotEqual,
142    Less,
143    Greater,
144    LessEqual,
145    GreaterEqual,
146
147    // 逻辑操作符
148    AndAnd,
149    OrOr,
150
151    // 赋值操作符
152    Assign,
153    PlusAssign,
154    MinusAssign,
155    StarAssign,
156    SlashAssign,
157    PercentAssign,
158    AmpersandAssign,
159    PipeAssign,
160    CaretAssign,
161    LessLessAssign,
162    GreaterGreaterAssign,
163
164    // 标点符号
165    LeftParen,
166    RightParen,
167    LeftBrace,
168    RightBrace,
169    LeftBracket,
170    RightBracket,
171    Semicolon,
172    Comma,
173    Dot,
174    DotDot,
175    DotDotDot,
176    DotQuestion,
177    DotStar,
178    Colon,
179    Question,
180    Exclamation,
181    Arrow,
182    FatArrow,
183    OrElse,
184    CatchKeyword,
185    TryKeyword,
186    AwaitKeyword,
187    At,
188    BuiltinIdentifier,
189    StringStart,
190    StringEnd,
191    StringContent,
192    InterpolationStart,
193    InterpolationEnd,
194    MultilineStringStart,
195    MultilineStringEnd,
196    MultilineStringContent,
197    CompileDirective,
198    Text,
199
200    // 语法结构
201    FnDeclaration,
202    VarDeclaration,
203    StructDeclaration,
204    EnumDeclaration,
205    UnionDeclaration,
206    IfStatement,
207    WhileStatement,
208    ForStatement,
209    ReturnStatement,
210    Block,
211    BinaryExpr,
212    UnaryExpr,
213}
214
215impl ElementType for ZigElementType {
216    type Role = UniversalElementRole;
217
218    fn role(&self) -> Self::Role {
219        match self {
220            _ => UniversalElementRole::None,
221        }
222    }
223}
224
225impl From<crate::lexer::token_type::ZigTokenType> for ZigElementType {
226    fn from(token: crate::lexer::token_type::ZigTokenType) -> Self {
227        use crate::lexer::token_type::ZigTokenType as T;
228        match token {
229            T::Root => ZigElementType::Root,
230            T::Whitespace => ZigElementType::Whitespace,
231            T::Newline => ZigElementType::Newline,
232            T::Comment => ZigElementType::Comment,
233            T::DocComment => ZigElementType::DocComment,
234            T::Error => ZigElementType::Error,
235            T::Eof => ZigElementType::Eof,
236            T::Identifier => ZigElementType::Identifier,
237            T::StringLiteral => ZigElementType::StringLiteral,
238            T::CharLiteral => ZigElementType::CharLiteral,
239            T::IntegerLiteral => ZigElementType::IntegerLiteral,
240            T::FloatLiteral => ZigElementType::FloatLiteral,
241            T::BooleanLiteral => ZigElementType::BooleanLiteral,
242            T::Const => ZigElementType::Const,
243            T::Var => ZigElementType::Var,
244            T::Fn => ZigElementType::Fn,
245            T::Struct => ZigElementType::Struct,
246            T::Union => ZigElementType::Union,
247            T::Enum => ZigElementType::Enum,
248            T::Opaque => ZigElementType::Opaque,
249            T::Type => ZigElementType::Type,
250            T::Comptime => ZigElementType::Comptime,
251            T::Inline => ZigElementType::Inline,
252            T::NoInline => ZigElementType::NoInline,
253            T::Pub => ZigElementType::Pub,
254            T::Export => ZigElementType::Export,
255            T::Extern => ZigElementType::Extern,
256            T::Packed => ZigElementType::Packed,
257            T::Align => ZigElementType::Align,
258            T::CallConv => ZigElementType::CallConv,
259            T::LinkSection => ZigElementType::LinkSection,
260            T::If => ZigElementType::If,
261            T::Else => ZigElementType::Else,
262            T::Switch => ZigElementType::Switch,
263            T::While => ZigElementType::While,
264            T::For => ZigElementType::For,
265            T::Break => ZigElementType::Break,
266            T::Continue => ZigElementType::Continue,
267            T::Return => ZigElementType::Return,
268            T::Defer => ZigElementType::Defer,
269            T::ErrDefer => ZigElementType::ErrDefer,
270            T::Unreachable => ZigElementType::Unreachable,
271            T::NoReturn => ZigElementType::NoReturn,
272            T::ErrorKeyword => ZigElementType::ErrorKeyword,
273            T::Test => ZigElementType::Test,
274            T::Async => ZigElementType::Async,
275            T::Await => ZigElementType::Await,
276            T::Suspend => ZigElementType::Suspend,
277            T::Resume => ZigElementType::Resume,
278            T::Cancel => ZigElementType::Cancel,
279            T::Undefined => ZigElementType::Undefined,
280            T::Null => ZigElementType::Null,
281            T::Volatile => ZigElementType::Volatile,
282            T::AllowZero => ZigElementType::AllowZero,
283            T::NoAlias => ZigElementType::NoAlias,
284            T::And => ZigElementType::And,
285            T::Or => ZigElementType::Or,
286            T::AnyFrame => ZigElementType::AnyFrame,
287            T::AnyType => ZigElementType::AnyType,
288            T::ThreadLocal => ZigElementType::ThreadLocal,
289            T::Bool => ZigElementType::Bool,
290            T::I8 => ZigElementType::I8,
291            T::I16 => ZigElementType::I16,
292            T::I32 => ZigElementType::I32,
293            T::I64 => ZigElementType::I64,
294            T::I128 => ZigElementType::I128,
295            T::Isize => ZigElementType::Isize,
296            T::U8 => ZigElementType::U8,
297            T::U16 => ZigElementType::U16,
298            T::U32 => ZigElementType::U32,
299            T::U64 => ZigElementType::U64,
300            T::U128 => ZigElementType::U128,
301            T::Usize => ZigElementType::Usize,
302            T::F16 => ZigElementType::F16,
303            T::F32 => ZigElementType::F32,
304            T::F64 => ZigElementType::F64,
305            T::F80 => ZigElementType::F80,
306            T::F128 => ZigElementType::F128,
307            T::CShort => ZigElementType::CShort,
308            T::CUshort => ZigElementType::CUshort,
309            T::CInt => ZigElementType::CInt,
310            T::CUint => ZigElementType::CUint,
311            T::CLong => ZigElementType::CLong,
312            T::CUlong => ZigElementType::CUlong,
313            T::CLongLong => ZigElementType::CLongLong,
314            T::CUlongLong => ZigElementType::CUlongLong,
315            T::CLongDouble => ZigElementType::CLongDouble,
316            T::CVoid => ZigElementType::CVoid,
317            T::Void => ZigElementType::Void,
318            T::ComptimeInt => ZigElementType::ComptimeInt,
319            T::ComptimeFloat => ZigElementType::ComptimeFloat,
320            T::Plus => ZigElementType::Plus,
321            T::Minus => ZigElementType::Minus,
322            T::Star => ZigElementType::Star,
323            T::Slash => ZigElementType::Slash,
324            T::Percent => ZigElementType::Percent,
325            T::StarStar => ZigElementType::StarStar,
326            T::PlusPercent => ZigElementType::PlusPercent,
327            T::MinusPercent => ZigElementType::MinusPercent,
328            T::StarPercent => ZigElementType::StarPercent,
329            T::PlusPlus => ZigElementType::PlusPlus,
330            T::MinusMinus => ZigElementType::MinusMinus,
331            T::Ampersand => ZigElementType::Ampersand,
332            T::Pipe => ZigElementType::Pipe,
333            T::Caret => ZigElementType::Caret,
334            T::Tilde => ZigElementType::Tilde,
335            T::LessLess => ZigElementType::LessLess,
336            T::GreaterGreater => ZigElementType::GreaterGreater,
337            T::Equal => ZigElementType::Equal,
338            T::NotEqual => ZigElementType::NotEqual,
339            T::Less => ZigElementType::Less,
340            T::Greater => ZigElementType::Greater,
341            T::LessEqual => ZigElementType::LessEqual,
342            T::GreaterEqual => ZigElementType::GreaterEqual,
343            T::AndAnd => ZigElementType::AndAnd,
344            T::OrOr => ZigElementType::OrOr,
345            T::Assign => ZigElementType::Assign,
346            T::PlusAssign => ZigElementType::PlusAssign,
347            T::MinusAssign => ZigElementType::MinusAssign,
348            T::StarAssign => ZigElementType::StarAssign,
349            T::SlashAssign => ZigElementType::SlashAssign,
350            T::PercentAssign => ZigElementType::PercentAssign,
351            T::AmpersandAssign => ZigElementType::AmpersandAssign,
352            T::PipeAssign => ZigElementType::PipeAssign,
353            T::CaretAssign => ZigElementType::CaretAssign,
354            T::LessLessAssign => ZigElementType::LessLessAssign,
355            T::GreaterGreaterAssign => ZigElementType::GreaterGreaterAssign,
356            T::LeftParen => ZigElementType::LeftParen,
357            T::RightParen => ZigElementType::RightParen,
358            T::LeftBrace => ZigElementType::LeftBrace,
359            T::RightBrace => ZigElementType::RightBrace,
360            T::LeftBracket => ZigElementType::LeftBracket,
361            T::RightBracket => ZigElementType::RightBracket,
362            T::Semicolon => ZigElementType::Semicolon,
363            T::Comma => ZigElementType::Comma,
364            T::Dot => ZigElementType::Dot,
365            T::DotDot => ZigElementType::DotDot,
366            T::DotDotDot => ZigElementType::DotDotDot,
367            T::DotQuestion => ZigElementType::DotQuestion,
368            T::DotStar => ZigElementType::DotStar,
369            T::Colon => ZigElementType::Colon,
370            T::Question => ZigElementType::Question,
371            T::Exclamation => ZigElementType::Exclamation,
372            T::Arrow => ZigElementType::Arrow,
373            T::FatArrow => ZigElementType::FatArrow,
374            T::OrElse => ZigElementType::OrElse,
375            T::CatchKeyword => ZigElementType::CatchKeyword,
376            T::TryKeyword => ZigElementType::TryKeyword,
377            T::AwaitKeyword => ZigElementType::AwaitKeyword,
378            T::At => ZigElementType::At,
379            T::BuiltinIdentifier => ZigElementType::BuiltinIdentifier,
380            T::StringStart => ZigElementType::StringStart,
381            T::StringEnd => ZigElementType::StringEnd,
382            T::StringContent => ZigElementType::StringContent,
383            T::InterpolationStart => ZigElementType::InterpolationStart,
384            T::InterpolationEnd => ZigElementType::InterpolationEnd,
385            T::MultilineStringStart => ZigElementType::MultilineStringStart,
386            T::MultilineStringEnd => ZigElementType::MultilineStringEnd,
387            T::MultilineStringContent => ZigElementType::MultilineStringContent,
388            T::CompileDirective => ZigElementType::CompileDirective,
389            T::Text => ZigElementType::Text,
390            T::FnDeclaration => ZigElementType::FnDeclaration,
391            T::VarDeclaration => ZigElementType::VarDeclaration,
392            T::StructDeclaration => ZigElementType::StructDeclaration,
393            T::EnumDeclaration => ZigElementType::EnumDeclaration,
394            T::UnionDeclaration => ZigElementType::UnionDeclaration,
395            T::Block => ZigElementType::Block,
396            T::IfStatement => ZigElementType::IfStatement,
397            T::WhileStatement => ZigElementType::WhileStatement,
398            T::ForStatement => ZigElementType::ForStatement,
399            T::ReturnStatement => ZigElementType::ReturnStatement,
400        }
401    }
402}