O
so, hab jetztw as mit spirit rumexperimentiert, nachdem ich die dokumentation durchgelesen hab, und komm irgendwie nicht weiter,kommen ziemlich viele compilefehler...
wenn hier jemand unter den anwesenden ist, der sich ein bischen mit spirit auskennt,darf er sich melden
#define BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE
#include <boost/spirit/core.hpp>
#include <iostream>
using namespace std;
using namespace boost::spirit;
void print_number(double i){
cout<<i;
}
void add(char const*, char const*){
cout<<'+';
}
void sub(char const*, char const*){
cout<<'-';
}
void mul(char const*, char const*){
cout<<'*';
}
void div(char const*, char const*){
cout<<'/';
}
void group(char const*, char const*){
cout<<"group";
}
struct calculation:public grammar<calculation>{
template <typename ScannerT>
struct definition{
subrule<0> real;
subrule<1> expression;
subrule<2> term;
subrule<3> group;
subrule<4> summand;
rule<ScannerT> first;
definition(calculation const& self){
first=
(
expression=term|real,
term=
summand
>>*( ('+'>>summand)[&add]
| ('-'>>summand)[&sub]
),
summand=
(real|group)
>>*( ('*'>>(real|group))[&mul]
| ('/'>>(real|group))[&div]
),
group=ch_p('(')>>term>>ch_p(')')[&group],
real=real_p[&print_number]
);
}
rule<ScannerT> const& start() const{
return first;
}
};
};
int main()
{
calculation a;
parse("3.143+3.144*(1+2)",a,space_p);
int i;
cin>>i;
return 0;
}
//edit mom ich such mal die verwendbaren programmierfehler raus, der mingw schickt mich andauernd in die header des boosts um den fehler zu suchen^^
also hier die verwertbaren fehler:
main.cpp:45: error: no match for 'operator[]' in '
boost::spirit::operator>>(char, const boost::spirit::parser<DerivedT>&)
//edit 2 fehler gefunden, gab 2 namensproleme. ansonsten is es so richtig-.-
ps: boah braucht das lange zum compilen, die paar zeilen aufm mingw ca 10secs