summaryrefslogtreecommitdiff
path: root/books/workshops/2015/peng-greenstreet/support/gen_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'books/workshops/2015/peng-greenstreet/support/gen_config.py')
-rw-r--r--books/workshops/2015/peng-greenstreet/support/gen_config.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/books/workshops/2015/peng-greenstreet/support/gen_config.py b/books/workshops/2015/peng-greenstreet/support/gen_config.py
new file mode 100644
index 0000000..9188b6c
--- /dev/null
+++ b/books/workshops/2015/peng-greenstreet/support/gen_config.py
@@ -0,0 +1,123 @@
+# Copyright (C) 2015, University of British Columbia
+# Written (originally) by Yan Peng (13th March, 2014)
+#
+# License: A 3-clause BSD license.
+# See the LICENSE file distributed with this software
+
+
+# This file generates config.lisp which sets the default
+# settings of Smtlink.
+#
+# Usage:
+# python gen_config.py -i <inputfile>
+# -o <outputfile>
+# -p <dir-to-py-exe>
+# -z <dir-to-py-files>
+# -e <dir-to-expand-files>
+#
+# This file can only access default settings for
+#
+# 1. <dir-to-py-exe> : The absolute path to where the
+# Python executable is.
+# If not set, it gets nil and
+# the program will report an error.
+#
+# 2. <dir-to-py-files> : The path to where the generated
+# Python files will be stored.
+# If not set, it will get nil
+# and Python files will be
+# generated at /tmp/py_file.
+# The files will get deleted
+# every time Smtlink finishes a proof.
+# Unsuccessful proof will stay
+# for users to check.
+#
+# 3. <dir-to-expand-files> : The path to where the generated
+# log files for function expansion
+# will be stored.
+# If not set, it gets nil and
+# no log files will be generated.
+# This directory is used while debugging
+# Smtlink. Typical users of Smtlink
+# won't need to use it.
+
+
+import io
+import sys
+import getopt
+import re
+
+def is_marker(mk):
+ if (mk == "(defconst *default-smtlink-config* (make-smtlink-config :dir-interface nil :dir-files nil :SMT-module nil :SMT-class nil :smt-cmd nil :dir-expanded nil))\n"):
+ return True
+ else:
+ return False
+
+def gen_code(py_exe, py_file, ex_file):
+ code = []
+
+ code.append("(defconst *default-smtlink-config*\n")
+ code.append(" (make-smtlink-config :dir-interface nil\n")
+ if (py_file == "nil"):
+ code.append(" :dir-files " + py_file + "\n")
+ else:
+ code.append(" :dir-files \"" + py_file + "\"\n")
+ code.append(" :SMT-module \"ACL2_to_Z3\"\n")
+ code.append(" :SMT-class \"ACL22SMT\"\n")
+ if (py_exe == "nil"):
+ print "Error: Python executable is not set yet ..."
+ exit(1)
+ else:
+ code.append(" :smt-cmd \"" + py_exe + "\"\n")
+ if (ex_file == "nil"):
+ code.append(" :dir-expanded " + ex_file + "))\n")
+ else:
+ code.append(" :dir-expanded \"" + ex_file + "\"))\n")
+
+ return code
+
+def gen(inf, outf, py_exe, py_file, ex_file):
+ wt = open(outf, 'w')
+ wlines = []
+
+ with open(inf, 'r') as rf:
+ rlines = rf.readlines()
+ for rline in rlines:
+ if (is_marker(rline)):
+ wlines += gen_code(py_exe, py_file, ex_file)
+ else:
+ wlines.append(rline)
+
+ wt.writelines(wlines)
+ wt.close()
+
+def main(argv):
+ inf = "config-template.lisp"
+ outf = "config.lisp"
+ py_exe = "nil"
+ py_file = "nil"
+ ex_file = "nil"
+ try:
+ opts, args = getopt.getopt(argv, "i:o:p:z:e:")
+ print opts, args
+ except getopt.GetoptError:
+ print "gen_config.py -i <input-file> -o <output-file> -p <python-executable> -z <generated-python-files> -e <generated-expanded-files>"
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt == '-i':
+ inf = arg
+ elif opt == '-o':
+ outf = arg
+ elif opt == '-p':
+ py_exe = arg
+ elif opt == '-z':
+ py_file = arg
+ elif opt == '-e':
+ ex_file = arg
+
+ gen(inf, outf, py_exe, py_file, ex_file)
+ print "Finished generating %s file from %s file..." % (outf, inf)
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])