(parser_class: type[Parser])
| 295 | |
| 296 | |
| 297 | def simple_parser_main(parser_class: type[Parser]) -> None: |
| 298 | argparser = argparse.ArgumentParser() |
| 299 | argparser.add_argument( |
| 300 | "-v", |
| 301 | "--verbose", |
| 302 | action="count", |
| 303 | default=0, |
| 304 | help="Print timing stats; repeat for more debug output", |
| 305 | ) |
| 306 | argparser.add_argument( |
| 307 | "-q", "--quiet", action="store_true", help="Don't print the parsed program" |
| 308 | ) |
| 309 | argparser.add_argument("filename", help="Input file ('-' to use stdin)") |
| 310 | |
| 311 | args = argparser.parse_args() |
| 312 | verbose = args.verbose |
| 313 | verbose_tokenizer = verbose >= 3 |
| 314 | verbose_parser = verbose == 2 or verbose >= 4 |
| 315 | |
| 316 | t0 = time.time() |
| 317 | |
| 318 | filename = args.filename |
| 319 | if filename == "" or filename == "-": |
| 320 | filename = "<stdin>" |
| 321 | file = sys.stdin |
| 322 | else: |
| 323 | file = open(args.filename) |
| 324 | try: |
| 325 | tokengen = tokenize.generate_tokens(file.readline) |
| 326 | tokenizer = Tokenizer(tokengen, verbose=verbose_tokenizer) |
| 327 | parser = parser_class(tokenizer, verbose=verbose_parser) |
| 328 | tree = parser.start() |
| 329 | try: |
| 330 | if file.isatty(): |
| 331 | endpos = 0 |
| 332 | else: |
| 333 | endpos = file.tell() |
| 334 | except OSError: |
| 335 | endpos = 0 |
| 336 | finally: |
| 337 | if file is not sys.stdin: |
| 338 | file.close() |
| 339 | |
| 340 | t1 = time.time() |
| 341 | |
| 342 | if not tree: |
| 343 | err = parser.make_syntax_error(filename) |
| 344 | traceback.print_exception(err.__class__, err, None) |
| 345 | sys.exit(1) |
| 346 | |
| 347 | if not args.quiet: |
| 348 | print(tree) |
| 349 | |
| 350 | if verbose: |
| 351 | dt = t1 - t0 |
| 352 | diag = tokenizer.diagnose() |
| 353 | nlines = diag.end[0] |
| 354 | if diag.type == token.ENDMARKER: |
no test coverage detected
searching dependent graphs…