/usr/bin/kpeg is in ruby-kpeg 1.0.0-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #!/usr/bin/ruby
require 'kpeg'
require 'kpeg/code_generator'
require 'kpeg/format_parser'
require 'kpeg/grammar_renderer'
require 'optparse'
options = {}
OptionParser.new do |o|
o.banner = "Usage: kpeg [options]"
o.on("-t", "--test", "Syntax check the file only") do |v|
options[:test] = v
end
o.on("--reformat", "Reformat your grammar and write it back out") do
options[:reformat] = true
end
o.on("-o", "--output FILE", "Where the output should go") do |v|
options[:output] = v
end
o.on("-n", "--name NAME", "Class name to use for the parser") do |v|
options[:name] = v
end
o.on("-f", "--force", "Overwrite the output if it exists") do |v|
options[:force] = v
end
o.on("-s", "--stand-alone", "Write the parser to run standalone") do |v|
options[:standalone] = v
end
o.on("-v", "--[no-]verbose", "Run verbosely") do |v|
options[:verbose] = v
end
o.on("-d", "--debug", "Debug parsing the file") do |v|
options[:debug] = v
end
end.parse!
file = ARGV.shift
unless File.exists?(file)
puts "File '#{file}' does not exist"
exit 1
end
parser = KPeg::FormatParser.new File.read(file), true
unless m = parser.parse
puts "Syntax error in grammar #{file}"
parser.show_error
exit 1
end
grammar = parser.grammar
if options[:reformat]
if !options[:output]
puts "Please specify -o for where to write the new grammar"
exit 1
end
output = options[:output]
if File.exists?(output) and !options[:force]
puts "Output '#{output}' already exists, not overwriting (use -f)"
exit 1
end
rend = KPeg::GrammarRenderer.new(parser.grammar)
File.open output, "w" do |f|
rend.render(f)
end
puts "Wrote reformatted output to #{output}"
exit 0
end
if !options[:test] and !options[:name]
unless name = grammar.variables["name"]
puts "Please specify -n"
exit 1
end
else
name = options[:name]
end
if options[:output]
new_path = options[:output]
else
new_path = "#{file}.rb"
end
if !options[:test] and File.exists?(new_path) and !options[:force]
puts "Path #{new_path} already exists, not overwriting\n"
exit 1
end
if options[:test]
puts "Syntax ok"
if options[:debug]
gr = KPeg::GrammarRenderer.new(grammar)
gr.render(STDOUT)
end
exit 0
end
cg = KPeg::CodeGenerator.new name, grammar
cg.standalone = options[:standalone]
output = cg.output
open new_path, "w" do |io|
io << output
end
puts "Wrote #{name} to #{new_path}"
|