1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
module KPeg
VERSION = "1.3.3"
def self.grammar
g = Grammar.new
yield g
g
end
def self.match(str, gram)
scan = Parser.new(str, gram)
scan.parse
end
def self.load_grammar(file, log=false)
parser = KPeg::FormatParser.new File.read(file)
if !parser.parse
parser.raise_error
end
return parser.grammar
end
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
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
end
require 'kpeg/grammar'
require 'kpeg/format_parser'
require 'kpeg/code_generator'
|