66import os
77from time import time
88
9- import _peg_parser
10-
119try :
1210 import memory_profiler
1311except ModuleNotFoundError :
14- print ("Please run `make venv` to create a virtual environment and install"
15- " all the dependencies, before running this script." )
12+ print (
13+ "Please run `make venv` to create a virtual environment and install"
14+ " all the dependencies, before running this script."
15+ )
1616 sys .exit (1 )
1717
1818sys .path .insert (0 , os .getcwd ())
2121argparser = argparse .ArgumentParser (
2222 prog = "benchmark" , description = "Reproduce the various pegen benchmarks"
2323)
24- argparser .add_argument (
25- "--parser" ,
26- action = "store" ,
27- choices = ["new" , "old" ],
28- default = "pegen" ,
29- help = "Which parser to benchmark (default is pegen)" ,
30- )
3124argparser .add_argument (
3225 "--target" ,
3326 action = "store" ,
4033command_compile = subcommands .add_parser (
4134 "compile" , help = "Benchmark parsing and compiling to bytecode"
4235)
43- command_parse = subcommands .add_parser (
44- "parse" , help = "Benchmark parsing and generating an ast.AST"
45- )
46- command_notree = subcommands .add_parser (
47- "notree" , help = "Benchmark parsing and dumping the tree"
48- )
36+ command_parse = subcommands .add_parser ("parse" , help = "Benchmark parsing and generating an ast.AST" )
4937
5038
5139def benchmark (func ):
@@ -66,59 +54,37 @@ def wrapper(*args):
6654
6755
6856@benchmark
69- def time_compile (source , parser ):
70- if parser == "old" :
71- return _peg_parser .compile_string (
72- source ,
73- oldparser = True ,
74- )
75- else :
76- return _peg_parser .compile_string (source )
77-
78-
79- @benchmark
80- def time_parse (source , parser ):
81- if parser == "old" :
82- return _peg_parser .parse_string (source , oldparser = True )
83- else :
84- return _peg_parser .parse_string (source )
57+ def time_compile (source ):
58+ return compile (source , "<string>" , "exec" )
8559
8660
8761@benchmark
88- def time_notree (source , parser ):
89- if parser == "old" :
90- return _peg_parser .parse_string (source , oldparser = True , ast = False )
91- else :
92- return _peg_parser .parse_string (source , ast = False )
62+ def time_parse (source ):
63+ return ast .parse (source )
9364
9465
95- def run_benchmark_xxl (subcommand , parser , source ):
66+ def run_benchmark_xxl (subcommand , source ):
9667 if subcommand == "compile" :
97- time_compile (source , parser )
68+ time_compile (source )
9869 elif subcommand == "parse" :
99- time_parse (source , parser )
100- elif subcommand == "notree" :
101- time_notree (source , parser )
70+ time_parse (source )
10271
10372
104- def run_benchmark_stdlib (subcommand , parser ):
105- modes = {"compile" : 2 , "parse" : 1 , "notree" : 0 }
73+ def run_benchmark_stdlib (subcommand ):
74+ modes = {"compile" : 2 , "parse" : 1 }
10675 for _ in range (3 ):
10776 parse_directory (
10877 "../../Lib" ,
10978 verbose = False ,
11079 excluded_files = ["*/bad*" , "*/lib2to3/tests/data/*" ,],
111- tree_arg = 0 ,
11280 short = True ,
11381 mode = modes [subcommand ],
114- oldparser = (parser == "old" ),
11582 )
11683
11784
11885def main ():
11986 args = argparser .parse_args ()
12087 subcommand = args .subcommand
121- parser = args .parser
12288 target = args .target
12389
12490 if subcommand is None :
@@ -127,9 +93,9 @@ def main():
12793 if target == "xxl" :
12894 with open (os .path .join ("data" , "xxl.py" ), "r" ) as f :
12995 source = f .read ()
130- run_benchmark_xxl (subcommand , parser , source )
96+ run_benchmark_xxl (subcommand , source )
13197 elif target == "stdlib" :
132- run_benchmark_stdlib (subcommand , parser )
98+ run_benchmark_stdlib (subcommand )
13399
134100
135101if __name__ == "__main__" :
0 commit comments