File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/config/TeX-MML-AM_CHTML/MathJax.js
DGtal 2.0.0
DGtal::MPolynomialGrammar< Iterator > Struct Template Reference

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

Inheritance 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

◆ MPolynomialGrammar()

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

Definition at line 151 of file MPolynomialReader.h.

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
165 >> *( ( lit('+') [ push_back(at_c<0>(_val), '+') ]
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
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)] ) )
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::top_node(), ascii::space_type > expexpr
qi::rule< Iterator, detail::expr_node(), ascii::space_type > subexpr
qi::rule< Iterator, detail::top_node(), ascii::space_type > top
qi::rule< Iterator, detail::top_node(), ascii::space_type > mulexpr
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 > litvariable

References expexpr, genvariable, litvariable, monomial, MPolynomialGrammar(), mulexpr, subexpr, top, and variable.

Referenced by MPolynomialGrammar().

Field Documentation

◆ expexpr

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

Definition at line 215 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ genvariable

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

Definition at line 218 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ litvariable

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

Definition at line 219 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ monomial

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

Definition at line 216 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ mulexpr

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

Definition at line 213 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ subexpr

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

Definition at line 214 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ top

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

Definition at line 212 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().

◆ variable

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

Definition at line 217 of file MPolynomialReader.h.

Referenced by MPolynomialGrammar().


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