def __init__(self, rules='', **more_rules): """Construct a grammar. :arg rules: A string of production rules, one per line. :arg default_rule: The name of the rule invoked when you call :meth:`parse()` or :meth:`match()` on the grammar. Defaults to the first rule. Falls back to None if there are no string-based rules in this grammar. :arg more_rules: Additional kwargs whose names are rule names and values are Expressions or custom-coded callables which accomplish things the built-in rule syntax cannot. These take precedence over ``rules`` in case of naming conflicts. """ decorated_custom_rules = dict( (k, expression(v, k, self) if isfunction(v) or ismethod(v) else v) for k, v in iteritems(more_rules)) self._expressions, first = self._expressions_from_rules( rules, decorated_custom_rules) self.default_rule = first # may be None
def __init__(self, rules='', **more_rules): """Construct a grammar. :arg rules: A string of production rules, one per line. :arg default_rule: The name of the rule invoked when you call :meth:`parse()` or :meth:`match()` on the grammar. Defaults to the first rule. Falls back to None if there are no string-based rules in this grammar. :arg more_rules: Additional kwargs whose names are rule names and values are Expressions or custom-coded callables which accomplish things the built-in rule syntax cannot. These take precedence over ``rules`` in case of naming conflicts. """ decorated_custom_rules = dict( (k, expression(v, k, self) if isfunction(v) or ismethod(v) else v) for k, v in iteritems(more_rules)) self._expressions, first = self._expressions_from_rules(rules, decorated_custom_rules) self.default_rule = first # may be None
def __init__(self, rules='', default_rule=None, **custom_rules): """Construct a grammar. :arg rules: A string of production rules, one per line. :arg default_rule: The name of the rule invoked when you call :meth:`parse()` or :meth:`match()` on the grammar. Defaults to the first rule. Falls back to None if there are no string-based rules in this grammar. :arg custom_rules: Custom-coded rules: Expressions or plain callables to accomplish things the built-in rule syntax cannot. These take precedence over ``rules`` in case of naming conflicts. """ decorated_custom_rules = dict( (k, expression(v, k, self) if isfunction(v) or ismethod(v) else v) for k, v in custom_rules.iteritems()) exprs, first = self._expressions_from_rules(rules, decorated_custom_rules) self.update(exprs) self.default_rule = exprs[default_rule] if default_rule else first