struct Token [src]

Alias for std.zig.tokenizer.Token

Fields

tag: Tag
loc: Loc

Members

Source

pub const Token = struct { tag: Tag, loc: Loc, pub const Loc = struct { start: usize, end: usize, }; pub const keywords = std.StaticStringMap(Tag).initComptime(.{ .{ "addrspace", .keyword_addrspace }, .{ "align", .keyword_align }, .{ "allowzero", .keyword_allowzero }, .{ "and", .keyword_and }, .{ "anyframe", .keyword_anyframe }, .{ "anytype", .keyword_anytype }, .{ "asm", .keyword_asm }, .{ "async", .keyword_async }, .{ "await", .keyword_await }, .{ "break", .keyword_break }, .{ "callconv", .keyword_callconv }, .{ "catch", .keyword_catch }, .{ "comptime", .keyword_comptime }, .{ "const", .keyword_const }, .{ "continue", .keyword_continue }, .{ "defer", .keyword_defer }, .{ "else", .keyword_else }, .{ "enum", .keyword_enum }, .{ "errdefer", .keyword_errdefer }, .{ "error", .keyword_error }, .{ "export", .keyword_export }, .{ "extern", .keyword_extern }, .{ "fn", .keyword_fn }, .{ "for", .keyword_for }, .{ "if", .keyword_if }, .{ "inline", .keyword_inline }, .{ "noalias", .keyword_noalias }, .{ "noinline", .keyword_noinline }, .{ "nosuspend", .keyword_nosuspend }, .{ "opaque", .keyword_opaque }, .{ "or", .keyword_or }, .{ "orelse", .keyword_orelse }, .{ "packed", .keyword_packed }, .{ "pub", .keyword_pub }, .{ "resume", .keyword_resume }, .{ "return", .keyword_return }, .{ "linksection", .keyword_linksection }, .{ "struct", .keyword_struct }, .{ "suspend", .keyword_suspend }, .{ "switch", .keyword_switch }, .{ "test", .keyword_test }, .{ "threadlocal", .keyword_threadlocal }, .{ "try", .keyword_try }, .{ "union", .keyword_union }, .{ "unreachable", .keyword_unreachable }, .{ "usingnamespace", .keyword_usingnamespace }, .{ "var", .keyword_var }, .{ "volatile", .keyword_volatile }, .{ "while", .keyword_while }, }); pub fn getKeyword(bytes: []const u8) ?Tag { return keywords.get(bytes); } pub const Tag = enum { invalid, invalid_periodasterisks, identifier, string_literal, multiline_string_literal_line, char_literal, eof, builtin, bang, pipe, pipe_pipe, pipe_equal, equal, equal_equal, equal_angle_bracket_right, bang_equal, l_paren, r_paren, semicolon, percent, percent_equal, l_brace, r_brace, l_bracket, r_bracket, period, period_asterisk, ellipsis2, ellipsis3, caret, caret_equal, plus, plus_plus, plus_equal, plus_percent, plus_percent_equal, plus_pipe, plus_pipe_equal, minus, minus_equal, minus_percent, minus_percent_equal, minus_pipe, minus_pipe_equal, asterisk, asterisk_equal, asterisk_asterisk, asterisk_percent, asterisk_percent_equal, asterisk_pipe, asterisk_pipe_equal, arrow, colon, slash, slash_equal, comma, ampersand, ampersand_equal, question_mark, angle_bracket_left, angle_bracket_left_equal, angle_bracket_angle_bracket_left, angle_bracket_angle_bracket_left_equal, angle_bracket_angle_bracket_left_pipe, angle_bracket_angle_bracket_left_pipe_equal, angle_bracket_right, angle_bracket_right_equal, angle_bracket_angle_bracket_right, angle_bracket_angle_bracket_right_equal, tilde, number_literal, doc_comment, container_doc_comment, keyword_addrspace, keyword_align, keyword_allowzero, keyword_and, keyword_anyframe, keyword_anytype, keyword_asm, keyword_async, keyword_await, keyword_break, keyword_callconv, keyword_catch, keyword_comptime, keyword_const, keyword_continue, keyword_defer, keyword_else, keyword_enum, keyword_errdefer, keyword_error, keyword_export, keyword_extern, keyword_fn, keyword_for, keyword_if, keyword_inline, keyword_noalias, keyword_noinline, keyword_nosuspend, keyword_opaque, keyword_or, keyword_orelse, keyword_packed, keyword_pub, keyword_resume, keyword_return, keyword_linksection, keyword_struct, keyword_suspend, keyword_switch, keyword_test, keyword_threadlocal, keyword_try, keyword_union, keyword_unreachable, keyword_usingnamespace, keyword_var, keyword_volatile, keyword_while, pub fn lexeme(tag: Tag) ?[]const u8 { return switch (tag) { .invalid, .identifier, .string_literal, .multiline_string_literal_line, .char_literal, .eof, .builtin, .number_literal, .doc_comment, .container_doc_comment, => null, .invalid_periodasterisks => ".**", .bang => "!", .pipe => "|", .pipe_pipe => "||", .pipe_equal => "|=", .equal => "=", .equal_equal => "==", .equal_angle_bracket_right => "=>", .bang_equal => "!=", .l_paren => "(", .r_paren => ")", .semicolon => ";", .percent => "%", .percent_equal => "%=", .l_brace => "{", .r_brace => "}", .l_bracket => "[", .r_bracket => "]", .period => ".", .period_asterisk => ".*", .ellipsis2 => "..", .ellipsis3 => "...", .caret => "^", .caret_equal => "^=", .plus => "+", .plus_plus => "++", .plus_equal => "+=", .plus_percent => "+%", .plus_percent_equal => "+%=", .plus_pipe => "+|", .plus_pipe_equal => "+|=", .minus => "-", .minus_equal => "-=", .minus_percent => "-%", .minus_percent_equal => "-%=", .minus_pipe => "-|", .minus_pipe_equal => "-|=", .asterisk => "*", .asterisk_equal => "*=", .asterisk_asterisk => "**", .asterisk_percent => "*%", .asterisk_percent_equal => "*%=", .asterisk_pipe => "*|", .asterisk_pipe_equal => "*|=", .arrow => "->", .colon => ":", .slash => "/", .slash_equal => "/=", .comma => ",", .ampersand => "&", .ampersand_equal => "&=", .question_mark => "?", .angle_bracket_left => "<", .angle_bracket_left_equal => "<=", .angle_bracket_angle_bracket_left => "<<", .angle_bracket_angle_bracket_left_equal => "<<=", .angle_bracket_angle_bracket_left_pipe => "<<|", .angle_bracket_angle_bracket_left_pipe_equal => "<<|=", .angle_bracket_right => ">", .angle_bracket_right_equal => ">=", .angle_bracket_angle_bracket_right => ">>", .angle_bracket_angle_bracket_right_equal => ">>=", .tilde => "~", .keyword_addrspace => "addrspace", .keyword_align => "align", .keyword_allowzero => "allowzero", .keyword_and => "and", .keyword_anyframe => "anyframe", .keyword_anytype => "anytype", .keyword_asm => "asm", .keyword_async => "async", .keyword_await => "await", .keyword_break => "break", .keyword_callconv => "callconv", .keyword_catch => "catch", .keyword_comptime => "comptime", .keyword_const => "const", .keyword_continue => "continue", .keyword_defer => "defer", .keyword_else => "else", .keyword_enum => "enum", .keyword_errdefer => "errdefer", .keyword_error => "error", .keyword_export => "export", .keyword_extern => "extern", .keyword_fn => "fn", .keyword_for => "for", .keyword_if => "if", .keyword_inline => "inline", .keyword_noalias => "noalias", .keyword_noinline => "noinline", .keyword_nosuspend => "nosuspend", .keyword_opaque => "opaque", .keyword_or => "or", .keyword_orelse => "orelse", .keyword_packed => "packed", .keyword_pub => "pub", .keyword_resume => "resume", .keyword_return => "return", .keyword_linksection => "linksection", .keyword_struct => "struct", .keyword_suspend => "suspend", .keyword_switch => "switch", .keyword_test => "test", .keyword_threadlocal => "threadlocal", .keyword_try => "try", .keyword_union => "union", .keyword_unreachable => "unreachable", .keyword_usingnamespace => "usingnamespace", .keyword_var => "var", .keyword_volatile => "volatile", .keyword_while => "while", }; } pub fn symbol(tag: Tag) []const u8 { return tag.lexeme() orelse switch (tag) { .invalid => "invalid token", .identifier => "an identifier", .string_literal, .multiline_string_literal_line => "a string literal", .char_literal => "a character literal", .eof => "EOF", .builtin => "a builtin function", .number_literal => "a number literal", .doc_comment, .container_doc_comment => "a document comment", else => unreachable, }; } }; }