summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-21 15:26:01 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-21 15:26:01 +0200
commit0fc661ebabdf55b8e0d26c4f85f0547c106b6549 (patch)
treeb41a52c7a6294b381cd370379ef4b5abbea7d8a7 /prop_to_pred
parentbc3e8933e1005e93e4a97b9a207cb40db454a2a8 (diff)
Got some property dependencies to work.
Diffstat (limited to 'prop_to_pred')
-rw-r--r--prop_to_pred/Makefile53
-rwxr-xr-xprop_to_pred/parser.py78
2 files changed, 131 insertions, 0 deletions
diff --git a/prop_to_pred/Makefile b/prop_to_pred/Makefile
new file mode 100644
index 0000000..50cd36a
--- /dev/null
+++ b/prop_to_pred/Makefile
@@ -0,0 +1,53 @@
+## Parameters ##################################################################
+TO_PRED_TEMPLATE_DIR ?=
+INFERRED_LEVEL_FILE ?=
+PARSING_SCRIPT ?= ${CURDIR}/parser.py
+
+## Parameters Sanity Check #####################################################
+ifeq ($(strip $(PARSING_SCRIPT)),)
+$(error No PARSING_SCRIPT defined as parameter.)
+endif
+
+################################################################################
+
+## Makefile Magic ##############################################################
+PRED_TO_INFER = \
+ $(addprefix $(TO_PRED_TEMPLATE_DIR)/,$(notdir $(wildcard $(TEMPLATE_DIR)/*.pp)))
+ADDITIONAL_MAKEFILES = \
+ $(addsuffix .deps,$(addprefix $(DEPENDENCIES_DIR)/,$(basename $(notdir $(wildcard $(PROPERTIES_DIR)/*.pro)))))
+
+export
+## Makefile Rules ##############################################################
+compile: $(PRED_TO_INFER) $(ADDITIONAL_MAKEFILES)
+
+model:
+
+solutions:
+
+clean:
+ rm -f $(TO_PRED_TEMPLATE_DIR)/*
+ rm -f $(INFERRED_LEVEL_FILE)
+
+clean_model:
+
+clean_solutions:
+ rm -f $(TO_PRED_TEMPLATE_DIR)/*
+ rm -f $(INFERRED_LEVEL_FILE)
+
+########
+$(TO_PRED_TEMPLATE_DIR)/%.pp: $(PROPERTIES_DIR)/%.pro
+ cat $< | sed 's/.*;;.*//g' | tr -d "\n\r" \
+ | sed -n 's/.*(tag_existing[ \t]\+([ \t]*\(\([ \t]*([^)]\+)\)\+\)[ \t]*.*)/\1/p' \
+ | sed 's/)/)\n/g' | sed 's/[ \t]\+/ /g' | tr -d "()" \
+ | $(PARSING_SCRIPT) \
+ $(patsubst %.pp,%,$(notdir $(basename $@))) \
+ $@ \
+ $(INFERRED_LEVEL_FILE)
+ $(MAKE) $(DEPENDENCIES_DIR)/$(patsubst %.pp,%,$(notdir $(basename $@))).deps
+
+$(DEPENDENCIES_DIR)/%.deps: $(PROPERTIES_DIR)/%.pro
+ printf "$(SOL_DIR)/$(notdir $(basename $@)).sol.ready: " > $@
+ for dep in `sed -n 's/^#require \"\(.*\)\"$$/\1/p' $<` ; do \
+ printf "$(SOL_DIR)/$$dep.sol " >> $@ ; \
+ done
+ printf "\n\t touch $(SOL_DIR)/$(notdir $(basename $@)).sol.ready\n\n" >> $@
diff --git a/prop_to_pred/parser.py b/prop_to_pred/parser.py
new file mode 100755
index 0000000..7a25561
--- /dev/null
+++ b/prop_to_pred/parser.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+import sys
+import argparse
+
+
+parser = argparse.ArgumentParser(
+ description='Property to Predicate parser.'
+)
+
+parser.add_argument(
+ "predicate_name",
+ action='store',
+ type=str,
+ help="Name of the predicate."
+)
+
+parser.add_argument(
+ "output_template_file",
+ action='store',
+ type=argparse.FileType(mode='w',encoding='UTF-8'),
+ help="Predicate from Property template file."
+)
+
+parser.add_argument(
+ "inferred_level",
+ action='store',
+ type=argparse.FileType(mode='a',encoding='UTF-8'),
+ help="Inferred level file."
+)
+
+args = parser.parse_args()
+
+var_names = list()
+var_types = list()
+
+for line in sys.stdin.readlines():
+ line_data = line.strip().split(" ")
+ print(line_data)
+ var_name = line_data[0].strip()
+ var_type = line_data[1].strip()
+
+ args.inferred_level.write("(add_type " + var_type + ")\n")
+
+ var_names.append(var_name)
+ var_types.append(var_type)
+
+args.inferred_level.write(
+ "(add_predicate _"
+ + args.predicate_name
+ + " "
+ + ' '.join(var_types)
+ + ")\n"
+)
+
+params = ""
+for i in range(len(var_types)):
+ if (var_types[i] == "waveform"):
+ new_id = ("$" + var_names[i] + ".WFM_ID$")
+ else:
+ new_id = ("$" + var_names[i] + ".ID$")
+
+ params += (" " + new_id)
+
+ args.output_template_file.write(
+ "(add_element "
+ + var_types[i]
+ + " "
+ + new_id
+ + ")\n"
+ )
+
+args.output_template_file.write(
+ "(_"
+ + args.predicate_name
+ + params
+ + ")\n"
+)
+