Skip to documentation
SLOP

tiny.smg.tree.runtime.language

Reference tiny.smg tree runtime language

Defined in tree.runtime.

API (17)

Actions

Public operations.

Types and contracts

Public types and contracts.

No direct callersNo direct callstree.runtimelanguage
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callsprivate; no linktools.smg.src.tree.runtime.subtree.TreedescendantCountstree.runtime.language.Languagealiases
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstree.runtime.language.LanguagenextStatetest; no linktools.smg.src.tree.validationtest: pinned grammar terminal shifts ...tree.runtime.language.Languagelookuptree.runtime.language.Languageentry
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callerstree.runtime.language.Languagelookuptree.runtime.language.LanguagehasActions
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstree.runtime.parserparsetest; no linktools.smg.src.tree.runtime.parsertest: focused active version compacti...test; no linktools.smg.src.tree.runtime.parsertest: focused an allowed boundary mer...test; no linktools.smg.src.tree.runtime.parsertest: focused equal-precedence active...test; no linktools.smg.src.tree.runtime.parsertest: focused temporary overflow cann...+3 moretree.runtime.language.Languageinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstree.runtime.language.Languageentrytree.runtime.language.LanguagehasActionstree.runtime.language.LanguagenextStatetree.runtime.language.Languagelookup
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callerstree.runtime.language.Languageentrytree.runtime.language.Languagelookuptree.runtime.language.LanguagenextState
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsprivate; no linktools.smg.src.tree.runtime.subtree.TreedescendantCountstree.runtime.subtree.Treeleaftree.runtime.subtree.Treenodetree.runtime.language.LanguagesymbolMetadata
Static calls · unresolved targets: 0 · external targets: 0.

Source: tools/smg/src/tree/runtime/language.zig

zig
const std = @import("std");const runtime = @import("root.zig");const abi = runtime.abi;pub const Mode = struct {    lex_state: u16,    external_lex_state: u16,    reserved_word_set_id: u16,};pub const Entry = struct {    actions: []const abi.Action,    reusable: bool,};pub const Language = struct {    raw: *const abi.Language,    pub fn init(raw: *const abi.Language) !Language {        if (raw.abi_version < 14 or raw.abi_version > 15) return error.UnsupportedGrammarAbi;        if (raw.lex_fn == null or raw.parse_actions == null) return error.InvalidGrammar;        return .{ .raw = raw };    }    pub fn symbolName(self: Language, symbol: abi.Symbol) []const u8 {        if (symbol == abi.error_symbol) return "ERROR";        if (symbol >= self.raw.symbol_count + self.raw.alias_count) return "";        return std.mem.span(self.raw.symbol_names.?[symbol]);    }    pub fn symbolMetadata(self: Language, symbol: abi.Symbol) abi.SymbolMetadata {        if (symbol == abi.error_symbol) return .{ .visible = true, .named = true, .supertype = false };        return self.raw.symbol_metadata.?[symbol];    }    pub fn publicSymbol(self: Language, symbol: abi.Symbol) abi.Symbol {        if (symbol == abi.error_symbol) return symbol;        return self.raw.public_symbol_map.?[symbol];    }    pub fn fieldId(self: Language, name: []const u8) abi.Field {        var id: abi.Field = 1;        while (id <= self.raw.field_count) : (id += 1) {            const pointer = self.raw.field_names.?[id];            if (@intFromPtr(pointer) == 0) continue;            const candidate = std.mem.span(@as([*:0]const u8, @ptrCast(pointer)));            switch (std.mem.order(u8, name, candidate)) {                .eq => return id,                .lt => return 0,                .gt => {},            }        }        return 0;    }    pub fn mode(self: Language, state: abi.State) Mode {        if (self.raw.abi_version < 15) {            const modes: [*]const abi.LexMode14 = @ptrCast(@alignCast(self.raw.lex_modes.?));            const value = modes[state];            return .{ .lex_state = value.lex_state, .external_lex_state = value.external_lex_state, .reserved_word_set_id = 0 };        }        const modes: [*]const abi.LexMode15 = @ptrCast(@alignCast(self.raw.lex_modes.?));        const value = modes[state];        return .{ .lex_state = value.lex_state, .external_lex_state = value.external_lex_state, .reserved_word_set_id = value.reserved_word_set_id };    }    pub fn lookup(self: Language, state: abi.State, symbol: abi.Symbol) u16 {        if (state < self.raw.large_state_count) {            return self.raw.parse_table.?[@as(usize, state) * self.raw.symbol_count + symbol];        }        var index: usize = self.raw.small_parse_table_map.?[state - self.raw.large_state_count];        const table = self.raw.small_parse_table.?;        const group_count = table[index];        index += 1;        for (0..group_count) |_| {            const value = table[index];            const symbol_count = table[index + 1];            index += 2;            for (0..symbol_count) |_| {                if (table[index] == symbol) return value;                index += 1;            }        }        return 0;    }    pub fn entry(self: Language, state: abi.State, symbol: abi.Symbol) Entry {        if (symbol == abi.error_symbol) return .{ .actions = &.{}, .reusable = false };        const index = self.lookup(state, symbol);        const values = self.raw.parse_actions.?;        const header = values[index].entry;        const actions: [*]const abi.Action = @ptrCast(&values[index + 1]);        return .{ .actions = actions[0..header.count], .reusable = header.reusable };    }    pub fn hasActions(self: Language, state: abi.State, symbol: abi.Symbol) bool {        return self.lookup(state, symbol) != 0;    }    pub fn nextState(self: Language, state: abi.State, symbol: abi.Symbol) abi.State {        if (symbol < self.raw.token_count) {            const actions = self.entry(state, symbol).actions;            if (actions.len == 0) return 0;            const action = actions[actions.len - 1];            if (action.type != @backingInt(abi.ActionType.shift)) return 0;            return if (action.shift.extra) state else action.shift.state;        }        return self.lookup(state, symbol);    }    pub fn aliases(self: Language, production: u16) []const abi.Symbol {        if (production == 0 or self.raw.max_alias_sequence_length == 0) return &.{};        const start = @as(usize, production) * self.raw.max_alias_sequence_length;        return self.raw.alias_sequences.?[start .. start + self.raw.max_alias_sequence_length];    }    pub fn fieldMap(self: Language, production: u16) []const abi.FieldMapEntry {        if (self.raw.field_count == 0) return &.{};        const slice = self.raw.field_map_slices.?[production];        return self.raw.field_map_entries.?[slice.index .. slice.index + slice.length];    }    pub fn isReserved(self: Language, lexer_mode: Mode, symbol: abi.Symbol) bool {        if (lexer_mode.reserved_word_set_id == 0 or self.raw.reserved_words == null) return false;        const start = @as(usize, lexer_mode.reserved_word_set_id) * self.raw.max_reserved_word_set_size;        for (self.raw.reserved_words.?[start .. start + self.raw.max_reserved_word_set_size]) |word| {            if (word == symbol) return true;            if (word == 0) return false;        }        return false;    }    pub fn externalValid(self: Language, state: u16) []const bool {        if (state == 0 or self.raw.external_token_count == 0) return &.{};        const start = @as(usize, state) * self.raw.external_token_count;        return self.raw.external_scanner.states.?[start .. start + self.raw.external_token_count];    }};

Source: tools/smg/src/tree/runtime/root.zig:2

zig
pub const language = @import("language.zig");

Complete caller list for tree.runtime.language.Language.init

8 direct callers.

Audit

Definitions18
Public names18
Members6
Version26.7.0
Revisiondaab053ee433