extends RefCounted var state = { "foo": ["foo", "bar", "baz", "quux"], "bar": ["quux", "baz", "bar", "foo"] } func push(stack_symbol, symbol) -> void: state[stack_symbol].push_back(symbol) func peek(stack_symbol, depth : int, symbol) -> bool: var stack = state[stack_symbol] if not stack: return false return stack[stack.size() - depth] == symbol func pop(stack_symbol) -> void: state[stack_symbol].pop_back() func _rule_0() -> bool: var baz if not peek("foo", 0, "bar"): return false if baz == null and peek("foo", 1, "baz"): return false baz = peek("foo", 1, "baz") if not peek("foo", 2, "bin"): return false pop("foo") pop("foo") pop("foo") push("bar", "quux") push("bar", baz if baz else "baz") push("bar", "quin")