@@ -22,40 +22,40 @@ private static Parser<double> CreateParser()
2222{
2323 // Grammar:
2424 // ----------------------------------------
25- // Start : Sum $
26- // Sum : Product (S [+-] Product)*
27- // Product : Unary (S [*/] Unary)*
28- // Unary : S '-'? Primary
25+ // Start : S Sum $
26+ // Sum : Product ([+-] S Product)*
27+ // Product : Unary ([*/] S Unary)*
28+ // Unary : '-'? S Primary
2929 // Primary : Parenthesis / Value
30- // Parenthesis : S '(' Sum S ')'
31- // Value : S Number
32- // S : Whitespace *
30+ // Parenthesis : '(' S Sum ')' S
31+ // Value : Number S
32+ // S : [ \r\n\t] *
3333
3434 var sum = Deferred <double >();
35- var value = S . Then ( Literal .Number <double >());
35+ var value = Literal .Number <double >(). ThenIgnore ( S );
3636
3737 var parenthesis = sum .Between (
38- Seq (S , L ('(' )),
39- Seq (S , L (')' ))
38+ Seq (L ('(' ), S ),
39+ Seq (L (')' ), S )
4040 );
4141
4242 var primary = parenthesis .Or (value );
4343
4444 var unary = Seq (
45- S ,
4645 L ('-' ).Optional (),
46+ S ,
4747 primary
48- ).Do ((_ , u , d ) => u .HasValue ? - d : d );
48+ ).Do ((u , _ , d ) => u .HasValue ? - d : d );
4949
5050 var product = unary .Fold (
51- S . Then ( OneOf (" */" )),
51+ OneOf (" */" ). ThenIgnore ( S ),
5252 (l , r , op ) => op == '*' ? l * r : l / r );
5353
5454 sum .Parser = product .Fold (
55- S . Then ( OneOf (" +-" )),
55+ OneOf (" +-" ). ThenIgnore ( S ),
5656 (l , r , op ) => op == '+' ? l + r : l - r );
5757
58- return sum .Before ( Eof );
58+ return sum .Between ( S , Eof );
5959}
6060```
6161
0 commit comments