Spaces:
Sleeping
Sleeping
| import re | |
| from compiler.parser_v2 import AbilityParserV2 | |
| parser = AbilityParserV2() | |
| text = 'TRIGGER: ON_PLAY\nEFFECT: LOOK_AND_CHOOSE_REVEAL(3) {FILTER="COST_GE=11"} -> CARD_HAND, DISCARD_REMAINDER (Optional)' | |
| # Debug the regex | |
| p = 'LOOK_AND_CHOOSE_REVEAL(3) {FILTER="COST_GE=11"} -> CARD_HAND, DISCARD_REMAINDER (Optional)' | |
| m = re.match(r"(\w+)(?:\((.*?)\))?(?:\s*\{.*?\}\s*)?(?:\s*->\s*([\w, ]+))?(.*)", p) | |
| if m: | |
| name, val, target_name, rest = m.groups() | |
| print(f"Regex Match: name={name}, val={val}, target_name={target_name}, rest='{rest}'") | |
| else: | |
| print("Regex Failed to match") | |
| abilities = parser.parse(text) | |
| for ab in abilities: | |
| print(f"Ability: {ab.trigger}") | |
| for eff in ab.effects: | |
| print( | |
| f" Effect: {eff.effect_type.name}, Optional: {eff.is_optional}, Target: {eff.target}, Params: {eff.params}" | |
| ) | |
| bytecode = [] | |
| ab._compile_single_effect(eff, bytecode) | |
| print(f" Compiled Bytecode: {bytecode}") | |
| if len(bytecode) == 4: | |
| op, v, a, s = bytecode | |
| print(f" Op: {op}, V: {v}, A: {a} (Hex: {hex(a & 0xFFFFFFFF)}), S: {s}") | |