class_docstr: Low-level strategy implementation wrapping a Lark grammar.
  
  See ``from_lark`` for details.
class_docstr_tok: ["Low-level","strategy","implementation","wrapping","a","Lark","grammar",".","See","``","from_lark","``","for","details","."]
code: def draw_symbol(self, data, symbol, draw_state):
      if isinstance(symbol, Terminal):
          try:
              strategy = self.terminal_strategies[symbol.name]
          except KeyError:
              raise InvalidArgument(
                  "Undefined terminal %r. Generation does not currently support "
                  "use of %%declare unless you pass `explicit`, a dict of "
                  'names-to-strategies, such as `{%r: st.just("")}`'
                  % (symbol.name, symbol.name)
              ) from None
          draw_state.append(data.draw(strategy))
      else:
          assert isinstance(symbol, NonTerminal)
          data.start_example(self.rule_label(symbol.name))
          expansion = data.draw(
              self.nonterminal_strategies[symbol.name]
          )
          for e in expansion:
              self.draw_symbol(data, e, draw_state)
              self.gen_ignore(data, draw_state)
          data.stop_example()
  
file_path: catboost/contrib/python/hypothesis/py3/hypothesis/extra/lark.py
imports: from inspect import signature
  from typing import Dict, Optional
  import lark
  from lark.grammar import NonTerminal, Terminal
  from hypothesis import strategies
  from hypothesis.errors import InvalidArgument
  from hypothesis.internal.conjecture.utils import calc_label_from_name
  from hypothesis.internal.validation import check_type
  from hypothesis.strategies._internal.utils import cacheable, defines_strategy
label_desc: Use image node_id 4 for calling the LarkStrategy obj's underlying member method code with example usage: obj.draw_symbol(data, symbol, draw_state) without return types