diff options
-rw-r--r-- | bindings.yaml | 8 | ||||
-rw-r--r-- | codegen.py | 40 | ||||
-rw-r--r-- | funcs.py | 8 | ||||
-rw-r--r-- | prelude.py | 1 | ||||
-rw-r--r-- | scenario.txt | 3 |
5 files changed, 60 insertions, 0 deletions
diff --git a/bindings.yaml b/bindings.yaml new file mode 100644 index 0000000..7dbe4cc --- /dev/null +++ b/bindings.yaml @@ -0,0 +1,8 @@ +- pattern: given some precondition + function: given_precondition + +- pattern: when (?P<name>\S+) does something + function: do + +- pattern: then all if fine + function: is_fine diff --git a/codegen.py b/codegen.py new file mode 100644 index 0000000..6e8aac2 --- /dev/null +++ b/codegen.py @@ -0,0 +1,40 @@ +import json +import re +import sys +import yaml + + +def find_binding(binds, step): + for bind in binds: + m = re.match(bind['pattern'], step, re.I | re.M) + if m is not None: + return new_match(bind, m) + return None + + +def new_match(bind, match): + return { + 'function': bind['function'], + 'args': match.groupdict(), + } + + +def codegen(f, match): + f.write('args = {}\n'.format(json.dumps(match['args']))) + f.write('{}(**args)\n'.format(match['function'])) + + + +with open('bindings.yaml') as f: + binds = yaml.safe_load(f) + + +with open('prelude.py') as f: + sys.stdout.write(f.read()) + + +with open('scenario.txt') as scenario: + for step in scenario: + match = find_binding(binds, step) + if match is not None: + codegen(sys.stdout, match) diff --git a/funcs.py b/funcs.py new file mode 100644 index 0000000..73b11a0 --- /dev/null +++ b/funcs.py @@ -0,0 +1,8 @@ +def given_precondition(**kwargs): + print('precondition:', kwargs) + +def do(**kwargs): + print('do:', kwargs) + +def is_fine(**kwargs): + print('is_fine:', kwargs) diff --git a/prelude.py b/prelude.py new file mode 100644 index 0000000..30204a4 --- /dev/null +++ b/prelude.py @@ -0,0 +1 @@ +from funcs import * diff --git a/scenario.txt b/scenario.txt new file mode 100644 index 0000000..6d2fc1d --- /dev/null +++ b/scenario.txt @@ -0,0 +1,3 @@ +given some precondition +when Tomjon does something +then all if fine |