DGtal  0.9.4beta
Public Member Functions | Data Fields
DGtal::MPolynomialGrammar< Iterator > Struct Template Reference

#include <DGtal/io/readers/MPolynomialReader.h>

Inheritance diagram for DGtal::MPolynomialGrammar< Iterator >:
[legend]
Collaboration diagram for DGtal::MPolynomialGrammar< Iterator >:
[legend]

Public Member Functions

 MPolynomialGrammar ()
 

Data Fields

qi::rule< Iterator, detail::top_node(), ascii::space_type > top
 
qi::rule< Iterator, detail::top_node(), ascii::space_type > mulexpr
 
qi::rule< Iterator, detail::expr_node(), ascii::space_type > subexpr
 
qi::rule< Iterator, detail::top_node(), ascii::space_type > expexpr
 
qi::rule< Iterator, detail::monomial_node(), ascii::space_type > monomial
 
qi::rule< Iterator, detail::power_node(), ascii::space_type > variable
 
qi::rule< Iterator, detail::power_node(), ascii::space_type > genvariable
 
qi::rule< Iterator, detail::power_node(), ascii::space_type > litvariable
 

Detailed Description

template<typename Iterator>
struct DGtal::MPolynomialGrammar< Iterator >

Defines a grammar for parsing multi-variate polynomials. Based on boost::spirit. You should use a MPolynomialReader to make polynomials from input strings. Another way is to use the overloaded DGtal::operator>>(std::istream &,MPolynomial<n,TRing,TAlloc> &).

Definition at line 148 of file MPolynomialReader.h.

Constructor & Destructor Documentation

template<typename Iterator >
DGtal::MPolynomialGrammar< Iterator >::MPolynomialGrammar ( )
inline

Definition at line 151 of file MPolynomialReader.h.

152  : MPolynomialGrammar::base_type(top)
153  {
154  using qi::eps;
155  using qi::lit;
156  using qi::int_;
157  using qi::_val;
158  using qi::_1;
159  using qi::double_;
160  using phoenix::at_c;
161  using phoenix::push_back;
162 
163  top = // An expression is an additive or subtractive expression
164  mulexpr [push_back(at_c<1>(_val), _1)]
165  >> *( ( lit('+') [ push_back(at_c<0>(_val), '+') ]
166  >> mulexpr [push_back(at_c<1>(_val), _1)] )
167  | ( ( lit('-') [ push_back(at_c<0>(_val), '-') ]
168  >> mulexpr [push_back(at_c<1>(_val), _1)] ) ) );
169 
170  mulexpr = // Each mul expression may be a product of sub-expressions
171  subexpr [push_back(at_c<1>(_val), _1)]
172  >> *( ( lit('*') [ push_back(at_c<0>(_val), '*') ]
173  >> mulexpr [push_back(at_c<1>(_val), _1)] ) );
174 
175  subexpr = // a sub-expression is a monomial or some ( ) or some ( )^k
176  monomial
177  | expexpr;
178 
179  expexpr = // ( expr ) or ( expr )^k
180  lit('(') [ push_back(at_c<0>(_val), '^') ]
181  >> top [ push_back(at_c<1>(_val), _1) ]
182  >> lit(')')
183  >> ( ( lit('^') >> int_ [ at_c<2>(_val) = _1 ] )
184  | eps [ at_c<2>(_val) = 1 ] ) ;
185 
186  monomial = // coef.power(s)*, or power(s)+
187  ( double_ [at_c<0>(_val) = _1]
188  >> *( genvariable [push_back(at_c<1>(_val), _1)] ) )
189  | +( genvariable [push_back(at_c<1>(_val), _1)]
190  >> eps [at_c<0>(_val) = 1] );
191 
192  genvariable = // may be some X_k^m or x^m, y^m ...
194  variable = // X_0 X_1 ... X_0^4 X_1^2 X_3^0 ...
195  lit('X') >> lit('_')
196  >> int_ [at_c<0>(_val) = _1]
197  >> ( ( lit('^') >> int_ [at_c<1>(_val) = _1] ) // X_k^e
198  | eps [at_c<1>(_val) = 1] // X_k
199  );
200  litvariable = // x y z t x^4 y^5 z^2 ...
201  ( lit('x') [at_c<0>(_val) = 0]
202  | lit('y') [at_c<0>(_val) = 1]
203  | lit('z') [at_c<0>(_val) = 2]
204  | lit('t') [at_c<0>(_val) = 3] )
205  >> ( ( lit('^') >> int_ [at_c<1>(_val) = _1] ) // x^3 z^4
206  | eps [at_c<1>(_val) = 1] // x y z
207  );
208 
209  }
qi::rule< Iterator, detail::power_node(), ascii::space_type > genvariable
qi::rule< Iterator, detail::power_node(), ascii::space_type > variable
qi::rule< Iterator, detail::monomial_node(), ascii::space_type > monomial
qi::rule< Iterator, detail::top_node(), ascii::space_type > mulexpr
qi::rule< Iterator, detail::top_node(), ascii::space_type > expexpr
qi::rule< Iterator, detail::expr_node(), ascii::space_type > subexpr
qi::rule< Iterator, detail::power_node(), ascii::space_type > litvariable

Field Documentation

template<typename Iterator >
qi::rule<Iterator, detail::top_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::expexpr

Definition at line 215 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::power_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::genvariable

Definition at line 218 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::power_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::litvariable

Definition at line 219 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::monomial_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::monomial

Definition at line 216 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::top_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::mulexpr

Definition at line 213 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::expr_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::subexpr

Definition at line 214 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::top_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::top

Definition at line 212 of file MPolynomialReader.h.

template<typename Iterator >
qi::rule<Iterator, detail::power_node(), ascii::space_type> DGtal::MPolynomialGrammar< Iterator >::variable

Definition at line 217 of file MPolynomialReader.h.


The documentation for this struct was generated from the following file: