File tree Expand file tree Collapse file tree 8 files changed +1416
-0
lines changed Expand file tree Collapse file tree 8 files changed +1416
-0
lines changed Original file line number Diff line number Diff line change @@ -161,6 +161,10 @@ name = "arithmetic"
161161test = true
162162required-features = [" alloc" ]
163163
164+ [[example ]]
165+ name = " c_expression"
166+ required-features = [" std" ]
167+
164168[[example ]]
165169name = " css"
166170test = true
@@ -211,6 +215,12 @@ path = "examples/arithmetic/bench.rs"
211215harness = false
212216required-features = [" alloc" ]
213217
218+ [[bench ]]
219+ name = " c_expression"
220+ path = " examples/c_expression/bench.rs"
221+ harness = false
222+ required-features = [" std" ]
223+
214224[[bench ]]
215225name = " contains_token"
216226harness = false
Original file line number Diff line number Diff line change 1+ mod parser;
2+
3+ use criterion:: black_box;
4+ use winnow:: prelude:: * ;
5+
6+ fn pratt ( c : & mut criterion:: Criterion ) {
7+ let i =
8+ "a = 2*-2 / ( &**foo.a->p! -+1) + 3^1 / 4 == 1 * (2 - 7 + 567 *12 /2) + 3*(1+2*( 45 /2))" ;
9+ parser:: pratt_parser. parse ( i) . expect ( "should parse" ) ;
10+ c. bench_function ( "pratt_parser" , |b| {
11+ b. iter ( || black_box ( parser:: pratt_parser. parse ( i) . unwrap ( ) ) ) ;
12+ } ) ;
13+ }
14+
15+ criterion:: criterion_group!( benches, pratt) ;
16+ criterion:: criterion_main!( benches) ;
Original file line number Diff line number Diff line change 1+ use winnow:: prelude:: * ;
2+
3+ mod parser;
4+
5+ fn main ( ) -> Result < ( ) , lexopt:: Error > {
6+ let args = Args :: parse ( ) ?;
7+
8+ let input = args. input . as_deref ( ) . unwrap_or ( "1 + 1" ) ;
9+ match parser:: pratt_parser. parse ( input) {
10+ Ok ( result) => {
11+ println ! ( "{result}" ) ;
12+ }
13+ Err ( err) => {
14+ println ! ( "FAILED" ) ;
15+ println ! ( "{err}" ) ;
16+ }
17+ }
18+
19+ Ok ( ( ) )
20+ }
21+
22+ #[ derive( Default ) ]
23+ struct Args {
24+ input : Option < String > ,
25+ }
26+
27+ impl Args {
28+ fn parse ( ) -> Result < Self , lexopt:: Error > {
29+ use lexopt:: prelude:: * ;
30+
31+ let mut res = Args :: default ( ) ;
32+
33+ let mut args = lexopt:: Parser :: from_env ( ) ;
34+ while let Some ( arg) = args. next ( ) ? {
35+ match arg {
36+ Value ( input) => {
37+ res. input = Some ( input. string ( ) ?) ;
38+ }
39+ _ => return Err ( arg. unexpected ( ) ) ,
40+ }
41+ }
42+ Ok ( res)
43+ }
44+ }
You can’t perform that action at this time.
0 commit comments