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)