Class: Ibex::Runtime::CST::Kind

Inherits:
Object
  • Object
show all
Defined in:
lib/json5/generated_parser.rb

Overview

Grammar-specific integer kind names and interval predicates.

Instance Method Summary collapse

Constructor Details

#initialize(metadata, slots: {}) ⇒ Kind

Returns a new instance of Kind.

RBS:

  • (metadata metadata, ?slots: Hash[Integer, slot]) -> void



174
175
176
177
178
179
180
181
182
183
184
# File 'lib/json5/generated_parser.rb', line 174

def initialize(, slots: {})
  @names = .fetch(:names).dup.freeze
  @terminal_range = .fetch(:terminal_range).dup.freeze
  @nonterminal_range = .fetch(:nonterminal_range).dup.freeze
  @named = .fetch(:named).dup.freeze
  @named_nonterminals = .fetch(:named_nonterminals).dup.freeze
  @trivia = .fetch(:trivia).dup.freeze
  @synthetic = .fetch(:synthetic).dup.freeze
  @field_slots = build_field_slots(slots)
  freeze
end

Instance Method Details

#error?(kind) ⇒ Boolean

RBS:

  • (Integer kind) -> bool

Returns:

  • (Boolean)


209
210
211
# File 'lib/json5/generated_parser.rb', line 209

def error?(kind)
  kind == @synthetic["lexical_error_token"] || kind == @synthetic["error_node"]
end

#fetch(name) ⇒ Object

RBS:

  • (String | Symbol name) -> Integer



192
193
194
195
# File 'lib/json5/generated_parser.rb', line 192

def fetch(name)
  key = name.to_s
  @named[key] || @trivia[key] || @synthetic.fetch(key)
end

#fields(kind) ⇒ Object

Return the named field-to-physical-slot mapping for a kind.

RBS:

  • (Integer kind) -> Hash[String, field_slot]



221
# File 'lib/json5/generated_parser.rb', line 221

def fields(kind) = @field_slots.fetch(kind, EMPTY_FIELDS)

#name(kind) ⇒ Object

RBS:

  • (Integer kind) -> String



187
188
189
# File 'lib/json5/generated_parser.rb', line 187

def name(kind)
  @names.fetch(kind)
end

#nonterminal?(kind) ⇒ Boolean

RBS:

  • (Integer kind) -> bool

Returns:

  • (Boolean)


201
202
203
# File 'lib/json5/generated_parser.rb', line 201

def nonterminal?(kind)
  within?(@nonterminal_range, kind) || @named_nonterminals.key?(kind)
end

#nonterminal_of(kind) ⇒ Object

Map a named node kind to its physical nonterminal kind.

RBS:

  • (Integer kind) -> Integer



215
216
217
# File 'lib/json5/generated_parser.rb', line 215

def nonterminal_of(kind)
  @named_nonterminals.fetch(kind, kind)
end

#terminal?(kind) ⇒ Boolean

RBS:

  • (Integer kind) -> bool

Returns:

  • (Boolean)


198
# File 'lib/json5/generated_parser.rb', line 198

def terminal?(kind) = within?(@terminal_range, kind)

#to_hObject

Return the serialization-safe kind metadata.

RBS:

  • () -> metadata



225
226
227
228
229
230
231
232
# File 'lib/json5/generated_parser.rb', line 225

def to_h
  value = {
    names: @names, terminal_range: @terminal_range, nonterminal_range: @nonterminal_range,
    named: @named, named_nonterminals: @named_nonterminals,
    trivia: @trivia, synthetic: @synthetic
  } #: metadata
  value.freeze
end

#trivia?(kind) ⇒ Boolean

RBS:

  • (Integer kind) -> bool

Returns:

  • (Boolean)


206
# File 'lib/json5/generated_parser.rb', line 206

def trivia?(kind) = @trivia.value?(kind)