Module: LexerKit::DFA

Defined in:
lib/lexer_kit/dfa.rb,
lib/lexer_kit/dfa/nfa.rb,
lib/lexer_kit/dfa/regex_ast.rb,
lib/lexer_kit/dfa/utf8_range.rb,
lib/lexer_kit/dfa/dfa_builder.rb,
lib/lexer_kit/dfa/case_folding.rb,
lib/lexer_kit/dfa/regex_parser.rb,
lib/lexer_kit/dfa/dfa_minimizer.rb,
lib/lexer_kit/dfa/byte_class_builder.rb,
lib/lexer_kit/dfa/utf8_range_pattern.rb,
lib/lexer_kit/dfa/char_class_collector.rb

Overview

DFA module provides regex to DFA compilation.

Defined Under Namespace

Modules: CaseFolding, RegexAST, Utf8Range Classes: ByteClassBuilder, CharClassCollector, DFABuilder, DFAMinimizer, NFA, RegexParser, Utf8RangePattern

Class Method Summary collapse

Class Method Details

.compile_regex(regex, token_id = 0) ⇒ IR::DFATable

Compile a Regex to DFA

Parameters:

  • regex (RegexAST::Regex)

    regex pattern

  • token_id (Integer) (defaults to: 0)

    token ID for accepting state

Returns:

Raises:

  • (ArgumentError)


20
21
22
23
24
25
# File 'lib/lexer_kit/dfa.rb', line 20

def self.compile_regex(regex, token_id = 0)
  raise ArgumentError, "expected Regex, got #{regex.class}" unless regex.is_a?(RegexAST::Regex)

  nfa = NFA.from_regex(regex, token_id)
  DFABuilder.new(nfa).build
end

.first_byte_set(regex) ⇒ Set<Integer>

Compute the set of possible first bytes for a Regex

Parameters:

Returns:

  • (Set<Integer>)

    set of bytes (0-255)

Raises:

  • (ArgumentError)


30
31
32
33
34
35
# File 'lib/lexer_kit/dfa.rb', line 30

def self.first_byte_set(regex)
  raise ArgumentError, "expected Regex, got #{regex.class}" unless regex.is_a?(RegexAST::Regex)

  nfa = NFA.from_regex(regex, 0)
  nfa.first_byte_set
end