RE: boost::spirit and boost in general for c++ people.

Hi Ty,
No matter whether it was your idea or Kens, it matters that you are using that 
library. That's a good thing.

Jim

Jim Homme,
Usability Services,
Phone: 412-544-1810. Skype: jim.homme
Highmark recipients,  Read my accessibility blog. Discuss accessibility here. 
Accessibility Wiki: Breaking news and accessibility advice


-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx 
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, Tyler
Sent: Thursday, April 07, 2011 10:27 AM
To: programmingblind@xxxxxxxxxxxxx
Subject: Re: boost::spirit and boost in general for c++ people.

Glad you can read it! that means I did somewhat ok. :)
On 4/7/2011 8:20 AM, Homme, James wrote:
> Hi Ty,
> Wow. I can almost read this program. I'm proud of myself. Maybe I'm starting 
> to learn this OO stuff. I'm happy.
>
> Jim
>
> Jim Homme,
> Usability Services,
> Phone: 412-544-1810. Skype: jim.homme
> Highmark recipients,  Read my accessibility blog. Discuss accessibility here. 
> Accessibility Wiki: Breaking news and accessibility advice
>
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx 
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, Tyler
> Sent: Thursday, April 07, 2011 9:09 AM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: boost::spirit and boost in general for c++ people.
>
> hello all:
> Recently I got into using boost a bit and started finding uses for it
> all over the place. I would like to encourage those who haven't yet and
> use c++ to check it out; it is quite powerful and can eas some of your
> work and provide really cool features along the way. For example:
> boost::function lets you take callbacks in multiple forms; boost::bind
> will let you bind a functor to it's arguments and pass that as your
> callback, which means you can bind to a static member function, a member
> function (and pass the object with boost::ref), a global function and
> you can also use boost::lambda.
> There are many more utilities out there; I highly recommend checking out
> boost::asio, boost::fusion, boost::function and boost::bind.
> In the spirit of convincing you all, I wrote a small calculator program
> that does single operations (1+3, 3*5), etc and returns the result.
> My next step is to split up my parsing into different rulesets and then
> work on generating an AST so that I can handle larger more complex
> calculations.
> /*
> A simple calculator, supports multiplication, division, addition and
> subtraction.
> */
> #include<boost/spirit/include/qi.hpp>
> #include<boost/spirit/include/phoenix_core.hpp>
> #include<boost/spirit/include/phoenix_operator.hpp>
> #include<boost/spirit/include/phoenix_operator.hpp>
> #include<iostream>
> #include<string>
> #include<boost/fusion/include/adapt_struct.hpp>
> #include<boost/fusion/container/vector.hpp>
> #include<boost/fusion/container/vector/convert.hpp>
> #include<boost/fusion/include/io.hpp>
>
> namespace qi = boost::spirit::qi;
> namespace ascii = boost::spirit::ascii;
> namespace phoenix = boost::phoenix;
>
> struct calculation
> {
>     int a, b;
>     char op;
> };
> BOOST_FUSION_ADAPT_STRUCT(calculation, (int, a) (char, op) (int, b) )
>
> template<typename iterator>
> class CParser:public qi::grammar<iterator, calculation(),
> qi::ascii::space_type>
> {
>     qi::rule<iterator, calculation(), qi::ascii::space_type>  crule;
> public:
>     CParser():CParser::base_type(crule)
>     {
>       using qi::ascii::char_;
>       using qi::int_;
>
>       crule %= (int_>>
>                 (char_('+')|char_('-')|char_('*')|char_('/'))>>
>                 int_);
>     }
> };
>
> int main()
> {
>     CParser<std::string::iterator>  p;
>     std::string str;
>     calculation result;
>
>     std::cout<<  "Enter your calculation>";
> getline(std::cin, str);
>
>     bool r = phrase_parse(str.begin(), str.end(), p, qi::ascii::space,
> result);
>     if (r)
>       {
>         std::cout<<  "a: "<<  result.a<<  " b: "<<  result.b<<  " op:"
> <<  result.op<<  std::endl;
>         switch(result.op)
>           {
>           case '+':
>             std::cout<<  "Result: "<<  (result.a + result.b)<<  std::endl;
>             break;
>           case '-':
>             std::cout<<  "result: "<<  (result.a - result.b)<<  std::endl;
>             break;
>           case '*':
>             std::cout<<  "Result: "<<  (result.a * result.b)<<  std::endl;
>             break;
>           case '/':
>             if (result.a == 0)
>               {
>                 std::cout<<  "Division by zero error."<<  std::endl;
>                 break;
>               }
>             std::cout<<  "result: "<<  (result.a / result.b)<<  std::endl;
>             break;
>           default:
>             std::cout<<  "Invalid operation."<<  std::endl;
>           }
>       }
>     else
>       {
>         std::cout<<  "Invalid input."<<  std::endl;
>       }
>
>     return 0;
> }
>
> --
>
> Thanks,
> Ty
>
> __________
> View the list's information and change your settings at
> http://www.freelists.org/list/programmingblind
>
>
> This e-mail and any attachments to it are confidential and are intended 
> solely for use of the individual or entity to whom they are addressed.  If 
> you have received this e-mail in error, please notify the sender immediately 
> and then delete it.  If you are not the intended recipient, you must not 
> keep, use, disclose, copy or distribute this e-mail without the author's 
> prior permission.  The views expressed in this e-mail message do not 
> necessarily represent the views of Highmark Inc., its subsidiaries, or 
> affiliates.
> __________
> View the list's information and change your settings at
> http://www.freelists.org/list/programmingblind
>
>


-- 

Thanks,
Ty

__________
View the list's information and change your settings at 
http://www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at
http://www.freelists.org/list/programmingblind

Other related posts: