Module: KPeg

Defined in:
lib/kpeg.rb,
lib/kpeg/match.rb,
lib/kpeg/parser.rb,
lib/kpeg/grammar.rb,
lib/kpeg/version.rb,
lib/kpeg/position.rb,
lib/kpeg/code_generator.rb,
lib/kpeg/compiled_parser.rb,
lib/kpeg/grammar_renderer.rb

Defined Under Namespace

Modules: Position Classes: Action, AndPredicate, CharRange, Choice, CodeGenerator, Collect, CompiledParser, Dot, ForeignInvokeRule, FormatParser, Grammar, GrammarRenderer, InvokeRule, LiteralRegexp, LiteralString, Match, MatchComposition, MatchString, Multiple, NotPredicate, Operator, Parser, Rule, RuleReference, Sequence, Tag

Constant Summary

VERSION =
"0.1"

Class Method Summary (collapse)

Class Method Details

+ (Object) compile(str, name, scope = Object)



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/kpeg.rb', line 32

def self.compile(str, name, scope=Object)
  parser = KPeg::FormatParser.new str
  unless parser.parse
    parser.raise_error
  end

  cg = KPeg::CodeGenerator.new name, parser.grammar

  code = cg.output

  scope.module_eval code
  true
end

+ (Object) grammar {|g| ... }

Yields:

  • (g)


2
3
4
5
6
# File 'lib/kpeg.rb', line 2

def self.grammar
  g = Grammar.new
  yield g
  g
end

+ (Object) load(file, name)



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/kpeg.rb', line 20

def self.load(file, name)
  grammar = load_grammar(file)
  cg = KPeg::CodeGenerator.new name, grammar

  code = cg.output

  warn "[Loading parser '#{name}' => #{code.size} bytes]"

  Object.module_eval code
  true
end

+ (Object) load_grammar(file, log = false)



13
14
15
16
17
18
# File 'lib/kpeg.rb', line 13

def self.load_grammar(file, log=false)
  parser = KPeg::FormatParser.new File.read(file)
  parser.parse

  return parser.grammar
end

+ (Object) match(str, gram)



8
9
10
11
# File 'lib/kpeg.rb', line 8

def self.match(str, gram)
  scan = Parser.new(str, gram)
  scan.parse
end