Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2007-10-11 13:02:13


Author: eric_niebler
Date: 2007-10-11 13:02:13 EDT (Thu, 11 Oct 2007)
New Revision: 39933
URL: http://svn.boost.org/trac/boost/changeset/39933

Log:
new number parser example from dave jenkins
Text files modified:
   trunk/libs/xpressive/example/numbers.cpp | 32 +++++++++++++++++---------------
   1 files changed, 17 insertions(+), 15 deletions(-)

Modified: trunk/libs/xpressive/example/numbers.cpp
==============================================================================
--- trunk/libs/xpressive/example/numbers.cpp (original)
+++ trunk/libs/xpressive/example/numbers.cpp 2007-10-11 13:02:13 EDT (Thu, 11 Oct 2007)
@@ -51,39 +51,39 @@
         map_list_of("zero",0)("dozen",12)("score",20);
 
     // n is the integer result
- long n = 0;
+ local<long> n(0);
     // temp stores intermediate values
- long temp = 0;
+ local<long> temp(0);
 
- // initialize the delimiters between words
+ // delimiters between words must be spaces, end-of-sequence, or punctuation
     sregex delim =
- +_s | eos | '-' | ',';
+ +_s | eos | +punct;
 
     // initialize the regular expressions for named numbers
     sregex ones_rx =
- ( a1 = ones_map ) [ ref(n) += a1 ] >> delim;
+ ( a1 = ones_map ) [ n += a1 ] >> delim;
 
     sregex tens_rx =
             ones_rx
         |
         (
- ( a1 = tens_map ) [ ref(n) += a1 ] >> delim
+ ( a1 = tens_map ) [ n += a1 ] >> delim
>> !ones_rx
         )
         |
- ( ( a1 = teens_map ) [ ref(n) += a1 ] >> delim
+ ( ( a1 = teens_map ) [ n += a1 ] >> delim
         );
 
     sregex hundreds_rx =
         ( ( tens_rx >> "hundred" >> delim )
- [ ref(n) *= 100 ]
+ [ n *= 100 ]
>> !tens_rx
         )
         | tens_rx;
 
     sregex thousands_rx =
         ( ( hundreds_rx >> "thousand" >> delim )
- [ ref(temp) += ref(n) * 1000, ref(n) = 0 ]
+ [ temp += n * 1000, n = 0 ]
>> !hundreds_rx
         )
         | hundreds_rx
@@ -91,16 +91,18 @@
 
     sregex millions_rx =
         ( ( hundreds_rx >> "million" >> delim )
- [ ref(temp) += ref(n) * 1000000, ref(n) = 0 ]
+ [ temp += n * 1000000, n = 0 ]
>> !thousands_rx
         )
         | thousands_rx;
 
+ // Note: this uses two attribues, a1 and a2, and it uses
+ // a default attribute value of 1 for a1.
     sregex specials_rx =
         ( !((a1 = ones_map) >> delim) >> (a2 = specials_map) )
- [ ref(n) = (a1 | 1) * a2 ]
+ [ n = (a1 | 1) * a2 ]
>> delim
- >> !("and" >> delim >> ones_rx);
+ >> !("and" >> +_s >> ones_rx);
 
     sregex number_rx =
         bow
@@ -108,7 +110,7 @@
         ( specials_rx
         |
             millions_rx
- [ref(n) += ref(temp), ref(temp) = 0 ]
+ [n += temp, temp = 0 ]
         );
 
     // this is the input string
@@ -142,8 +144,8 @@
 
     for( ; cur != end; ++cur )
     {
- std::cout << *cur << " = " << n << '\n';
- n = 0;
+ std::cout << *cur << " = " << n.get() << '\n';
+ n.get() = 0;
     }
     std::cout << '\n';
 }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk