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