#
# mkexpr
# Morgan Deters <mdeters@cs.nyu.edu> for CVC4
-# Copyright (c) 2010 The CVC4 Project
+# Copyright (c) 2010-2011 The CVC4 Project
#
# The purpose of this script is to create {expr,expr_manager}.{h,cpp}
# from template files and a list of theory kinds. Basically it just
# Output is to standard out.
#
-copyright=2010
+copyright=2010-2011
filename=`basename "$1" | sed 's,_template,,'`
function rewriter {
# rewriter class header
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function properties {
- # properties prop*
- lineno=${BASH_LINENO[0]}
+ # properties prop*
+ lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function endtheory {
# endtheory
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function sort {
# sort TYPE ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function variable {
# variable K ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
}
function operator {
# operator K #children ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
}
function parameterized {
# parameterized K #children ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
}
function constant {
# constant K T Hasher header ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
includes="${includes}
#
# mkkind
# Morgan Deters <mdeters@cs.nyu.edu> for CVC4
-# Copyright (c) 2010 The CVC4 Project
+# Copyright (c) 2010-2011 The CVC4 Project
#
# The purpose of this script is to create kind.h from a template and a
# list of theory kinds.
# Output is to standard out.
#
-copyright=2010
+copyright=2010-2011
cat <<EOF
/********************* */
type_constant_descriptions=
type_constant_list=
-type_constant_to_theory_id=
+type_constant_to_theory_id=
seen_theory=false
seen_theory_builtin=false
elif ! expr "$2" : '\(::CVC4::theory::*\)' >/dev/null; then
echo "$kf:$lineno: warning: theory class not under ::CVC4::theory namespace" >&2
fi
-
+
theory_id="$1"
- theory_enum="$1,
- ${theory_enum}"
+ theory_enum="$1,
+ ${theory_enum}"
theory_descriptions="${theory_descriptions} case ${theory_id}: out << \"${theory_id}\"; break;
"
}
function properties {
# rewriter class header
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function endtheory {
# endtheory
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function rewriter {
# properties prop*
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function sort {
# sort TYPE ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_sort "$1" "$2"
}
function register_sort {
id=$1
comment=$2
-
+
type_constant_list="${type_constant_list} ${id}, /**< ${comment} */
"
type_constant_descriptions="${type_constant_descriptions} case $id: out << \"${comment}\"; break;
"
type_constant_to_theory_id="${type_constant_to_theory_id} case $id: return $theory_id; break;
-"
+"
}
function register_kind {
#
# mkmetakind
# Morgan Deters <mdeters@cs.nyu.edu> for CVC4
-# Copyright (c) 2010 The CVC4 Project
+# Copyright (c) 2010-2011 The CVC4 Project
#
# The purpose of this script is to create metakind.h from a template
# and a list of theory kinds.
# Output is to standard out.
#
-copyright=2010
+copyright=2010-2011
cat <<EOF
/********************* */
function properties {
# properties prop*
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function endtheory {
# endtheory
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function rewriter {
# rewriter class header
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function sort {
# sort TYPE ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function variable {
theory_traits.h: theory_traits_template.h mktheorytraits @top_builddir@/src/theory/.subdirs @top_srcdir@/src/theory/*/kinds
$(AM_V_at)chmod +x @srcdir@/mktheorytraits
$(AM_V_at)$(am__mv) $@ $@~ 2>/dev/null || true
- $(AM_V_GEN)(@srcdir@//mktheorytraits \
+ $(AM_V_GEN)(@srcdir@/mktheorytraits \
$< \
`cat @top_builddir@/src/theory/.subdirs` \
> $@) || (rm -f $@ && exit 1)
#
# mkrewriter
# Morgan Deters <mdeters@cs.nyu.edu> for CVC4
-# Copyright (c) 2010 The CVC4 Project
+# Copyright (c) 2010-2011 The CVC4 Project
#
-# The purpose of this script is to create kind.h from a template and a
-# list of theory kinds.
+# The purpose of this script is to create rewriter_tables.h from a template
+# and a list of theory kinds.
#
# Invocation:
#
-# mkkind template-file theory-kind-files...
+# mkrewriter template-file theory-kind-files...
#
# Output is to standard out.
#
-copyright=2010
+copyright=2010-2011
cat <<EOF
/********************* */
-/** kind.h
+/** rewriter_tables.h
**
** Copyright $copyright The AcSys Group, New York University, and as below.
**
function properties {
# properties prop*
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function endtheory {
# endtheory
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function rewriter {
# rewriter class header
class="$1"
header="$2"
-
+
rewriter_includes="${rewriter_includes}#include \"$header\"
"
rewrite_init="${rewrite_init} ${class}::init();
"
lineno=${BASH_LINENO[0]}
-
+ check_theory_seen
}
function sort {
# sort TYPE ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function variable {
# variable K ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function operator {
# operator K #children ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function parameterized {
# parameterized K1 K2 #children ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
}
function constant {
# constant K T Hasher header ["comment"]
lineno=${BASH_LINENO[0]}
+ check_theory_seen
+}
+
+function check_theory_seen {
+ if ! $seen_theory; then
+ echo "$kf:$lineno: error: no \"theory\" declaration found (it has to be first)" >&2
+ exit 1
+ fi
+}
+
+function check_builtin_theory_seen {
+ if ! $seen_theory_builtin; then
+ echo "$me: warning: no declaration for the builtin theory found" >&2
+ fi
}
while [ $# -gt 0 ]; do
#
# mktheorytraits
# Morgan Deters <mdeters@cs.nyu.edu> for CVC4
-# Copyright (c) 2010 The CVC4 Project
+# Copyright (c) 2010-2011 The CVC4 Project
#
-# The purpose of this script is to create kind.h from a template and a
-# list of theory kinds.
+# The purpose of this script is to create theory_traits.h from a template
+# and a list of theory kinds.
#
# Invocation:
#
-# mkkind template-file theory-kind-files...
+# mktheorytraits template-file theory-kind-files...
#
# Output is to standard out.
#
-copyright=2010
+copyright=2010-2011
cat <<EOF
/********************* */
rewriter_class=
rewriter_header=
-
+
theory_id=
theory_class=
elif ! expr "$2" : '\(::CVC4::theory::*\)' >/dev/null; then
echo "$kf:$lineno: warning: theory class not under ::CVC4::theory namespace" >&2
fi
-
+
theory_id="$1"
theory_class="$2"
-
+
theory_includes="${theory_includes}#include \"$3\"
"
theory_for_each_macro="${theory_for_each_macro} CVC4_FOR_EACH_THEORY_STATEMENT(CVC4::theory::${theory_id}) \\
function rewriter {
# rewriter class header
lineno=${BASH_LINENO[0]}
-
+ check_theory_seen
+
rewriter_class="$1"
rewriter_header="$2"
-
+
theory_includes="${theory_includes}#include \"$2\"
"
-
}
function endtheory {
# endtheory
-
+ lineno=${BASH_LINENO[0]}
+ check_theory_seen
+
theory_traits="${theory_traits}
template<>
struct TheoryTraits<${theory_id}> {
typedef ${theory_class} theory_class;
typedef ${rewriter_class} rewriter_class;
-
+
static const bool isStableInfinite = ${theory_stable_infinite};
static const bool isFinite = ${theory_finite};
static const bool isPolite = ${theory_polite};
-
+
static const bool hasCheck = ${theory_has_check};
static const bool hasPropagate = ${theory_has_propagate};
static const bool hasStaticLearning = ${theory_has_static_learning};
rewriter_class=
rewriter_header=
-
+
theory_id=
theory_class=
-
+
lineno=${BASH_LINENO[0]}
}
function properties {
# properties property*
lineno=${BASH_LINENO[0]}
- while (( $# ));
+ check_theory_seen
+ while (( $# ));
do
property="$1"
- case "$property" in
+ case "$property" in
finite) theory_finite="true";;
stable-infinite) theory_stable_infinite="true";;
polite) theory_polite="true";;
presolve) theory_has_presolve="true";
esac
shift
- done;
+ done
}
function sort {
# sort TYPE ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_sort "$1" "$2"
}
function variable {
# variable K ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_kind "$1" 0 "$2"
}
function operator {
# operator K #children ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_kind "$1" "$2" "$3"
}
function parameterized {
# parameterized K1 K2 #children ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_kind "$1" "$3" "$4"
}
function constant {
# constant K T Hasher header ["comment"]
-
lineno=${BASH_LINENO[0]}
-
check_theory_seen
register_kind "$1" 0 "$5"
}
id=$1
comment=$2
type_constant_to_theory_id="${type_constant_to_theory_id} case $id: return $theory_id; break;
-"
+"
}
function register_kind {