#!/usr/bin/env perl
our
$VERSION
= 0.002_000;
if
(not
defined
$ARGV
[0]) {
die
'First input argument missing, rule key start integer, dying'
; }
if
(not
defined
$ARGV
[1]) {
die
'Second input argument missing, rule key finish integer, dying'
; }
if
(not
defined
$ARGV
[2]) {
die
'Third input argument missing, rule key decrement integer, dying'
; }
my
string
$which_find_replace_recurse_sh
= which(
'find_replace_recurse.sh'
);
print
'ARE YOU AN RPERL SYSTEM DEVELOPER? '
;
my
string
$stdin_confirm
= <STDIN>;
if
(
$stdin_confirm
!~ /^[Yy]/ ) {
exit
;
}
my
integer
$input_rule_key_integer_start
= string_to_integer(
$ARGV
[0]);
my
integer
$input_rule_key_integer_finish
= string_to_integer(
$ARGV
[1]);
my
integer
$input_rule_key_decrement
= string_to_integer(
$ARGV
[2]);
if
(
$input_rule_key_integer_start
< 1) {
die
'First input argument invalid, must be 1 or greater, rule key start integer, dying'
; }
if
(
$input_rule_key_integer_finish
< 1) {
die
'Second input argument invalid, must be 1 or greater, rule key finish integer, dying'
; }
if
(
$input_rule_key_integer_finish
<
$input_rule_key_integer_start
) {
die
'Second input argument invalid, cannot be smaller than first argument, rule key finish integer, dying'
; }
if
(
$input_rule_key_decrement
< 1) {
die
'Third input argument invalid, must be 1 or greater, rule key decrement integer, dying'
; }
my
string_arrayref
$rules_sorted
= [];
my
integer
$rule_key_integer_max
= 0;
foreach
my
string
$rule_key
(
keys
%{
$RPerl::Grammar::RULES
}) {
my
string_arrayref
$rule_key_split
;
$rule_key_split
= [
split
/_/,
$rule_key
];
my
integer
$rule_key_integer
= string_to_integer(
$rule_key_split
->[1]);
$rules_sorted
->[
$rule_key_integer
] = [
$rule_key_split
->[0],
$RPerl::Grammar::RULES
->{
$rule_key
} ];
if
(
$rule_key_integer
>
$rule_key_integer_max
) {
$rule_key_integer_max
=
$rule_key_integer
; }
}
if
(
$input_rule_key_integer_start
>
$rule_key_integer_max
) {
die
'First input argument invalid, must be 1 or greater, rule key start integer, dying'
; }
print
"\n"
;
my
integer_arrayref
$rule_key_range
= [
$input_rule_key_integer_start
..
$input_rule_key_integer_finish
];
foreach
my
integer
$i
(@{
$rule_key_range
}) {
if
(not
defined
$rules_sorted
->[
$i
]) {
next
; }
my
string
$rule_key_old
=
$rules_sorted
->[
$i
]->[0] .
'_'
. integer_to_string(
$i
);
my
string
$rule_key_new
=
$rules_sorted
->[
$i
]->[0] .
'_'
. integer_to_string(
$i
-
$input_rule_key_decrement
);
print
$rule_key_old
.
' ==>> '
.
$rule_key_new
.
"\n"
;
}
print
"\n"
;
print
'WARNING: The above changes will be made in ALL FILES UNDER THIS DIRECTORY & ALL SUBDIRECTORIES...'
.
"\n\n"
;
print
'ARE YOU SURE YOU WANT TO CONTINUE? '
;
$stdin_confirm
= <STDIN>;
if
(
$stdin_confirm
!~ /^[Yy]/ ) {
exit
;
}
print
'Decrementing RPerl Grammar Production Rules...'
;
foreach
my
integer
$i
(@{
$rule_key_range
}) {
if
(not
defined
$rules_sorted
->[
$i
]) {
next
; }
my
string
$rule_key_old
=
$rules_sorted
->[
$i
]->[0] .
'_'
. integer_to_string(
$i
);
my
string
$rule_key_new
=
$rules_sorted
->[
$i
]->[0] .
'_'
. integer_to_string(
$i
-
$input_rule_key_decrement
);
my
string
$find_replace_recurse_command
=
'find_replace_recurse.sh '
.
$rule_key_old
.
q{ }
.
$rule_key_new
.
' . YES > /dev/null'
;
my
string
$return_value
= `
$find_replace_recurse_command
`;
if
((
defined
$return_value
) and (
$return_value
!~ m/^\s*$/)) {
print
"\n"
;
die
'Non-empty return value for command:'
.
"\n"
.
$find_replace_recurse_command
.
"\n"
.
'Return value:'
.
"\n"
.
$return_value
.
"\n"
.
'dying'
; }
}
print
' DONE!'
.
"\n"
;