| 239 | |
| 240 | |
| 241 | class Opt: |
| 242 | def __init__(self, node: Item): |
| 243 | self.node = node |
| 244 | |
| 245 | def __str__(self) -> str: |
| 246 | s = str(self.node) |
| 247 | # TODO: Decide whether to use [X] or X? based on type of X |
| 248 | if " " in s: |
| 249 | return f"[{s}]" |
| 250 | else: |
| 251 | return f"{s}?" |
| 252 | |
| 253 | def __repr__(self) -> str: |
| 254 | return f"Opt({self.node!r})" |
| 255 | |
| 256 | def __iter__(self) -> Iterator[Item]: |
| 257 | yield self.node |
| 258 | |
| 259 | |
| 260 | class Repeat: |