code: def uops(self) -> list[UOp] | None:
      if uop := self.uop():
          uop = cast(UOp, uop)
          uops = [uop]
          while self.expect(lx.PLUS):
              if uop := self.uop():
                  uop = cast(UOp, uop)
                  uops.append(uop)
              else:
                  raise self.make_syntax_error(
                      "Expected op name or cache effect"
                  )
          return uops
      return None
  
imports: from dataclasses import dataclass, field
  from typing import NamedTuple, Callable, TypeVar, Literal, cast
  import lexer
  from plexer import PLexer
label_desc: Use image node_id 14 for calling the Parser obj's underlying member method code with example usage: obj.uops() and returns: None, uops