(root)/
Python-3.11.7/
Tools/
c-analyzer/
c_parser/
parser/
_delim.py
       1  import re
       2  import textwrap
       3  
       4  from ._regexes import _ind, STRING_LITERAL
       5  
       6  
       7  def parse(text, anon_name):
       8      context = None
       9      data = None
      10      for m in DELIMITER_RE.find_iter(text):
      11          before, opened, closed = m.groups()
      12          delim = opened or closed
      13  
      14          handle_segment = HANDLERS[context][delim]
      15          result, context, data = handle_segment(before, delim, data)
      16          if result:
      17              yield result
      18  
      19  
      20  DELIMITER = textwrap.dedent(rf'''
      21      (
      22          (?:
      23              [^'"()\[\]{};]*
      24              {_ind(STRING_LITERAL, 3)}
      25          }*
      26          [^'"()\[\]{};]+
      27       )?  # <before>
      28      (?:
      29          (
      30              [(\[{]
      31           )  # <open>
      32          |
      33          (
      34              [)\]};]
      35           )  # <close>
      36       )?
      37      ''')
      38  DELIMITER_RE = re.compile(DELIMITER, re.VERBOSE)
      39  
      40  _HANDLERS = {
      41      None: {  # global
      42          # opened
      43          '{': ...,
      44          '[': None,
      45          '(': None,
      46          # closed
      47          '}': None,
      48          ']': None,
      49          ')': None,
      50          ';': ...,
      51      },
      52      '': {
      53      },
      54  }