This file is indexed.

/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}"