Class: Token::Resolver::Grammar

Inherits:
Object
  • Object
show all
Defined in:
lib/token/resolver/grammar.rb

Overview

Note:

The raw parslet tree contains one :text entry per character. Use Transform to coalesce these into proper Text nodes.

Dynamically builds a Parslet::Parser subclass from a Config.

The grammar recognizes structured tokens (e.g., ‘KJ|GEM_NAME`) within arbitrary text. It is designed to **never fail** — any input is valid. Unrecognized content (including incomplete tokens) becomes text nodes.

Examples:

Building and using a grammar

parser_class = Token::Resolver::Grammar.build(Config.default)
tree = parser_class.new.parse("Hello {KJ|NAME}!")
# => [{:text=>"H"@0}, {:text=>"e"@1}, ..., {:token=>{:segments=>[...]}}, ...]

Class Method Summary collapse

Class Method Details

.build(config) ⇒ Class

Build (or retrieve from cache) a Parslet::Parser subclass for the given Config.

Parameters:

  • config (Config)

    Token configuration

Returns:

  • (Class)

    A Parslet::Parser subclass



33
34
35
36
37
# File 'lib/token/resolver/grammar.rb', line 33

def build(config)
  @cache_mutex.synchronize do
    @cache[config] ||= build_parser_class(config)
  end
end

.clear_cache!void

This method returns an undefined value.

Clear the grammar cache. Mostly useful for testing.



42
43
44
45
46
# File 'lib/token/resolver/grammar.rb', line 42

def clear_cache!
  @cache_mutex.synchronize do
    @cache.clear
  end
end