lib/Tools/update_op
author wenzelm
Sat, 10 Nov 2018 19:01:20 +0100
changeset 69281 599b6d0d199b
parent 67398 5eb932e604a2
permissions -rwxr-xr-x
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67398
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     1
#!/usr/bin/env bash
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     2
#
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     3
# Author: Tobias Nipkow, TU Muenchen
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     4
#
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     5
# DESCRIPTION: update "op _" syntax
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     6
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     7
## diagnostics
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     8
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
     9
function usage()
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    10
{
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    11
  echo
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    12
  echo "Usage: isabelle $PRG [OPTIONS] [DIR]"
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    13
  echo
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    14
  echo "  Options are:"
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    15
  echo "    -m           ignore .ML files"
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    16
  echo
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    17
  echo "  Update the old \"op _\" syntax in theory and ML files."
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    18
  echo
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    19
  exit 1
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    20
}
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    21
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    22
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    23
IGNORE_ML=""
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    24
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    25
while getopts "m" OPT
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    26
do
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    27
  case "$OPT" in
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    28
    m)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    29
      IGNORE_ML="true"
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    30
      ;;
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    31
    \?)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    32
      usage
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    33
      ;;
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    34
  esac
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    35
done
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    36
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    37
shift $(($OPTIND - 1))
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    38
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    39
DIR="."
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    40
if [ -n "$1" ]; then
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    41
  DIR="$1"
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    42
fi
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    43
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    44
read -r -d '' THY_SCRIPT <<'EOF'
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    45
# op [^]\<^bsub>*\<^esub> -> ([^]\<^bsub>*\<^esub>)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    46
s/\([^a-zA-Z0-9_?']\)op [ ]*\(\[\^\]\\<\^bsub>[^\\]*\\<\^esub>\)/\1(\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    47
# op *XY -> ( *XY)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    48
s/\([^a-zA-Z0-9_?']\)op[ ]*\*\([a-zA-Z][a-zA-Z]\)/\1( \*\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    49
# op *X -> ( *X)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    50
s/\([^a-zA-Z0-9_?']\)op[ ]*\*\([a-zA-Z]\)/\1( \*\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    51
# op *R -> ( *R)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    52
s/\([^a-zA-Z0-9_?']\)op[ ]*\(\*\\<^sub>[a-zA-Z]\)/\1( \2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    53
# op *\<cdot> -> ( *\<cdot>)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    54
s/\([^a-zA-Z0-9_?']\)op[ ]*\(\*\\<cdot>\)/\1( \2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    55
# op ** -> ( ** )
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    56
s/\([^a-zA-Z0-9_?']\)op[ ]*\*\*/\1( \*\* )/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    57
# op * -> ( * )
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    58
s/\([^a-zA-Z0-9_?']\)op[ ]*\*/\1( \* )/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    59
# (op +) -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    60
s/(op [ ]*\([^ )("][^ )(",]*\))/(\1)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    61
# (op + -> ((+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    62
s/(op [ ]*\([^ )(",]*\)\([^)]\)/((\1)\2/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    63
# op + -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    64
s/\([^a-zA-Z0-9_?']\)op [ ]*\([^ )(",:]*\)::/\1(\2)::/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    65
s/\([^a-zA-Z0-9_?']\)op [ ]*\([^ )(",]*\)/\1(\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    66
# op+ -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    67
s/\([^a-zA-Z0-9_?']\)op\(\\<[a-zA-Z0-9]*>\)/\1(\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    68
s/\([^a-zA-Z0-9_?']\)op\([^a-zA-Z0-9_? )("\][^ )(",:]*\)::/\1(\2)::/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    69
s/\([^a-zA-Z0-9_?']\)op\([^a-zA-Z0-9_? )("\][^ )(",]*\)/\1(\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    70
EOF
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    71
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    72
read -r -d '' ML_SCRIPT <<'EOF'
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    73
# op * -> ( * )
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    74
s/"\(.*\)\([^a-zA-Z0-9_]\)op[ ]*\*/"\1\2( \* )/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    75
s/"op[ ]*\*/"( \* )/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    76
# (op +) -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    77
s/"\(.*\)(op [ ]*\([^ )("][^ )("]*\))/"\1(\2)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    78
s/(op [ ]*\([^ )("][^ )("]*\))\(.*\)"/(\1)\2"/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    79
# (op + -> ((+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    80
s/"\(.*\)(op [ ]*\([^ )("]*\)\([^)]\)/"\1((\2)\3/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    81
# op + -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    82
s/"\(.*\)\([^a-zA-Z0-9_]\)op [ ]*\([^ )("]*\)/"\1\2(\3)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    83
s/"op [ ]*\([^ )("]*\)/"(\1)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    84
# op+ -> (+)
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    85
s/"\(.*\)\([^a-zA-Z0-9_]\)op\([^a-zA-Z0-9_ )("][^ )("]*\)/"\1\2(\3)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    86
s/"op\([^a-zA-Z0-9_ )("][^ )("]*\)/"(\1)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    87
# is there \<...\> on the line (indicating Isabelle source):
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    88
s/\\<\([^>]*\)>\(.*\)\([^a-zA-Z0-9_]\)op \*/\\<\1>\2\3( * )/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    89
s/\\<\([^>]*\)>\(.*\)\([^a-zA-Z0-9_]\)op [ ]*\([^ )("]*\)\\<close>/\\<\1>\2\3(\4)\\<close>/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    90
s/\\<\([^>]*\)>\(.*\)\([^a-zA-Z0-9_]\)op [ ]*\([^ )("]*\)/\\<\1>\2\3(\4)/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    91
s/\([^a-zA-Z0-9_]\)op [ ]*\([^ )("]*\)\(.*\)\\<\([^>]*\)>/\1(\2)\3\\<\4>/g
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    92
EOF
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    93
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    94
find "$DIR" -name "*.thy" -exec sed '-i~~' -e "$THY_SCRIPT" {} \;
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    95
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    96
[ "$IGNORE_ML" = "true" ] || find "$DIR" -name "*.ML" -exec sed '-i~~' -e "$ML_SCRIPT" {} \;
5eb932e604a2 Manual updates towards conversion of "op" syntax
nipkow
parents:
diff changeset
    97