Module: Hoozuki

Defined in:
lib/hoozuki.rb,
lib/hoozuki/parser.rb,
lib/hoozuki/version.rb,
lib/hoozuki/node/choice.rb,
lib/hoozuki/vm/compiler.rb,
lib/hoozuki/node/epsilon.rb,
lib/hoozuki/node/literal.rb,
lib/hoozuki/vm/evaluator.rb,
lib/hoozuki/automaton/dfa.rb,
lib/hoozuki/automaton/nfa.rb,
lib/hoozuki/instruction/jmp.rb,
lib/hoozuki/node/repetition.rb,
lib/hoozuki/instruction/char.rb,
lib/hoozuki/instruction/match.rb,
lib/hoozuki/instruction/split.rb,
lib/hoozuki/automaton/state_id.rb,
lib/hoozuki/node/concatenation.rb,
lib/hoozuki/automaton/dfa/builder.rb

Defined Under Namespace

Modules: Automaton, Instruction, Node, VM Classes: Parser, Pattern

Constant Summary collapse

VERSION =
'1.0.1'

Class Method Summary collapse

Class Method Details

.compile(input, engine: :dfa) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/hoozuki.rb', line 35

def compile(input, engine: :dfa)
  ast = Parser.new.parse(input)
  case engine
  when :dfa
    nfa = Automaton::NFA.from_node(ast, Automaton::StateID.new(0))
    Automaton::DFA.from_nfa(nfa, use_cache?(input))
  when :vm
    compiler = VM::Compiler.new
    compiler.compile(ast)
    compiler.instructions
  else
    raise ArgumentError, "Unknown engine: #{engine}"
  end
end

.match?(pattern, input, engine: :dfa) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/hoozuki.rb', line 50

def match?(pattern, input, engine: :dfa)
  new(pattern, engine: engine).match?(input)
end

.new(pattern, engine: :dfa) ⇒ Object



31
32
33
# File 'lib/hoozuki.rb', line 31

def new(pattern, engine: :dfa)
  Pattern.new(pattern, engine: engine)
end