diff --git a/utah/scripts/reduce/c_delta.pl b/utah/scripts/reduce/c_delta.pl index 485ad8031..761dc5cf4 100755 --- a/utah/scripts/reduce/c_delta.pl +++ b/utah/scripts/reduce/c_delta.pl @@ -52,13 +52,17 @@ my $binop = "($arith)|($comp)|($logic)|($bit)"; my $varnum = "($var)|($num)"; my $border = "[\\*\\{\\(\\[\\:\\,\\}\\)\\]\\;\\,]"; -my $borderspc = "(\\s+|$border)"; +my $borderorspc = "(($border)|(\\s))"; +my $borderspc = "($border\\s)"; +my $spcborder = "(\\s$border)"; #print "$field\n"; #print "$index\n"; #print "$border\n"; #print "$var1\n"; #print "$var2\n"; +print "$borderspc\n"; +print "$spcborder\n"; my %replace_regexes = ( "\\:\\s*[0-9]+\\s*;" => ";", @@ -170,27 +174,36 @@ ($) } sub match_subexp ($$) { - (my $prog, my $pos) = @_; + (my $rest, my $pos) = @_; - my $s = substr ($prog, $pos, -1); + if ( + $rest =~ /^(?$borderorspc)(?$varnum)(?\s+)(?$binop)(?\s+)(?$varnum)$borderorspc/ + ) { + print "case 4 "; + my $s2 = $+{pref}.$+{var1}.$+{s1}.$+{op}.$+{s2}.$+{var2}; + return (1, $pos + length ($+{pref}), $pos + length ($s2)); + } if ( - $s =~ /^(?$borderspc)(?$varnum)(?\s*)(?$binop)/ + $rest =~ /^(?$borderorspc)(?$varnum)(?\s*)(?$binop)/ ) { + print "case 1 "; my $s2 = $+{pref}.$+{var}.$+{spc2}.$+{op}; return (1, $pos + length($+{pref}), $pos+length ($s2)); } if ( - $s =~ /^(?$binop)(?\s*)(?$varnum)$borderspc/ + $rest =~ /^(?$binop)(?\s*)(?$varnum)$borderorspc/ ) { + print "case 2 "; my $s2 = $+{op}.$+{spc1}.$+{var}; return (1, $pos, $pos+length ($s2)); } if ( - $s =~ /^(?$borderspc)(?$varnum)$borderspc/ + $rest =~ /^(?$borderorspc)(?$varnum)$borderorspc/ ) { + print "case 3 "; my $s = $+{pref}; my $v = $+{var}; if (($v ne "1") && ($v ne "0")) { @@ -199,20 +212,22 @@ ($$) } if ( - $s =~ /^(?$borderspc)(?$varnum)(?\s+)(?$binop)(?\s+)(?$varnum)$borderspc/ - ) { - my $s2 = $+{pref}.$+{var1}.$+{s1}.$+{op}.$+{s2}.$+{var2}; - return (1, $pos + length ($+{pref}), $pos + length ($s2)); - } - - if ( - $s =~ /^(?$borderspc)(?$varnum)(?\s*\?\s*)(?$varnum)(?\s*\:\s*)(?$varnum)$borderspc/ + $rest =~ /^(?$borderorspc)(?$varnum)(?\s*\?\s*)(?$varnum)(?\s*\:\s*)(?$varnum)$borderorspc/ ) { + print "case 5 "; my $prefl = length ($+{pref}); my $s2 = $+{var1}.$+{ques}.$+{var2}.$+{colon}.$+{var3}; return (1, $pos + $prefl, $pos + $prefl + length ($s2)); } + if (0) { + if ($rest =~ /^($border)/) { + print "case 6 "; + my $s2 = $1; + return (1, $pos, $pos+length ($s2)); + } + } + return (0,0,0); } @@ -232,7 +247,7 @@ ($$) if ($method eq "replace_with_1") { (my $success, my $start, my $end) = - match_subexp ($prog, $pos); + match_subexp ($rest, $pos); if ($success) { my $del = substr ($prog, $start, $end-$start); substr ($prog, $start, $end-$start) = "1"; @@ -242,7 +257,7 @@ ($$) } } elsif ($method eq "replace_with_0") { (my $success, my $start, my $end) = - match_subexp ($prog, $pos); + match_subexp ($rest, $pos); if ($success) { my $del = substr ($prog, $start, $end-$start); substr ($prog, $start, $end-$start) = "0"; @@ -252,7 +267,7 @@ ($$) } } elsif ($method eq "replace_with_nothing") { (my $success, my $start, my $end) = - match_subexp ($prog, $pos); + match_subexp ($rest, $pos); if ($success) { my $del = substr ($prog, $start, $end-$start); substr ($prog, $start, $end-$start) = ""; @@ -262,7 +277,7 @@ ($$) } } elsif ($method eq "replace_regex1") { foreach my $str (keys %replace_regexes) { - if ($rest =~ /^(?$borderspc)(?$str)(?$borderspc)/) { + if ($rest =~ /^(?$borderspc)(?$str)(?$spcborder)/) { my $repl = $+{str}; print "replacing '$repl' at $pos : "; substr ($prog, @@ -274,7 +289,8 @@ ($$) } } elsif ($method eq "replace_regex2") { foreach my $str (keys %replace_regexes) { - if ($rest =~ /^(?$borderspc)(?$str)(?$borderspc)/) { + #print "rest = '$rest'\n"; + if ($rest =~ /^(?$borderspc)(?$str)(?$spcborder)/) { my $repl = $+{pref}.$+{str}; print "replacing '$repl' at $pos : "; substr ($prog, @@ -286,7 +302,7 @@ ($$) } } elsif ($method eq "replace_regex3") { foreach my $str (keys %replace_regexes) { - if ($rest =~ /^(?$borderspc)(?$str)(?$borderspc)/) { + if ($rest =~ /^(?$borderspc)(?$str)(?$spcborder)/) { my $repl = $+{pref}.$+{str}.$+{suf}; print "replacing '$repl' at $pos : "; substr ($prog, @@ -298,7 +314,7 @@ ($$) } } elsif ($method eq "replace_regex4") { foreach my $str (keys %replace_regexes) { - if ($rest =~ /^(?$borderspc)(?$str)(?$borderspc)/) { + if ($rest =~ /^(?$borderspc)(?$str)(?$spcborder)/) { my $repl = $+{str}.$+{suf}; print "replacing '$repl' at $pos : "; substr ($prog,