Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Public Attributes | List of all members
Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT > Struct Template Reference

#include <AnalyticExpressionEvaluator.hpp>

Public Member Functions

 definition (AnalyticExpression const &self)
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > const & 
start () const
 

Public Attributes

NekDouble ParsedDouble
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< constantID > > 
constant
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< numberID > > 
number
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< variableID > > 
variable
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< parameterID > > 
parameter
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< functionID > > 
function
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< factorID > > 
factor
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
exponential
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
mult_div
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
add_sub
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
lt_gt
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
equality
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
logical_and
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
logical_or
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
expression
 
boost_spirit::rule< ScannerT,
boost_spirit::parser_context
<>, boost_spirit::parser_tag
< operatorID > > 
op
 

Detailed Description

template<typename ScannerT>
struct Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >

Definition at line 353 of file AnalyticExpressionEvaluator.hpp.

Constructor & Destructor Documentation

This function specifies the grammar of the MathAnalyticExpression parser.

Definition at line 155 of file AnalyticExpressionEvaluator.cpp.

References Nektar::LibUtilities::functions_p.

156  {
158 
159  logical_or = logical_and >> *( (root_node_d[str_p("||")] >> logical_and) );
160 
161  logical_and = equality >> *( (root_node_d[str_p("&&")] >> equality) );
162 
163  equality = lt_gt >> *( (root_node_d[str_p("==")] >> lt_gt) );
164 
165  lt_gt = add_sub >>
166  *( (root_node_d[str_p("<=")] >> add_sub)
167  | (root_node_d[str_p(">=")] >> add_sub)
168  | (root_node_d[ch_p('<')] >> add_sub)
169  | (root_node_d[ch_p('>')] >> add_sub)
170  );
171 
172  add_sub = mult_div >>
173  *( (root_node_d[ch_p('+')] >> mult_div)
174  | (root_node_d[ch_p('-')] >> mult_div)
175  );
176 
177  mult_div = exponential >>
178  *( (root_node_d[ch_p('*')] >> exponential)
179  | (root_node_d[ch_p('/')] >> exponential)
180  );
181 
182  exponential = factor >>
183  *( (root_node_d[ch_p('^')] >> factor) );
184 
185  factor = number
186  | function
187  | variable
188  | constant
189  | parameter
190  | inner_node_d[ch_p('(') >> expression >> ch_p(')')]
191  | (root_node_d[ch_p('-')] >> factor);
192 
193  parameter = leaf_node_d[ lexeme_d[
194  (alpha_p | '_' | '$') >> *(alnum_p | '_' | '$')
195  ] ] >> op;
196 
197  function = root_node_d[functions_p] >>
198  infix_node_d[inner_node_d[ch_p('(') >> expression >> *(',' >> expression) >> ch_p(')')]];
199 
200  variable = leaf_node_d[ lexeme_d[
201  self.variables_p
202  ] ] >> op;
203 
204  number = leaf_node_d[ lexeme_d[
205  real_p
206  ] ] >> op;
207 
208  constant = leaf_node_d[ lexeme_d[
209  *self.constants_p
210  ] ] >> op;
211 
212  op = eps_p( end_p | "||" | "&&" | "==" | "<=" | ">=" | '<' | '>' | '+' | '-' | '*' | '/' | '^' | ')' | ',' );
213  }
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > logical_or
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > exponential
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > op
Nektar::LibUtilities::functions functions_p
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< parameterID > > parameter
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > mult_div
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< constantID > > constant
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< variableID > > variable
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > equality
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< factorID > > factor
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > expression
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< numberID > > number
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > add_sub
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > logical_and
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > lt_gt

Member Function Documentation

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > const& Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::start ( ) const
inline

Definition at line 378 of file AnalyticExpressionEvaluator.hpp.

References Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::expression.

378 { return expression; }
boost_spirit::rule< ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag< operatorID > > expression

Member Data Documentation

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::add_sub

Definition at line 369 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<constantID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::constant

Definition at line 361 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::equality

Definition at line 371 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::exponential

Definition at line 367 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::expression
template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<factorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::factor

Definition at line 366 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<functionID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::function

Definition at line 365 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::logical_and

Definition at line 372 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::logical_or

Definition at line 373 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::lt_gt

Definition at line 370 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::mult_div

Definition at line 368 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<numberID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::number

Definition at line 362 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<operatorID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::op

Definition at line 375 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<parameterID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::parameter

Definition at line 364 of file AnalyticExpressionEvaluator.hpp.

This holds the NekDouble value that is parsed by spirit so it can be stored in the AST.

Definition at line 359 of file AnalyticExpressionEvaluator.hpp.

template<typename ScannerT >
boost_spirit::rule<ScannerT, boost_spirit::parser_context<>, boost_spirit::parser_tag<variableID> > Nektar::LibUtilities::AnalyticExpressionEvaluator::AnalyticExpression::definition< ScannerT >::variable

Definition at line 363 of file AnalyticExpressionEvaluator.hpp.