Source code for pudding.tokens.statements.define

"""Define statement."""

import re

from ...datatypes import Data, Or, Regex, String, Varname
from ...processor import PAction
from ...processor.context import Context
from .statement import MultiExpStatement


[docs] class Define(MultiExpStatement): """Class for `define` statement.""" match_re = re.compile(r"(define) +(.*)$") value_types = (Varname, Data, ...)
[docs] def get_value_patterns(self, context: Context) -> str: """Return the combined patterns as a string. :param context: Context to resolve variables. :param re_flag: Regex flag when compiling expression. :returns: List of regex patterns, where each element is a possible pattern. """ pattern = r"" for data in self.values[1:]: if isinstance(data, (String, Regex)): pattern += data.re_pattern elif isinstance(data, Varname): pattern += context.get_var(data) elif isinstance(data, Or): msg = "Define statement can't contain Or-character." raise SyntaxError(f"{msg} (line {self.lineno})") return pattern
[docs] def execute(self, context: Context) -> PAction: """Set a variable. :param context: Current context object. :returns: PAction.CONTINUE """ context.variables[self.values[0].value] = self.get_value_patterns(context) return PAction.CONTINUE