Ignore:
Timestamp:
06/06/17 17:58:16 (7 years ago)
Author:
oabramkina
Message:

Two server levels: merging with trunk r1137.
There are bugs.

Location:
XIOS/dev/dev_olga/src/parse_expr
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/parse_expr/filter_expr_node.cpp

    r643 r1158  
    22#include "unary_arithmetic_filter.hpp" 
    33#include "binary_arithmetic_filter.hpp" 
     4#include "ternary_arithmetic_filter.hpp" 
    45#include "field.hpp" 
    56 
     
    4041  boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
    4142  { 
    42     if (!CField::has(fieldId)) 
     43    boost::shared_ptr<COutputPin> outputPin; 
     44 
     45    if (fieldId == "this") 
     46      outputPin = thisField.getSelfTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     47    else if (CField::has(fieldId)) 
     48    { 
     49      CField* field = CField::get(fieldId); 
     50      if (field == &thisField) 
     51        ERROR("boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
     52              << "The field " << fieldId << " has an invalid reference to itself. " 
     53              << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 
     54 
     55      field->buildFilterGraph(gc, false); 
     56      outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     57    } 
     58    else 
    4359      ERROR("boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
    4460            << "The field " << fieldId << " does not exist."); 
    4561 
    46     CField* field = CField::get(fieldId); 
    47     if (field == &thisField) 
    48       ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
    49             << "The field " << fieldId << " has an invalid reference to itself."); 
    50  
    51     field->buildFilterGraph(gc, false); 
    52     return field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     62    return outputPin; 
    5363  } 
    5464 
     
    120130    return filter; 
    121131  } 
     132 
     133 
     134 
     135 
     136  CFilterScalarScalarFieldOpExprNode::CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3) 
     137    : child1(child1) 
     138    , opId(opId) 
     139    , child2(child2) 
     140    , child3(child3) 
     141  { 
     142    if (!child1 || !child2 || !child3) 
     143      ERROR("  CFilterScalarScalarFieldOpExprNode::CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3)", 
     144            "Impossible to create the new expression node, an invalid child node was provided."); 
     145  } 
     146 
     147  boost::shared_ptr<COutputPin> CFilterScalarScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     148  { 
     149    boost::shared_ptr<CScalarScalarFieldArithmeticFilter> filter(new CScalarScalarFieldArithmeticFilter(gc, opId, child1->reduce(),child2->reduce())); 
     150    child3->reduce(gc, thisField)->connectOutput(filter, 0); 
     151    return filter; 
     152  } 
     153 
     154 
     155  CFilterScalarFieldScalarOpExprNode::CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3) 
     156    : child1(child1) 
     157    , opId(opId) 
     158    , child2(child2) 
     159    , child3(child3) 
     160  { 
     161    if (!child1 || !child2 || !child3) 
     162      ERROR("  CFilterScalarFieldScalarOpExprNode::CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3)", 
     163            "Impossible to create the new expression node, an invalid child node was provided."); 
     164  } 
     165 
     166  boost::shared_ptr<COutputPin> CFilterScalarFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     167  { 
     168    boost::shared_ptr<CScalarFieldScalarArithmeticFilter> filter(new CScalarFieldScalarArithmeticFilter(gc, opId, child1->reduce(),child3->reduce())); 
     169    child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     170    return filter; 
     171  } 
     172 
     173 
     174  CFilterScalarFieldFieldOpExprNode::CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3) 
     175    : child1(child1) 
     176    , opId(opId) 
     177    , child2(child2) 
     178    , child3(child3) 
     179  { 
     180    if (!child1 || !child2 || !child3) 
     181      ERROR("  CFilterScalarFieldFieldOpExprNode::CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3)", 
     182            "Impossible to create the new expression node, an invalid child node was provided."); 
     183  } 
     184 
     185  boost::shared_ptr<COutputPin> CFilterScalarFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     186  { 
     187    boost::shared_ptr<CScalarFieldFieldArithmeticFilter> filter(new CScalarFieldFieldArithmeticFilter(gc, opId, child1->reduce())); 
     188    child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     189    child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     190    return filter; 
     191  } 
     192 
     193 
     194 
     195  CFilterFieldScalarScalarOpExprNode::CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3) 
     196    : child1(child1) 
     197    , opId(opId) 
     198    , child2(child2) 
     199    , child3(child3) 
     200  { 
     201    if (!child1 || !child2 || !child3) 
     202      ERROR("  CFilterFieldScalarScalarOpExprNode::CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3)", 
     203            "Impossible to create the new expression node, an invalid child node was provided."); 
     204  } 
     205 
     206  boost::shared_ptr<COutputPin> CFilterFieldScalarScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     207  { 
     208    boost::shared_ptr<CFieldScalarScalarArithmeticFilter> filter(new CFieldScalarScalarArithmeticFilter(gc, opId, child2->reduce(),child3->reduce())); 
     209    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     210    return filter; 
     211  } 
     212 
     213 
     214 
     215  CFilterFieldScalarFieldOpExprNode::CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3) 
     216    : child1(child1) 
     217    , opId(opId) 
     218    , child2(child2) 
     219    , child3(child3) 
     220  { 
     221    if (!child1 || !child2 || !child3) 
     222      ERROR("  CFilterFieldScalarFieldOpExprNode::CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3)", 
     223            "Impossible to create the new expression node, an invalid child node was provided."); 
     224  } 
     225 
     226  boost::shared_ptr<COutputPin> CFilterFieldScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     227  { 
     228    boost::shared_ptr<CFieldScalarFieldArithmeticFilter> filter(new CFieldScalarFieldArithmeticFilter(gc, opId, child2->reduce())); 
     229    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     230    child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     231    return filter; 
     232  } 
     233 
     234 
     235 
     236  CFilterFieldFieldScalarOpExprNode::CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3) 
     237    : child1(child1) 
     238    , opId(opId) 
     239    , child2(child2) 
     240    , child3(child3) 
     241  { 
     242    if (!child1 || !child2 || !child3) 
     243      ERROR("  CFilterFieldFieldScalarOpExprNode::CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3)", 
     244            "Impossible to create the new expression node, an invalid child node was provided."); 
     245  } 
     246 
     247  boost::shared_ptr<COutputPin> CFilterFieldFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     248  { 
     249    boost::shared_ptr<CFieldFieldScalarArithmeticFilter> filter(new CFieldFieldScalarArithmeticFilter(gc, opId, child3->reduce())); 
     250    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     251    child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     252    return filter; 
     253  } 
     254 
     255 
     256  CFilterFieldFieldFieldOpExprNode::CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3) 
     257    : child1(child1) 
     258    , opId(opId) 
     259    , child2(child2) 
     260    , child3(child3) 
     261  { 
     262    if (!child1 || !child2 || !child3) 
     263      ERROR("  CFilterFieldFieldFieldOpExprNode::CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3)", 
     264            "Impossible to create the new expression node, an invalid child node was provided."); 
     265  } 
     266 
     267  boost::shared_ptr<COutputPin> CFilterFieldFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     268  { 
     269    boost::shared_ptr<CFieldFieldFieldArithmeticFilter> filter(new CFieldFieldFieldArithmeticFilter(gc, opId)); 
     270    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     271    child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     272    child3->reduce(gc, thisField)->connectOutput(filter, 2); 
     273    return filter; 
     274  } 
     275   
    122276} 
  • XIOS/dev/dev_olga/src/parse_expr/filter_expr_node.hpp

    r643 r1158  
    169169      boost::scoped_ptr<IFilterExprNode> child1, child2; //!< The field child nodes to which the operator is applied 
    170170  }; 
     171 
     172 
     173 
     174 /*! 
     175   * Expression node corresponding to a ternary operation on a scalar-scalar-field. 
     176   */ 
     177  class CFilterScalarScalarFieldOpExprNode : public IFilterExprNode 
     178  { 
     179    public: 
     180      /*! 
     181       * Constructs an expression node corresponding to the specified ternary operation 
     182       * applied to the provided fields and scalars child nodes. 
     183       * Note that the child nodes will be destroyed automatically when the parent node 
     184       * is destroyed. 
     185       * 
     186       * \param child1 the scalar child node to which the operator is applied 
     187       * \param opId the identifier of the operator 
     188       * \param child2 the scalar child node to which the operator is applied 
     189       * \param child3 the field child node to which the operator is applied 
     190      */ 
     191      CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3); 
     192 
     193      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     194 
     195    private: 
     196      std::string opId; //!< The identifier of the field 
     197      boost::scoped_ptr<IScalarExprNode> child1; //!< The scalar child node to which the operator is applied 
     198      boost::scoped_ptr<IScalarExprNode> child2; //!< The scalar child node to which the operator is applied 
     199      boost::scoped_ptr<IFilterExprNode> child3; //!< The field child node to which the operator is applied 
     200  }; 
     201 
     202 
     203  /*! 
     204   * Expression node corresponding to a ternary operation on a scalar-field-scalar. 
     205   */ 
     206  class CFilterScalarFieldScalarOpExprNode : public IFilterExprNode 
     207  { 
     208    public: 
     209      /*! 
     210       * Constructs an expression node corresponding to the specified ternary operation 
     211       * applied to the provided fields and scalars child nodes. 
     212       * Note that the child nodes will be destroyed automatically when the parent node 
     213       * is destroyed. 
     214       * 
     215       * \param child1 the scalar child node to which the operator is applied 
     216       * \param opId the identifier of the operator 
     217       * \param child2 the field child node to which the operator is applied 
     218       * \param child3 the scalar child node to which the operator is applied 
     219      */ 
     220      CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3); 
     221 
     222      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     223 
     224    private: 
     225      std::string opId; //!< The identifier of the field 
     226      boost::scoped_ptr<IScalarExprNode> child1; //!< The scalar child node to which the operator is applied 
     227      boost::scoped_ptr<IFilterExprNode> child2; //!< The field child node to which the operator is applied 
     228      boost::scoped_ptr<IScalarExprNode> child3; //!< The scalar child node to which the operator is applied 
     229  }; 
     230 
     231 
     232  /*! 
     233   * Expression node corresponding to a ternary operation on a scalar-field-field. 
     234   */ 
     235  class CFilterScalarFieldFieldOpExprNode : public IFilterExprNode 
     236  { 
     237    public: 
     238      /*! 
     239       * Constructs an expression node corresponding to the specified ternary operation 
     240       * applied to the provided fields and scalars child nodes. 
     241       * Note that the child nodes will be destroyed automatically when the parent node 
     242       * is destroyed. 
     243       * 
     244       * \param child1 the scalar child node to which the operator is applied 
     245       * \param opId the identifier of the operator 
     246       * \param child2 the field child node to which the operator is applied 
     247       * \param child3 the field child node to which the operator is applied 
     248      */ 
     249      CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3); 
     250 
     251      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     252 
     253    private: 
     254      std::string opId; //!< The identifier of the field 
     255      boost::scoped_ptr<IScalarExprNode> child1; //!< The scalar child node to which the operator is applied 
     256      boost::scoped_ptr<IFilterExprNode> child2; //!< The field child node to which the operator is applied 
     257      boost::scoped_ptr<IFilterExprNode> child3; //!< The field child node to which the operator is applied 
     258  }; 
     259 
     260 
     261 
     262/*! 
     263   * Expression node corresponding to a ternary operation on a field-scalar-scalar. 
     264   */ 
     265  class CFilterFieldScalarScalarOpExprNode : public IFilterExprNode 
     266  { 
     267    public: 
     268      /*! 
     269       * Constructs an expression node corresponding to the specified ternary operation 
     270       * applied to the provided fields and scalars child nodes. 
     271       * Note that the child nodes will be destroyed automatically when the parent node 
     272       * is destroyed. 
     273       * 
     274       * \param child1 the field child node to which the operator is applied 
     275       * \param opId the identifier of the operator 
     276       * \param child2 the scalar child node to which the operator is applied 
     277       * \param child3 the scalar child node to which the operator is applied 
     278      */ 
     279      CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3); 
     280 
     281      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     282 
     283    private: 
     284      std::string opId; //!< The identifier of the field 
     285      boost::scoped_ptr<IFilterExprNode> child1; //!< The field child node to which the operator is applied 
     286      boost::scoped_ptr<IScalarExprNode> child2; //!< The scalar child node to which the operator is applied 
     287      boost::scoped_ptr<IScalarExprNode> child3; //!< The scalar child node to which the operator is applied 
     288  }; 
     289 
     290 
     291/*! 
     292   * Expression node corresponding to a ternary operation on a field-scalar-field. 
     293   */ 
     294  class CFilterFieldScalarFieldOpExprNode : public IFilterExprNode 
     295  { 
     296    public: 
     297      /*! 
     298       * Constructs an expression node corresponding to the specified ternary operation 
     299       * applied to the provided fields and scalars child nodes. 
     300       * Note that the child nodes will be destroyed automatically when the parent node 
     301       * is destroyed. 
     302       * 
     303       * \param child1 the field child node to which the operator is applied 
     304       * \param opId the identifier of the operator 
     305       * \param child2 the scalar child node to which the operator is applied 
     306       * \param child3 the field child node to which the operator is applied 
     307      */ 
     308      CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3); 
     309 
     310      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     311 
     312    private: 
     313      std::string opId; //!< The identifier of the field 
     314      boost::scoped_ptr<IFilterExprNode> child1; //!< The field child node to which the operator is applied 
     315      boost::scoped_ptr<IScalarExprNode> child2; //!< The scalar child node to which the operator is applied 
     316      boost::scoped_ptr<IFilterExprNode> child3; //!< The field child node to which the operator is applied 
     317  }; 
     318 
     319  /*! 
     320   * Expression node corresponding to a ternary operation on a field-field-scalar. 
     321   */ 
     322  class CFilterFieldFieldScalarOpExprNode : public IFilterExprNode 
     323  { 
     324    public: 
     325      /*! 
     326       * Constructs an expression node corresponding to the specified ternary operation 
     327       * applied to the provided fields and scalars child nodes. 
     328       * Note that the child nodes will be destroyed automatically when the parent node 
     329       * is destroyed. 
     330       * 
     331       * \param child1 the field child node to which the operator is applied 
     332       * \param opId the identifier of the operator 
     333       * \param child2 the field child node to which the operator is applied 
     334       * \param child3 the scalar child node to which the operator is applied 
     335      */ 
     336      CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3); 
     337 
     338      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     339 
     340    private: 
     341      std::string opId; //!< The identifier of the field 
     342      boost::scoped_ptr<IFilterExprNode> child1; //!< The field child node to which the operator is applied 
     343      boost::scoped_ptr<IFilterExprNode> child2; //!< The field child node to which the operator is applied 
     344      boost::scoped_ptr<IScalarExprNode> child3; //!< The scalar child node to which the operator is applied 
     345  }; 
     346 
     347 
     348  /*! 
     349   * Expression node corresponding to a ternary operation on a field-field-field. 
     350   */ 
     351  class CFilterFieldFieldFieldOpExprNode : public IFilterExprNode 
     352  { 
     353    public: 
     354      /*! 
     355       * Constructs an expression node corresponding to the specified ternary operation 
     356       * applied to the provided fields and scalars child nodes. 
     357       * Note that the child nodes will be destroyed automatically when the parent node 
     358       * is destroyed. 
     359       * 
     360       * \param child1 the field child node to which the operator is applied 
     361       * \param opId the identifier of the operator 
     362       * \param child2 the field child node to which the operator is applied 
     363       * \param child3 the field child node to which the operator is applied 
     364      */ 
     365      CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3); 
     366 
     367      virtual boost::shared_ptr<COutputPin> reduce(CGarbageCollector& gc, CField& thisField) const; 
     368 
     369    private: 
     370      std::string opId; //!< The identifier of the field 
     371      boost::scoped_ptr<IFilterExprNode> child1; //!< The field child node to which the operator is applied 
     372      boost::scoped_ptr<IFilterExprNode> child2; //!< The field child node to which the operator is applied 
     373      boost::scoped_ptr<IFilterExprNode> child3; //!< The field child node to which the operator is applied 
     374  }; 
     375 
     376 
     377 
    171378} 
    172379 
  • XIOS/dev/dev_olga/src/parse_expr/generate_lex_yacc.sh

    r501 r1158  
    1 bison -d yacc_parser.yacc -o yacc_parser.cpp 
     1bison --verbose -d yacc_parser.yacc -o yacc_parser.cpp 
    22flex -o lex_parser.cpp -f lex_parser.lex  
  • XIOS/dev/dev_olga/src/parse_expr/lex_parser.cpp

    r728 r1158  
    1010#define YY_FLEX_MAJOR_VERSION 2 
    1111#define YY_FLEX_MINOR_VERSION 5 
    12 #define YY_FLEX_SUBMINOR_VERSION 39 
     12#define YY_FLEX_SUBMINOR_VERSION 37 
    1313#if YY_FLEX_SUBMINOR_VERSION > 0 
    1414#define FLEX_BETA 
     
    143143/* Size of default input buffer. */ 
    144144#ifndef YY_BUF_SIZE 
    145 #ifdef __ia64__ 
    146 /* On IA-64, the buffer size is 16k, not 8k. 
    147  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. 
    148  * Ditto for the __ia64__ case accordingly. 
    149  */ 
    150 #define YY_BUF_SIZE 32768 
    151 #else 
    152145#define YY_BUF_SIZE 16384 
    153 #endif /* __ia64__ */ 
    154146#endif 
    155147 
     
    177169 
    178170    #define YY_LESS_LINENO(n) 
    179     #define YY_LINENO_REWIND_TO(ptr) 
    180171     
    181172/* Return all but the first "n" matched characters back to the input stream. */ 
     
    356347extern char *yytext; 
    357348#define yytext_ptr yytext 
    358  
    359349static yyconst flex_int16_t yy_nxt[][128] = 
    360350    { 
     
    382372        4,    4,    5,    4,    4,    4,    6,    4,    4,    4, 
    383373        7,    8,    9,   10,    4,   11,    4,   12,   13,   13, 
    384        13,   13,   13,   13,   13,   13,   13,   13,    4,    4, 
    385        14,   15,   16,    4,   17,   18,   18,   18,   18,   18, 
    386  
    387        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    388        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    389        18,    4,    4,    4,   19,    4,    4,   18,   18,   18, 
    390        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    391        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    392        18,   18,   18,    4,    4,    4,    4,    4 
     374       13,   13,   13,   13,   13,   13,   13,   13,   14,    4, 
     375       15,   16,   17,   18,   19,   20,   20,   20,   20,   20, 
     376 
     377       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     378       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     379       20,    4,    4,    4,   21,    4,    4,   20,   20,   20, 
     380       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     381       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     382       20,   20,   20,    4,    4,    4,    4,    4 
    393383    }, 
    394384 
     
    400390 
    401391        7,    8,    9,   10,    4,   11,    4,   12,   13,   13, 
    402        13,   13,   13,   13,   13,   13,   13,   13,    4,    4, 
    403        14,   15,   16,    4,   17,   18,   18,   18,   18,   18, 
    404        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    405        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    406        18,    4,    4,    4,   19,    4,    4,   18,   18,   18, 
    407        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    408        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    409        18,   18,   18,    4,    4,    4,    4,    4 
     392       13,   13,   13,   13,   13,   13,   13,   13,   14,    4, 
     393       15,   16,   17,   18,   19,   20,   20,   20,   20,   20, 
     394       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     395       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     396       20,    4,    4,    4,   21,    4,    4,   20,   20,   20, 
     397       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     398       20,   20,   20,   20,   20,   20,   20,   20,   20,   20, 
     399       20,   20,   20,    4,    4,    4,    4,    4 
    410400    }, 
    411401 
     
    446436 
    447437    { 
    448         3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   21, 
     438        3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   23, 
    449439       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    450440       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    451        -5,   -5,   21,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
     441       -5,   -5,   23,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    452442       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    453443 
     
    470460       -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6, 
    471461       -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6, 
    472        -6,   -6,   -6,   -6,   -6,   22,   22,   22,   22,   22, 
    473        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    474        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    475        22,   -6,   -6,   -6,   -6,   -6,   -6,   22,   22,   22, 
    476        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    477        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    478  
    479        22,   22,   22,   -6,   -6,   -6,   -6,   -6 
     462       -6,   -6,   -6,   -6,   -6,   24,   24,   24,   24,   24, 
     463       24,   24,   24,   24,   24,   24,   24,   24,   24,   24, 
     464       24,   24,   24,   24,   24,   24,   24,   24,   24,   24, 
     465       24,   -6,   -6,   -6,   -6,   -6,   -6,   24,   24,   24, 
     466       24,   24,   24,   24,   24,   24,   24,   24,   24,   24, 
     467       24,   24,   24,   24,   24,   24,   24,   24,   24,   24, 
     468 
     469       24,   24,   24,   -6,   -6,   -6,   -6,   -6 
    480470    }, 
    481471 
     
    574564      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    575565      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    576       -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
     566      -12,   25,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    577567      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    578568      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
     
    589579      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    590580      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    591       -13,  -13,  -13,  -13,  -13,  -13,   23,  -13,   24,   24, 
    592        24,   24,   24,   24,   24,   24,   24,   24,  -13,  -13, 
    593       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,   25, 
     581      -13,  -13,  -13,  -13,  -13,  -13,   26,  -13,   27,   27, 
     582       27,   27,   27,   27,   27,   27,   27,   27,  -13,  -13, 
     583      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,   28, 
    594584      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    595585      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    596586      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    597       -13,   25,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
     587      -13,   28,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    598588 
    599589      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
     
    608598      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    609599      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    610       -14,   26,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
     600      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    611601      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    612602 
     
    626616 
    627617      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    628       -15,   27,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
     618      -15,   29,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    629619      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    630620      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
     
    643633      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    644634      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    645       -16,   28,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
     635      -16,   30,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    646636      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    647637      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
     
    660650      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
    661651      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
    662       -17,  -17,  -17,  -17,  -17,   29,   29,   29,   29,   29, 
    663        29,   29,   29,   29,   29,   29,   29,   29,   29,   29, 
    664        29,   29,   29,   29,   29,   29,   29,   29,   29,   29, 
    665  
    666        29,  -17,  -17,  -17,  -17,  -17,  -17,   29,   29,   29, 
    667        29,   29,   29,   29,   29,   29,   29,   29,   29,   29, 
    668        29,   29,   29,   29,   29,   29,   29,   29,   29,   29, 
    669        29,   29,   29,  -17,  -17,  -17,  -17,  -17 
     652      -17,   31,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     653      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     654      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     655 
     656      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     657      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     658      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
     659      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17 
    670660    }, 
    671661 
     
    675665      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
    676666      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
    677       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,   30,   30, 
    678        30,   30,   30,   30,   30,   30,   30,   30,  -18,  -18, 
    679  
    680       -18,  -18,  -18,  -18,  -18,   30,   30,   30,   30,   30, 
    681        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    682        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    683        30,  -18,  -18,  -18,  -18,   30,  -18,   30,   30,   30, 
    684        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    685        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    686        30,   30,   30,  -18,  -18,  -18,  -18,  -18 
     667      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     668      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     669 
     670      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     671      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     672      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     673      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     674      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     675      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
     676      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18 
    687677    }, 
    688678 
     
    695685      -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    696686      -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    697       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    698       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    699       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    700       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    701       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    702       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    703       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19 
     687      -19,  -19,  -19,  -19,  -19,   32,   32,   32,   32,   32, 
     688       32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
     689       32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
     690       32,  -19,  -19,  -19,  -19,  -19,  -19,   32,   32,   32, 
     691       32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
     692       32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
     693       32,   32,   32,  -19,  -19,  -19,  -19,  -19 
    704694 
    705695    }, 
     
    710700      -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    711701      -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    712       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    713       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    714       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    715       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    716       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    717       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    718  
    719       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    720       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    721       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20 
    722     }, 
    723  
    724     { 
    725         3,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,   21, 
     702      -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,   33,   33, 
     703       33,   33,   33,   33,   33,   33,   33,   33,  -20,  -20, 
     704      -20,  -20,  -20,  -20,  -20,   33,   33,   33,   33,   33, 
     705       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     706       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     707       33,  -20,  -20,  -20,  -20,   33,  -20,   33,   33,   33, 
     708 
     709       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     710       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     711       33,   33,   33,  -20,  -20,  -20,  -20,  -20 
     712    }, 
     713 
     714    { 
     715        3,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    726716      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    727717      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    728       -21,  -21,   21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
     718      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    729719      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    730720      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
     
    745735      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
    746736 
    747       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,   31,   31, 
    748        31,   31,   31,   31,   31,   31,   31,   31,  -22,  -22, 
    749       -22,  -22,  -22,  -22,  -22,   31,   31,   31,   31,   31, 
    750        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    751        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    752        31,  -22,  -22,  -22,  -22,   31,  -22,   31,   31,   31, 
    753        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    754        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    755        31,   31,   31,  -22,  -22,  -22,  -22,  -22 
    756     }, 
    757  
    758     { 
    759         3,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     737      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     738      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     739      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     740      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     741      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     742      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     743      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     744      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
     745      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22 
     746    }, 
     747 
     748    { 
     749        3,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,   23, 
    760750 
    761751      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    762752      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    763       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    764       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,   32,   32, 
    765        32,   32,   32,   32,   32,   32,   32,   32,  -23,  -23, 
     753      -23,  -23,   23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    766754      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    767755      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     
    769757      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    770758      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     759      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     760      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    771761 
    772762      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     
    779769      -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    780770      -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    781       -24,  -24,  -24,  -24,  -24,  -24,   23,  -24,   24,   24, 
    782        24,   24,   24,   24,   24,   24,   24,   24,  -24,  -24, 
    783       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   25, 
    784       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    785  
    786       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    787       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    788       -24,   25,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    789       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    790       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24 
     771      -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   34,   34, 
     772       34,   34,   34,   34,   34,   34,   34,   34,  -24,  -24, 
     773      -24,  -24,  -24,  -24,  -24,   34,   34,   34,   34,   34, 
     774       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     775 
     776       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     777       34,  -24,  -24,  -24,  -24,   34,  -24,   34,   34,   34, 
     778       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     779       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     780       34,   34,   34,  -24,  -24,  -24,  -24,  -24 
    791781    }, 
    792782 
     
    796786      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    797787      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    798       -25,  -25,  -25,   33,  -25,   33,  -25,  -25,   34,   34, 
    799  
    800        34,   34,   34,   34,   34,   34,   34,   34,  -25,  -25, 
     788      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     789 
     790      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    801791      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    802792      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     
    814804      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    815805      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
     806      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,   35,   35, 
     807       35,   35,   35,   35,   35,   35,   35,   35,  -26,  -26, 
    816808      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    817809      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
     
    820812      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    821813      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    822       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    823       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    824814 
    825815      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26 
     
    831821      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    832822      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
     823      -27,  -27,  -27,  -27,  -27,  -27,   26,  -27,   27,   27, 
     824       27,   27,   27,   27,   27,   27,   27,   27,  -27,  -27, 
     825      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,   28, 
    833826      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    834827      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
     828 
    835829      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    836       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    837       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    838  
    839       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    840       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
     830      -27,   28,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    841831      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    842832      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27 
     
    848838      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    849839      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    850       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    851       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
     840      -28,  -28,  -28,   36,  -28,   36,  -28,  -28,   37,   37, 
     841       37,   37,   37,   37,   37,   37,   37,   37,  -28,  -28, 
    852842 
    853843      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
     
    866856 
    867857      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
    868       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,   35,   35, 
    869        35,   35,   35,   35,   35,   35,   35,   35,  -29,  -29, 
    870       -29,  -29,  -29,  -29,  -29,   35,   35,   35,   35,   35, 
    871        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    872        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    873        35,  -29,  -29,  -29,  -29,   35,  -29,   35,   35,   35, 
    874        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    875        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    876        35,   35,   35,  -29,  -29,  -29,  -29,  -29 
     858      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     859      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     860      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     861      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     862      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     863      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     864      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     865      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29, 
     866      -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29 
    877867 
    878868    }, 
     
    883873      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
    884874      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
    885       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,   30,   30, 
    886        30,   30,   30,   30,   30,   30,   30,   30,  -30,  -30, 
    887       -30,  -30,  -30,  -30,  -30,   30,   30,   30,   30,   30, 
    888        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    889        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    890        30,  -30,  -30,  -30,  -30,   30,  -30,   30,   30,   30, 
    891  
    892        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    893        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    894        30,   30,   30,  -30,  -30,  -30,  -30,  -30 
     875      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     876      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     877      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     878      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     879      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     880      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     881 
     882      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     883      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
     884      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30 
    895885    }, 
    896886 
     
    900890      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
    901891      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
    902       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,   31,   31, 
    903        31,   31,   31,   31,   31,   31,   31,   31,  -31,  -31, 
    904       -31,  -31,  -31,  -31,  -31,   31,   31,   31,   31,   31, 
    905  
    906        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    907        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    908        31,  -31,  -31,  -31,  -31,   31,  -31,   31,   31,   31, 
    909        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    910        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    911        31,   31,   31,  -31,  -31,  -31,  -31,  -31 
     892      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     893      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     894      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     895 
     896      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     897      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     898      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     899      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     900      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
     901      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31 
    912902    }, 
    913903 
     
    918908      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    919909 
    920       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,   32,   32, 
    921        32,   32,   32,   32,   32,   32,   32,   32,  -32,  -32, 
    922       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,   25, 
    923       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    924       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    925       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    926       -32,   25,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    927       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    928       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32 
     910      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,   38,   38, 
     911       38,   38,   38,   38,   38,   38,   38,   38,  -32,  -32, 
     912      -32,  -32,  -32,  -32,  -32,   38,   38,   38,   38,   38, 
     913       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     914       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     915       38,  -32,  -32,  -32,  -32,   38,  -32,   38,   38,   38, 
     916       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     917       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     918       38,   38,   38,  -32,  -32,  -32,  -32,  -32 
    929919    }, 
    930920 
     
    935925      -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    936926      -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    937       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,   34,   34, 
    938        34,   34,   34,   34,   34,   34,   34,   34,  -33,  -33, 
    939       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    940       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    941       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    942       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    943       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    944  
    945       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33, 
    946       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33 
     927      -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,   33,   33, 
     928       33,   33,   33,   33,   33,   33,   33,   33,  -33,  -33, 
     929      -33,  -33,  -33,  -33,  -33,   33,   33,   33,   33,   33, 
     930       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     931       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     932       33,  -33,  -33,  -33,  -33,   33,  -33,   33,   33,   33, 
     933       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     934 
     935       33,   33,   33,   33,   33,   33,   33,   33,   33,   33, 
     936       33,   33,   33,  -33,  -33,  -33,  -33,  -33 
    947937    }, 
    948938 
     
    954944      -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,   34,   34, 
    955945       34,   34,   34,   34,   34,   34,   34,   34,  -34,  -34, 
    956       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    957       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    958  
    959       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    960       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    961       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    962       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    963       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34 
     946      -34,  -34,  -34,  -34,  -34,   34,   34,   34,   34,   34, 
     947       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     948 
     949       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     950       34,  -34,  -34,  -34,  -34,   34,  -34,   34,   34,   34, 
     951       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     952       34,   34,   34,   34,   34,   34,   34,   34,   34,   34, 
     953       34,   34,   34,  -34,  -34,  -34,  -34,  -34 
    964954    }, 
    965955 
     
    972962 
    973963       35,   35,   35,   35,   35,   35,   35,   35,  -35,  -35, 
    974       -35,  -35,  -35,  -35,  -35,   35,   35,   35,   35,   35, 
    975        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    976        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    977        35,  -35,  -35,  -35,  -35,   35,  -35,   35,   35,   35, 
    978        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    979        35,   35,   35,   35,   35,   35,   35,   35,   35,   35, 
    980        35,   35,   35,  -35,  -35,  -35,  -35,  -35 
     964      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,   28, 
     965      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     966      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     967      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     968      -35,   28,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     969      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     970      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35 
     971    }, 
     972 
     973    { 
     974        3,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     975      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     976 
     977      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     978      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     979      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,   37,   37, 
     980       37,   37,   37,   37,   37,   37,   37,   37,  -36,  -36, 
     981      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     982      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     983      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     984      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     985      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     986      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
     987 
     988      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36 
     989    }, 
     990 
     991    { 
     992        3,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     993      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     994      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     995      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     996      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,   37,   37, 
     997       37,   37,   37,   37,   37,   37,   37,   37,  -37,  -37, 
     998      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     999      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     1000      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     1001 
     1002      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     1003      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     1004      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
     1005      -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37 
     1006    }, 
     1007 
     1008    { 
     1009        3,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38, 
     1010      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38, 
     1011      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38, 
     1012      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38, 
     1013      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,   38,   38, 
     1014       38,   38,   38,   38,   38,   38,   38,   38,  -38,  -38, 
     1015 
     1016      -38,  -38,  -38,  -38,  -38,   38,   38,   38,   38,   38, 
     1017       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     1018       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     1019       38,  -38,  -38,  -38,  -38,   38,  -38,   38,   38,   38, 
     1020       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     1021       38,   38,   38,   38,   38,   38,   38,   38,   38,   38, 
     1022       38,   38,   38,  -38,  -38,  -38,  -38,  -38 
    9811023    }, 
    9821024 
     
    9981040        (yy_c_buf_p) = yy_cp; 
    9991041 
    1000 #define YY_NUM_RULES 19 
    1001 #define YY_END_OF_BUFFER 20 
     1042#define YY_NUM_RULES 22 
     1043#define YY_END_OF_BUFFER 23 
    10021044/* This struct is not used in this scanner, 
    10031045   but its presence is necessary. */ 
     
    10071049        flex_int32_t yy_nxt; 
    10081050        }; 
    1009 static yyconst flex_int16_t yy_accept[36] = 
     1051static yyconst flex_int16_t yy_accept[39] = 
    10101052    {   0, 
    1011         0,    0,   20,   19,    1,   19,   16,   17,    8,    6, 
    1012         7,    9,    2,   12,   19,   13,   19,    5,   10,   18, 
    1013         1,    4,    0,    2,    0,   14,   11,   15,    3,    5, 
    1014         4,    2,    0,    2,    3 
     1053        0,    0,   23,   22,    1,   22,   19,   20,    8,    6, 
     1054        7,    9,    2,   18,   12,   22,   13,   17,   22,    5, 
     1055       10,   21,    1,    4,   16,    0,    2,    0,   14,   11, 
     1056       15,    3,    5,    4,    2,    0,    2,    3 
    10151057    } ; 
    10161058 
     
    10181060static char *yy_last_accepting_cpos; 
    10191061 
    1020 static yyconst yy_state_type yy_NUL_trans[36] = 
     1062static yyconst yy_state_type yy_NUL_trans[39] = 
    10211063    {   0, 
    1022        20,   20,    0,    0,    0,    0,    0,    0,    0,    0, 
     1064       22,   22,    0,    0,    0,    0,    0,    0,    0,    0, 
    10231065        0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
    10241066        0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
    1025         0,    0,    0,    0,    0 
     1067        0,    0,    0,    0,    0,    0,    0,    0 
    10261068    } ; 
    10271069 
     
    10531095#include "yacc_parser.hpp" 
    10541096 
    1055 #line 1056 "lex_parser.cpp" 
     1097#line 1098 "lex_parser.cpp" 
    10561098 
    10571099#define INITIAL 0 
     
    11341176/* Amount of stuff to slurp up with each read. */ 
    11351177#ifndef YY_READ_BUF_SIZE 
    1136 #ifdef __ia64__ 
    1137 /* On IA-64, the buffer size is 16k, not 8k */ 
    1138 #define YY_READ_BUF_SIZE 16384 
    1139 #else 
    11401178#define YY_READ_BUF_SIZE 8192 
    1141 #endif /* __ia64__ */ 
    11421179#endif 
    11431180 
     
    12241261        register int yy_act; 
    12251262     
     1263#line 29 "lex_parser.lex" 
     1264 
     1265 
     1266#line 1267 "lex_parser.cpp" 
     1267 
    12261268        if ( !(yy_init) ) 
    12271269                { 
     
    12491291                yy_load_buffer_state( ); 
    12501292                } 
    1251  
    1252         { 
    1253 #line 29 "lex_parser.lex" 
    1254  
    1255  
    1256 #line 1257 "lex_parser.cpp" 
    12571293 
    12581294        while ( 1 )             /* loops until end-of-file is reached */ 
     
    13881424case 16: 
    13891425YY_RULE_SETUP 
    1390 #line 68 "lex_parser.lex" 
    1391 return LEFT_PARENTHESIS; 
     1426#line 67 "lex_parser.lex" 
     1427return NE; 
    13921428        YY_BREAK 
    13931429case 17: 
    13941430YY_RULE_SETUP 
    1395 #line 69 "lex_parser.lex" 
    1396 return RIGHT_PARENTHESIS; 
     1431#line 68 "lex_parser.lex" 
     1432return QUESTION_MARK; 
    13971433        YY_BREAK 
    13981434case 18: 
    13991435YY_RULE_SETUP 
    1400 #line 71 "lex_parser.lex" 
    1401 return END; 
     1436#line 69 "lex_parser.lex" 
     1437return COLON; 
    14021438        YY_BREAK 
    14031439case 19: 
    14041440YY_RULE_SETUP 
    1405 #line 72 "lex_parser.lex" 
     1441#line 70 "lex_parser.lex" 
     1442return LEFT_PARENTHESIS; 
     1443        YY_BREAK 
     1444case 20: 
     1445YY_RULE_SETUP 
     1446#line 71 "lex_parser.lex" 
     1447return RIGHT_PARENTHESIS; 
     1448        YY_BREAK 
     1449case 21: 
     1450YY_RULE_SETUP 
     1451#line 73 "lex_parser.lex" 
     1452return END; 
     1453        YY_BREAK 
     1454case 22: 
     1455YY_RULE_SETUP 
     1456#line 74 "lex_parser.lex" 
    14061457ECHO; 
    14071458        YY_BREAK 
    1408 #line 1409 "lex_parser.cpp" 
     1459#line 1460 "lex_parser.cpp" 
    14091460case YY_STATE_EOF(INITIAL): 
    14101461        yyterminate(); 
     
    15371588        } /* end of action switch */ 
    15381589                } /* end of scanning one token */ 
    1539         } /* end of user's declarations */ 
    15401590} /* end of yylex */ 
    15411591 
     
    21662216        char *buf; 
    21672217        yy_size_t n; 
    2168         yy_size_t i; 
     2218        int i; 
    21692219     
    21702220        /* Get memory for full buffer, including space for trailing EOB's. */ 
     
    23962446#define YYTABLES_NAME "yytables" 
    23972447 
    2398 #line 71 "lex_parser.lex" 
     2448#line 74 "lex_parser.lex" 
  • XIOS/dev/dev_olga/src/parse_expr/lex_parser.lex

    r728 r1158  
    6565"<=" return LE; 
    6666">=" return GE; 
    67  
     67"/=" return NE; 
     68"?" return QUESTION_MARK; 
     69":" return COLON; 
    6870"("  return LEFT_PARENTHESIS; 
    6971")"  return RIGHT_PARENTHESIS; 
  • XIOS/dev/dev_olga/src/parse_expr/operator_expr.hpp

    r728 r1158  
    1717    typedef double (*functionScalar)(double); 
    1818    typedef double (*functionScalarScalar)(double, double); 
     19    typedef double (*functionScalarScalarScalar)(double, double,double); 
    1920    typedef CArray<double,1> (*functionField)(const CArray<double,1>&); 
    2021    typedef CArray<double,1> (*functionFieldField)(const CArray<double,1>&, const CArray<double,1>&); 
    2122    typedef CArray<double,1> (*functionFieldScalar)(const CArray<double,1>&, double); 
    2223    typedef CArray<double,1> (*functionScalarField)(double, const CArray<double,1>&); 
    23  
     24    typedef CArray<double,1> (*functionScalarScalarField)(double, double, const CArray<double,1>&); 
     25    typedef CArray<double,1> (*functionScalarFieldScalar)(double, const CArray<double,1>&, double); 
     26    typedef CArray<double,1> (*functionScalarFieldField)(double, const CArray<double,1>&, const CArray<double,1>&); 
     27    typedef CArray<double,1> (*functionFieldScalarScalar)(const CArray<double,1>&, double, double); 
     28    typedef CArray<double,1> (*functionFieldScalarField)(const CArray<double,1>&, double, const CArray<double,1>&); 
     29    typedef CArray<double,1> (*functionFieldFieldScalar)(const CArray<double,1>&,  const CArray<double,1>&, double); 
     30    typedef CArray<double,1> (*functionFieldFieldField)(const CArray<double,1>&,  const CArray<double,1>&, const CArray<double,1>&); 
     31     
    2432    COperatorExpr(void) 
    2533    { 
     
    4351      opScalarScalar[string("le")] = le_ss; 
    4452      opScalarScalar[string("ge")] = ge_ss; 
    45  
     53      opScalarScalar[string("ne")] = ne_ss; 
     54      opScalarScalarScalar[string("cond")] = cond_sss; 
     55       
    4656      opField[string("neg")] = neg_f; 
    4757      opField[string("cos")] = cos_f; 
     
    6373      opFieldField[string("le")] = le_ff; 
    6474      opFieldField[string("ge")] = ge_ff; 
     75      opFieldField[string("ne")] = ne_ff; 
    6576 
    6677      opFieldScalar[string("add")] = add_fs; 
     
    7485      opFieldScalar[string("le")] = le_fs; 
    7586      opFieldScalar[string("ge")] = ge_fs; 
     87      opFieldScalar[string("ne")] = ne_fs; 
    7688 
    7789      opScalarField[string("add")] = add_sf; 
     
    8496      opScalarField[string("le")] = le_sf; 
    8597      opScalarField[string("ge")] = ge_sf; 
     98      opScalarField[string("ne")] = ne_sf; 
     99 
     100      opScalarScalarField[string("cond")] = cond_ssf; 
     101      opScalarFieldScalar[string("cond")] = cond_sfs; 
     102      opScalarFieldField[string("cond")] = cond_sff; 
     103      opFieldScalarScalar[string("cond")] = cond_fss; 
     104      opFieldScalarField[string("cond")] = cond_fsf; 
     105      opFieldFieldScalar[string("cond")] = cond_ffs; 
     106      opFieldFieldField[string("cond")] = cond_fff; 
     107 
     108 
    86109    } 
    87110 
     
    102125    } 
    103126 
     127    functionScalarScalarScalar getOpScalarScalarScalar(const string& id) 
     128    { 
     129      map<string,double (*)(double,double,double)>::iterator it; 
     130      it = opScalarScalarScalar.find(id); 
     131      if (it == opScalarScalarScalar.end()) ERROR("functionScalarScalarScalar getOpScalarScalarScalar(const string& id)", << "unknown operator : " << id) 
     132      return it->second; 
     133    } 
     134 
    104135    functionField getOpField(const string& id) 
    105136    { 
     
    134165    } 
    135166 
     167    functionScalarScalarField getOpScalarScalarField(const string& id) 
     168    { 
     169      map<string,functionScalarScalarField>::iterator it; 
     170      it = opScalarScalarField.find(id); 
     171      if (it == opScalarScalarField.end()) ERROR("functionScalarScalarField getOpScalarScalarField(const string& id)", << "unknown operator : " << id) 
     172      return it->second; 
     173    } 
     174 
     175    functionScalarFieldScalar getOpScalarFieldScalar(const string& id) 
     176    { 
     177      map<string,functionScalarFieldScalar>::iterator it; 
     178      it = opScalarFieldScalar.find(id); 
     179      if (it == opScalarFieldScalar.end()) ERROR("functionScalarFieldScalar getOpScalarScalarField(const string& id)", << "unknown operator : " << id) 
     180      return it->second; 
     181    } 
     182 
     183    functionScalarFieldField getOpScalarFieldField(const string& id) 
     184    { 
     185      map<string,functionScalarFieldField>::iterator it; 
     186      it = opScalarFieldField.find(id); 
     187      if (it == opScalarFieldField.end()) ERROR("functionScalarFieldField getOpScalarFieldField(const string& id)", << "unknown operator : " << id) 
     188      return it->second; 
     189    } 
     190 
     191    functionFieldScalarScalar getOpFieldScalarScalar(const string& id) 
     192    { 
     193      map<string,functionFieldScalarScalar>::iterator it; 
     194      it = opFieldScalarScalar.find(id); 
     195      if (it == opFieldScalarScalar.end()) ERROR("functionFieldScalarScalar getOpFieldScalarScalar(const string& id)", << "unknown operator : " << id) 
     196      return it->second; 
     197    } 
     198 
     199    functionFieldScalarField getOpFieldScalarField(const string& id) 
     200    { 
     201      map<string,functionFieldScalarField>::iterator it; 
     202      it = opFieldScalarField.find(id); 
     203      if (it == opFieldScalarField.end()) ERROR("functionFieldScalarField getOpFieldScalarField(const string& id)", << "unknown operator : " << id) 
     204      return it->second; 
     205    } 
     206 
     207    functionFieldFieldScalar getOpFieldFieldScalar(const string& id) 
     208    { 
     209      map<string,functionFieldFieldScalar>::iterator it; 
     210      it = opFieldFieldScalar.find(id); 
     211      if (it == opFieldFieldScalar.end()) ERROR("functionFieldFieldScalar getOpFieldFieldScalar(const string& id)", << "unknown operator : " << id) 
     212      return it->second; 
     213    } 
     214 
     215    functionFieldFieldField getOpFieldFieldField(const string& id) 
     216    { 
     217      map<string,functionFieldFieldField>::iterator it; 
     218      it = opFieldFieldField.find(id); 
     219      if (it == opFieldFieldField.end()) ERROR("functionFieldFieldField getOpFieldFieldField(const string& id)", << "unknown operator : " << id) 
     220      return it->second; 
     221    } 
     222     
     223     
    136224    map<string,functionScalar> opScalar; 
    137225    map<string,functionScalarScalar> opScalarScalar; 
     226    map<string,functionScalarScalarScalar> opScalarScalarScalar; 
    138227    map<string,functionField> opField; 
    139228    map<string,functionFieldField> opFieldField; 
    140229    map<string,functionFieldScalar> opFieldScalar; 
    141230    map<string,functionScalarField> opScalarField; 
     231    map<string,functionScalarScalarField> opScalarScalarField; 
     232    map<string,functionScalarFieldScalar> opScalarFieldScalar; 
     233    map<string,functionScalarFieldField> opScalarFieldField; 
     234    map<string,functionFieldScalarScalar> opFieldScalarScalar; 
     235    map<string,functionFieldScalarField> opFieldScalarField; 
     236    map<string,functionFieldFieldScalar> opFieldFieldScalar; 
     237    map<string,functionFieldFieldField> opFieldFieldField; 
     238 
     239 
    142240 
    143241    static inline double neg_s(double x)   { return -x; } 
     
    160258    static inline double le_ss(double x, double y)    { return x <= y; } 
    161259    static inline double ge_ss(double x, double y)    { return x >= y; } 
     260    static inline double ne_ss(double x, double y)    { return x != y; } 
    162261 
    163262    static inline CArray<double,1> neg_f(const CArray<double,1>& x)   { return Array<double,1>(-x); } 
     
    180279    static inline CArray<double,1> le_ff(const CArray<double,1>& x, const CArray<double,1>& y)    { return Array<double,1>(x <= y); } 
    181280    static inline CArray<double,1> ge_ff(const CArray<double,1>& x, const CArray<double,1>& y)    { return Array<double,1>(x >= y); } 
     281    static inline CArray<double,1> ne_ff(const CArray<double,1>& x, const CArray<double,1>& y)    { return Array<double,1>(x != y); } 
    182282 
    183283    static inline CArray<double,1> add_fs(const CArray<double,1>& x, double y)   { return Array<double,1>(x + y); } 
     
    191291    static inline CArray<double,1> le_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x <= y); } 
    192292    static inline CArray<double,1> ge_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x >= y); } 
     293    static inline CArray<double,1> ne_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x != y); } 
    193294 
    194295    static inline CArray<double,1> add_sf(double x, const CArray<double,1>& y)   { return Array<double,1>(x + y); } 
     
    201302    static inline CArray<double,1> le_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x <= y); } 
    202303    static inline CArray<double,1> ge_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x >= y); } 
     304    static inline CArray<double,1> ne_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x != y); } 
     305 
     306 
     307    static inline double cond_sss(double x, double y, double z)   { return (x==0) ? z : y ; } 
     308 
     309    static inline CArray<double,1> cond_ssf(double x, double y, const CArray<double,1>& z) 
     310    { 
     311      CArray<double,1> ret(z.numElements()) ; 
     312      if (x==0) ret=z ; 
     313      else ret=y ; 
     314      return ret ; 
     315    } 
     316 
     317    static inline CArray<double,1> cond_sfs(double x, const CArray<double,1>& y, double z) 
     318    { 
     319      CArray<double,1> ret(y.numElements()) ; 
     320     if (x==0) ret=z ; 
     321      else ret=y ; 
     322      return ret ; 
     323    } 
     324 
     325    static inline CArray<double,1> cond_sff(double x, const CArray<double,1>& y, const CArray<double,1>& z) 
     326    { 
     327      CArray<double,1> ret(y.numElements()) ; 
     328      if (x==0) ret=z ; 
     329      else ret=y ; 
     330      return ret ; 
     331    } 
     332     
     333    static inline CArray<double,1> cond_fss(const CArray<double,1>& x, double y, double z) 
     334    { 
     335      CArray<double,1> ret(x.numElements()) ; 
     336      Array<double,1>::const_iterator itx=x.begin(),itxe=x.end(); 
     337      Array<double,1>::iterator itret=ret.begin() ; 
     338       
     339      for(;itx!=itxe;++itx,++itret) *itret=( (*itx==0)?z:y) ; 
     340      return ret ; 
     341    } 
     342 
     343    static inline CArray<double,1> cond_fsf(const CArray<double,1>& x, double y, const CArray<double,1>& z) 
     344    { 
     345      CArray<double,1> ret(x.numElements()) ; 
     346      Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), itz=z.begin(); 
     347      Array<double,1>::iterator itret=ret.begin() ; 
     348      for(;itx!=itxe;++itx,++itz,++itret) *itret=( (*itx==0)?*itz:y) ; 
     349      return ret ; 
     350    } 
     351 
     352    static inline CArray<double,1> cond_ffs(const CArray<double,1>& x, const CArray<double,1>& y, double z) 
     353    { 
     354      CArray<double,1> ret(x.numElements()) ; 
     355      Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), ity=y.begin() ; 
     356      Array<double,1>::iterator itret=ret.begin() ; 
     357      for(;itx!=itxe;++itx,++ity,++itret) *itret=( (*itx==0)?z:*ity) ; 
     358      return ret ; 
     359    } 
     360 
     361    static inline CArray<double,1> cond_fff(const CArray<double,1>& x, const CArray<double,1>& y, const CArray<double,1>&  z) 
     362    { 
     363      CArray<double,1> ret(x.numElements()) ; 
     364      Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), ity=y.begin(), itz=z.begin() ; 
     365      Array<double,1>::iterator itret=ret.begin() ; 
     366      for(;itx!=itxe;++itx,++ity,++itz,++itret) *itret=( (*itx==0)?*itz:*ity) ; 
     367      return ret ; 
     368    } 
     369 
    203370  }; 
    204371 
  • XIOS/dev/dev_olga/src/parse_expr/scalar_expr_node.cpp

    r642 r1158  
    2323  double CScalarVarExprNode::reduce() const 
    2424  { 
    25     if (!CVariable::has(varId))  
    26       ERROR("double CScalarVarExprNode::reduce() const", << "The variable " << varId << " does not exist."); 
     25    // $missing_value will be replaced with NaN 
     26    if (varId == "missing_value") 
     27    { 
     28      return std::numeric_limits<double>::quiet_NaN(); 
     29    } 
     30    else 
     31    { 
     32      if (!CVariable::has(varId))  
     33        ERROR("double CScalarVarExprNode::reduce() const", << "The variable " << varId << " does not exist."); 
    2734 
    28     return CVariable::get(varId)->getData<double>(); 
     35      return CVariable::get(varId)->getData<double>(); 
     36    } 
    2937  } 
    3038 
     
    5967    return op(child1->reduce(), child2->reduce()); 
    6068  } 
     69 
     70 
     71  CScalarTernaryOpExprNode::CScalarTernaryOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3) 
     72    : child1(child1) 
     73    , opId(opId) 
     74    , child2(child2) 
     75    , child3(child3) 
     76  { 
     77    if (!child1 || !child2 || !child3) 
     78      ERROR("CScalarTernaryOpExprNode::CScalarTernaryOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3)", 
     79            "Impossible to create the new expression node, an invalid child node was provided."); 
     80  } 
     81 
     82  double CScalarTernaryOpExprNode::reduce() const 
     83  { 
     84    COperatorExpr::functionScalarScalarScalar op = operatorExpr.getOpScalarScalarScalar(opId); 
     85    return op(child1->reduce(), child2->reduce(), child3->reduce()); 
     86  } 
    6187} 
  • XIOS/dev/dev_olga/src/parse_expr/scalar_expr_node.hpp

    r642 r1158  
    107107      boost::scoped_ptr<IScalarExprNode> child1, child2; //!< The scalar child nodes to which the operator is applied 
    108108  }; 
     109 
     110    class CScalarTernaryOpExprNode : public IScalarExprNode 
     111  { 
     112    public: 
     113      /*! 
     114       * Constructs an expression node corresponding to the specified ternary operation 
     115       * applied to the provided scalar child nodes. 
     116       * Note that the child nodes will be destroyed automatically when the parent node 
     117       * is destroyed. 
     118       * 
     119       * \param opId the identifier of the operator 
     120       * \param child1, child2 , child3 the scalar child nodes to which the operator is applied 
     121       */ 
     122      CScalarTernaryOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3); 
     123 
     124      double reduce() const; 
     125 
     126    private: 
     127      std::string opId; //!< The identifier of the field 
     128      boost::scoped_ptr<IScalarExprNode> child1, child2, child3; //!< The scalar child nodes to which the operator is applied 
     129  }; 
    109130} 
    110131 
  • XIOS/dev/dev_olga/src/parse_expr/yacc_parser.cpp

    r728 r1158  
    145145    LE = 270, 
    146146    GE = 271, 
    147     LEFT_PARENTHESIS = 272, 
    148     RIGHT_PARENTHESIS = 273, 
    149     END = 274, 
    150     NEG = 275 
     147    NE = 272, 
     148    LEFT_PARENTHESIS = 273, 
     149    RIGHT_PARENTHESIS = 274, 
     150    QUESTION_MARK = 275, 
     151    COLON = 276, 
     152    END = 277, 
     153    NEG = 278 
    151154  }; 
    152155#endif 
     
    163166  xios::IFilterExprNode* filterNode; 
    164167 
    165 #line 166 "yacc_parser.cpp" /* yacc.c:355  */ 
     168#line 169 "yacc_parser.cpp" /* yacc.c:355  */ 
    166169}; 
    167170# define YYSTYPE_IS_TRIVIAL 1 
     
    178181/* Copy the second part of user declarations.  */ 
    179182 
    180 #line 181 "yacc_parser.cpp" /* yacc.c:358  */ 
     183#line 184 "yacc_parser.cpp" /* yacc.c:358  */ 
    181184 
    182185#ifdef short 
     
    420423#define YYFINAL  16 
    421424/* YYLAST -- Last index in YYTABLE.  */ 
    422 #define YYLAST   204 
     425#define YYLAST   371 
    423426 
    424427/* YYNTOKENS -- Number of terminals.  */ 
    425 #define YYNTOKENS  21 
     428#define YYNTOKENS  24 
    426429/* YYNNTS -- Number of nonterminals.  */ 
    427430#define YYNNTS  4 
    428431/* YYNRULES -- Number of rules.  */ 
    429 #define YYNRULES  52 
     432#define YYNRULES  64 
    430433/* YYNSTATES -- Number of states.  */ 
    431 #define YYNSTATES  108 
     434#define YYNSTATES  138 
    432435 
    433436/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned 
    434437   by yylex, with out-of-bounds checking.  */ 
    435438#define YYUNDEFTOK  2 
    436 #define YYMAXUTOK   275 
     439#define YYMAXUTOK   278 
    437440 
    438441#define YYTRANSLATE(YYX)                                                \ 
     
    470473       2,     2,     2,     2,     2,     2,     1,     2,     3,     4, 
    471474       5,     6,     7,     8,     9,    10,    11,    12,    13,    14, 
    472       15,    16,    17,    18,    19,    20 
     475      15,    16,    17,    18,    19,    20,    21,    22,    23 
    473476}; 
    474477 
     
    477480static const yytype_uint8 yyrline[] = 
    478481{ 
    479        0,    61,    61,    62,    66,    67,    68,    69,    70,    71, 
    480       72,    73,    74,    75,    76,    77,    78,    79,    80,    84, 
    481       85,    86,    87,    88,    89,    90,    91,    92,    93,    94, 
    482       95,    96,    97,    98,    99,   100,   101,   102,   103,   104, 
    483      105,   106,   107,   108,   109,   110,   111,   112,   113,   114, 
    484      115,   116,   117 
     482       0,    63,    63,    64,    68,    69,    70,    71,    72,    73, 
     483      74,    75,    76,    77,    78,    79,    80,    81,    82,    83, 
     484      84,    88,    89,    90,    91,    92,    93,    94,    95,    96, 
     485      97,    98,    99,   100,   101,   102,   103,   104,   105,   106, 
     486     107,   108,   109,   110,   111,   112,   113,   114,   115,   116, 
     487     117,   118,   119,   120,   121,   122,   123,   124,   125,   126, 
     488     127,   128,   129,   130,   131 
    485489}; 
    486490#endif 
     
    492496{ 
    493497  "$end", "error", "$undefined", "NUMBER", "VAR", "ID", "AVERAGE", "PLUS", 
    494   "MINUS", "TIMES", "DIVIDE", "POWER", "EQ", "LT", "GT", "LE", "GE", 
    495   "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "END", "NEG", "$accept", "Line", 
    496   "Expression", "Field_expr", YY_NULLPTR 
     498  "MINUS", "TIMES", "DIVIDE", "POWER", "EQ", "LT", "GT", "LE", "GE", "NE", 
     499  "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "QUESTION_MARK", "COLON", "END", 
     500  "NEG", "$accept", "Line", "Expression", "Field_expr", YY_NULLPTR 
    497501}; 
    498502#endif 
     
    505509       0,   256,   257,   258,   259,   260,   261,   262,   263,   264, 
    506510     265,   266,   267,   268,   269,   270,   271,   272,   273,   274, 
    507      275 
     511     275,   276,   277,   278 
    508512}; 
    509513# endif 
    510514 
    511 #define YYPACT_NINF -13 
     515#define YYPACT_NINF -14 
    512516 
    513517#define yypact_value_is_default(Yystate) \ 
    514   (!!((Yystate) == (-13))) 
     518  (!!((Yystate) == (-14))) 
    515519 
    516520#define YYTABLE_NINF -1 
    517521 
    518522#define yytable_value_is_error(Yytable_value) \ 
    519   0 
     523  (!!((Yytable_value) == (-1))) 
    520524 
    521525  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 
     
    523527static const yytype_int16 yypact[] = 
    524528{ 
    525       90,   -13,   -13,   -12,   -13,    35,    35,   -13,    44,   188, 
    526      103,    35,    24,    34,   116,   128,   -13,    35,    35,    35, 
    527       35,    65,    35,    35,    35,    35,    35,    35,    35,    35, 
    528       35,    35,    35,    35,    35,    35,    35,   -13,   140,   152, 
    529      -13,   -13,    -7,    23,    -7,    23,    24,    34,    24,    34, 
    530       54,    65,    65,    24,     0,    67,     0,    67,     0,    67, 
    531        0,    67,     0,    67,    -7,    23,    -7,    23,    24,    34, 
    532       24,    34,    24,    34,     0,    67,     0,    67,     0,    67, 
    533        0,    67,     0,    67,   -13,   -13,    65,    24,   164,    65, 
    534       65,    65,    65,    65,    65,    65,    65,    65,   176,    95, 
    535       95,    24,    24,    92,    92,    92,    92,    92 
     529      73,   -14,   -14,   -13,   -14,   124,   124,   -14,    39,   304, 
     530     104,   124,    34,    36,   220,   234,   -14,   124,   124,   124, 
     531     124,   133,   124,   124,   124,   124,   124,   124,   124,   124, 
     532     124,   124,   124,   124,   124,   124,   124,   124,   124,   124, 
     533     124,   -14,   248,   262,   -14,   -14,    -7,    27,    -7,    27, 
     534      34,    36,    34,    36,    30,   133,   133,    34,     0,    75, 
     535       0,    75,     0,    75,     0,    75,     0,    75,     0,    75, 
     536     145,   160,    -7,    27,    -7,    27,    34,    36,    34,    36, 
     537      34,    36,     0,    75,     0,    75,     0,    75,     0,    75, 
     538       0,    75,     0,    75,   175,   190,   -14,   -14,   133,    34, 
     539     276,   133,   133,   133,   133,   133,   133,   133,   133,   133, 
     540     133,   133,   124,   124,   124,   124,   290,    33,    33,    34, 
     541      34,   360,   360,   360,   360,   360,   360,   205,   318,   332, 
     542     318,   332,   318,   332,   318,   332,   133,   346 
    536543}; 
    537544 
     
    541548static const yytype_uint8 yydefact[] = 
    542549{ 
    543        0,     4,     5,    19,    20,     0,     0,     2,     0,     0, 
    544        0,     0,    10,    25,     0,     0,     1,     0,     0,     0, 
     550       0,     4,     5,    21,    22,     0,     0,     2,     0,     0, 
     551       0,     0,    10,    27,     0,     0,     1,     0,     0,     0, 
    545552       0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 
    546        0,     0,     0,     0,     0,     0,     0,     3,     0,     0, 
    547       17,    32,     6,    34,     7,    36,     8,    38,     9,    40, 
    548        0,     0,     0,    11,    12,    43,    13,    45,    14,    47, 
    549       15,    49,    16,    51,    33,    21,    35,    22,    37,    23, 
    550       39,    24,    41,    26,    42,    27,    44,    28,    46,    29, 
    551       48,    30,    50,    31,    18,    52,     0,    10,     0,     0, 
    552        0,     0,     0,     0,     0,     0,     0,     0,     0,     6, 
    553        7,     8,     9,    12,    13,    14,    15,    16 
     553       0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 
     554       0,     3,     0,     0,    19,    35,     6,    44,     7,    46, 
     555       8,    48,     9,    50,     0,     0,     0,    11,    12,    53, 
     556      13,    55,    14,    57,    15,    59,    16,    61,    17,    63, 
     557       0,     0,    43,    23,    45,    24,    47,    25,    49,    26, 
     558      51,    28,    52,    29,    54,    30,    56,    31,    58,    32, 
     559      60,    33,    62,    34,     0,     0,    20,    64,     0,    10, 
     560       0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 
     561       0,     0,     0,     0,     0,     0,     0,     6,     7,     8, 
     562       9,    12,    13,    14,    15,    16,    17,     0,    18,    36, 
     563      37,    38,    39,    40,    41,    42,     0,    18 
    554564}; 
    555565 
     
    557567static const yytype_int8 yypgoto[] = 
    558568{ 
    559      -13,   -13,    -5,    31 
     569     -14,   -14,    -5,    35 
    560570}; 
    561571 
     
    569579     positive, shift that token.  If negative, reduce the rule whose 
    570580     number is the opposite.  If YYTABLE_NINF, syntax error.  */ 
    571 static const yytype_uint8 yytable[] = 
    572 { 
    573       12,    14,    19,    20,    21,    11,    38,    17,    18,    19, 
    574       20,    21,    42,    44,    46,    48,    53,    54,    56,    58, 
    575       60,    62,    64,    66,    68,    70,    72,    74,    76,    78, 
    576       80,    82,    29,    30,    31,    21,    13,    15,     1,     2, 
    577        3,     4,    39,     5,    16,    31,    87,    88,    43,    45, 
    578       47,    49,     6,    55,    57,    59,    61,    63,    65,    67, 
    579       69,    71,    73,    75,    77,    79,    81,    83,     1,     2, 
    580       50,    86,     0,    51,    27,    28,    29,    30,    31,     0, 
    581        0,    98,    52,     0,    99,   100,   101,   102,   103,   104, 
    582      105,   106,   107,     1,     2,     3,     4,     0,     5,    89, 
    583       90,    91,    92,    21,    91,    92,    21,     6,     0,     7, 
    584       27,    28,    29,    30,    31,    32,    33,    34,    35,    36, 
    585        0,     0,    37,    17,    18,    19,    20,    21,    22,    23, 
    586       24,    25,    26,     0,    40,    27,    28,    29,    30,    31, 
    587       32,    33,    34,    35,    36,     0,    41,    17,    18,    19, 
    588       20,    21,    22,    23,    24,    25,    26,     0,    84,    27, 
    589       28,    29,    30,    31,    32,    33,    34,    35,    36,     0, 
    590       85,    89,    90,    91,    92,    21,    93,    94,    95,    96, 
    591       97,     0,    40,    89,    90,    91,    92,    21,    93,    94, 
    592       95,    96,    97,     0,    84,    17,    18,    19,    20,    21, 
    593       22,    23,    24,    25,    26 
     581static const yytype_int16 yytable[] = 
     582{ 
     583      12,    14,    19,    20,    21,    11,    42,    17,    18,    19, 
     584      20,    21,    46,    48,    50,    52,    57,    58,    60,    62, 
     585      64,    66,    68,    70,    72,    74,    76,    78,    80,    82, 
     586      84,    86,    88,    90,    92,    94,    31,    32,    33,    16, 
     587      13,    15,   103,   104,    21,    21,    43,    33,    98,     0, 
     588      99,   100,    47,    49,    51,    53,     0,    59,    61,    63, 
     589      65,    67,    69,    71,    73,    75,    77,    79,    81,    83, 
     590      85,    87,    89,    91,    93,    95,     1,     2,     3,     4, 
     591       0,     5,    29,    30,    31,    32,    33,     0,     0,     0, 
     592       0,     6,     0,   116,     0,     7,   117,   118,   119,   120, 
     593     121,   122,   123,   124,   125,   126,   127,   128,   130,   132, 
     594     134,    29,    30,    31,    32,    33,    34,    35,    36,    37, 
     595      38,    39,     0,     0,    40,     0,    41,     1,     2,     3, 
     596       4,   137,     5,     0,     0,     0,     1,     2,    54,     0, 
     597       0,    55,     6,     0,     0,     0,     0,   129,   131,   133, 
     598     135,    56,    17,    18,    19,    20,    21,    22,    23,    24, 
     599      25,    26,    27,     0,     0,    28,   112,    29,    30,    31, 
     600      32,    33,    34,    35,    36,    37,    38,    39,     0,     0, 
     601      40,   113,    17,    18,    19,    20,    21,    22,    23,    24, 
     602      25,    26,    27,     0,     0,    28,   114,    29,    30,    31, 
     603      32,    33,    34,    35,    36,    37,    38,    39,     0,     0, 
     604      40,   115,   101,   102,   103,   104,    21,   105,   106,   107, 
     605     108,   109,   110,     0,     0,   111,   136,    17,    18,    19, 
     606      20,    21,    22,    23,    24,    25,    26,    27,     0,    44, 
     607      28,    29,    30,    31,    32,    33,    34,    35,    36,    37, 
     608      38,    39,     0,    45,    40,    17,    18,    19,    20,    21, 
     609      22,    23,    24,    25,    26,    27,     0,    96,    28,    29, 
     610      30,    31,    32,    33,    34,    35,    36,    37,    38,    39, 
     611       0,    97,    40,   101,   102,   103,   104,    21,   105,   106, 
     612     107,   108,   109,   110,     0,    44,   111,   101,   102,   103, 
     613     104,    21,   105,   106,   107,   108,   109,   110,     0,    96, 
     614     111,    17,    18,    19,    20,    21,    22,    23,    24,    25, 
     615      26,    27,     0,     0,    28,    17,    18,    19,    20,    21, 
     616      22,    23,    24,    25,    26,    27,     0,     0,    -1,    29, 
     617      30,    31,    32,    33,    34,    35,    36,    37,    38,    39, 
     618       0,     0,    -1,   101,   102,   103,   104,    21,   105,   106, 
     619     107,   108,   109,   110,     0,     0,    -1,   101,   102,   103, 
     620     104,    21 
    594621}; 
    595622 
    596 static const yytype_int8 yycheck[] = 
    597 { 
    598        5,     6,     9,    10,    11,    17,    11,     7,     8,     9, 
     623static const yytype_int16 yycheck[] = 
     624{ 
     625       5,     6,     9,    10,    11,    18,    11,     7,     8,     9, 
    599626      10,    11,    17,    18,    19,    20,    21,    22,    23,    24, 
    600627      25,    26,    27,    28,    29,    30,    31,    32,    33,    34, 
    601       35,    36,     9,    10,    11,    11,     5,     6,     3,     4, 
    602        5,     6,    11,     8,     0,    11,    51,    52,    17,    18, 
    603       19,    20,    17,    22,    23,    24,    25,    26,    27,    28, 
    604       29,    30,    31,    32,    33,    34,    35,    36,     3,     4, 
    605        5,    17,    -1,     8,     7,     8,     9,    10,    11,    -1, 
    606       -1,    86,    17,    -1,    89,    90,    91,    92,    93,    94, 
    607       95,    96,    97,     3,     4,     5,     6,    -1,     8,     7, 
    608        8,     9,    10,    11,     9,    10,    11,    17,    -1,    19, 
    609        7,     8,     9,    10,    11,    12,    13,    14,    15,    16, 
    610       -1,    -1,    19,     7,     8,     9,    10,    11,    12,    13, 
    611       14,    15,    16,    -1,    18,     7,     8,     9,    10,    11, 
    612       12,    13,    14,    15,    16,    -1,    18,     7,     8,     9, 
    613       10,    11,    12,    13,    14,    15,    16,    -1,    18,     7, 
    614        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1, 
    615       18,     7,     8,     9,    10,    11,    12,    13,    14,    15, 
    616       16,    -1,    18,     7,     8,     9,    10,    11,    12,    13, 
    617       14,    15,    16,    -1,    18,     7,     8,     9,    10,    11, 
    618       12,    13,    14,    15,    16 
     628      35,    36,    37,    38,    39,    40,     9,    10,    11,     0, 
     629       5,     6,     9,    10,    11,    11,    11,    11,    18,    -1, 
     630      55,    56,    17,    18,    19,    20,    -1,    22,    23,    24, 
     631      25,    26,    27,    28,    29,    30,    31,    32,    33,    34, 
     632      35,    36,    37,    38,    39,    40,     3,     4,     5,     6, 
     633      -1,     8,     7,     8,     9,    10,    11,    -1,    -1,    -1, 
     634      -1,    18,    -1,    98,    -1,    22,   101,   102,   103,   104, 
     635     105,   106,   107,   108,   109,   110,   111,   112,   113,   114, 
     636     115,     7,     8,     9,    10,    11,    12,    13,    14,    15, 
     637      16,    17,    -1,    -1,    20,    -1,    22,     3,     4,     5, 
     638       6,   136,     8,    -1,    -1,    -1,     3,     4,     5,    -1, 
     639      -1,     8,    18,    -1,    -1,    -1,    -1,   112,   113,   114, 
     640     115,    18,     7,     8,     9,    10,    11,    12,    13,    14, 
     641      15,    16,    17,    -1,    -1,    20,    21,     7,     8,     9, 
     642      10,    11,    12,    13,    14,    15,    16,    17,    -1,    -1, 
     643      20,    21,     7,     8,     9,    10,    11,    12,    13,    14, 
     644      15,    16,    17,    -1,    -1,    20,    21,     7,     8,     9, 
     645      10,    11,    12,    13,    14,    15,    16,    17,    -1,    -1, 
     646      20,    21,     7,     8,     9,    10,    11,    12,    13,    14, 
     647      15,    16,    17,    -1,    -1,    20,    21,     7,     8,     9, 
     648      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19, 
     649      20,     7,     8,     9,    10,    11,    12,    13,    14,    15, 
     650      16,    17,    -1,    19,    20,     7,     8,     9,    10,    11, 
     651      12,    13,    14,    15,    16,    17,    -1,    19,    20,     7, 
     652       8,     9,    10,    11,    12,    13,    14,    15,    16,    17, 
     653      -1,    19,    20,     7,     8,     9,    10,    11,    12,    13, 
     654      14,    15,    16,    17,    -1,    19,    20,     7,     8,     9, 
     655      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19, 
     656      20,     7,     8,     9,    10,    11,    12,    13,    14,    15, 
     657      16,    17,    -1,    -1,    20,     7,     8,     9,    10,    11, 
     658      12,    13,    14,    15,    16,    17,    -1,    -1,    20,     7, 
     659       8,     9,    10,    11,    12,    13,    14,    15,    16,    17, 
     660      -1,    -1,    20,     7,     8,     9,    10,    11,    12,    13, 
     661      14,    15,    16,    17,    -1,    -1,    20,     7,     8,     9, 
     662      10,    11 
    619663}; 
    620664 
     
    623667static const yytype_uint8 yystos[] = 
    624668{ 
    625        0,     3,     4,     5,     6,     8,    17,    19,    22,    23, 
    626       24,    17,    23,    24,    23,    24,     0,     7,     8,     9, 
    627       10,    11,    12,    13,    14,    15,    16,     7,     8,     9, 
    628       10,    11,    12,    13,    14,    15,    16,    19,    23,    24, 
    629       18,    18,    23,    24,    23,    24,    23,    24,    23,    24, 
    630        5,     8,    17,    23,    23,    24,    23,    24,    23,    24, 
    631       23,    24,    23,    24,    23,    24,    23,    24,    23,    24, 
    632       23,    24,    23,    24,    23,    24,    23,    24,    23,    24, 
    633       23,    24,    23,    24,    18,    18,    17,    23,    23,     7, 
    634        8,     9,    10,    12,    13,    14,    15,    16,    23,    23, 
    635       23,    23,    23,    23,    23,    23,    23,    23 
     669       0,     3,     4,     5,     6,     8,    18,    22,    25,    26, 
     670      27,    18,    26,    27,    26,    27,     0,     7,     8,     9, 
     671      10,    11,    12,    13,    14,    15,    16,    17,    20,     7, 
     672       8,     9,    10,    11,    12,    13,    14,    15,    16,    17, 
     673      20,    22,    26,    27,    19,    19,    26,    27,    26,    27, 
     674      26,    27,    26,    27,     5,     8,    18,    26,    26,    27, 
     675      26,    27,    26,    27,    26,    27,    26,    27,    26,    27, 
     676      26,    27,    26,    27,    26,    27,    26,    27,    26,    27, 
     677      26,    27,    26,    27,    26,    27,    26,    27,    26,    27, 
     678      26,    27,    26,    27,    26,    27,    19,    19,    18,    26, 
     679      26,     7,     8,     9,    10,    12,    13,    14,    15,    16, 
     680      17,    20,    21,    21,    21,    21,    26,    26,    26,    26, 
     681      26,    26,    26,    26,    26,    26,    26,    26,    26,    27, 
     682      26,    27,    26,    27,    26,    27,    21,    26 
    636683}; 
    637684 
     
    639686static const yytype_uint8 yyr1[] = 
    640687{ 
    641        0,    21,    22,    22,    23,    23,    23,    23,    23,    23, 
    642       23,    23,    23,    23,    23,    23,    23,    23,    23,    24, 
    643       24,    24,    24,    24,    24,    24,    24,    24,    24,    24, 
    644       24,    24,    24,    24,    24,    24,    24,    24,    24,    24, 
    645       24,    24,    24,    24,    24,    24,    24,    24,    24,    24, 
    646       24,    24,    24 
     688       0,    24,    25,    25,    26,    26,    26,    26,    26,    26, 
     689      26,    26,    26,    26,    26,    26,    26,    26,    26,    26, 
     690      26,    27,    27,    27,    27,    27,    27,    27,    27,    27, 
     691      27,    27,    27,    27,    27,    27,    27,    27,    27,    27, 
     692      27,    27,    27,    27,    27,    27,    27,    27,    27,    27, 
     693      27,    27,    27,    27,    27,    27,    27,    27,    27,    27, 
     694      27,    27,    27,    27,    27 
    647695}; 
    648696 
     
    651699{ 
    652700       0,     2,     1,     2,     1,     1,     3,     3,     3,     3, 
    653        2,     3,     3,     3,     3,     3,     3,     3,     4,     1, 
    654        1,     3,     3,     3,     3,     2,     3,     3,     3,     3, 
     701       2,     3,     3,     3,     3,     3,     3,     3,     5,     3, 
     702       4,     1,     1,     3,     3,     3,     3,     2,     3,     3, 
     703       3,     3,     3,     3,     3,     3,     5,     5,     5,     5, 
     704       5,     5,     5,     3,     3,     3,     3,     3,     3,     3, 
    655705       3,     3,     3,     3,     3,     3,     3,     3,     3,     3, 
    656        3,     3,     3,     3,     3,     3,     3,     3,     3,     3, 
    657        3,     3,     4 
     706       3,     3,     3,     3,     4 
    658707}; 
    659708 
     
    13321381    { 
    13331382        case 2: 
    1334 #line 61 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1383#line 63 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13351384    { /* Nothing to do */ } 
    1336 #line 1337 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1385#line 1386 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13371386    break; 
    13381387 
    13391388  case 3: 
    1340 #line 62 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1389#line 64 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13411390    { parsed = (yyvsp[-1].filterNode); } 
    1342 #line 1343 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1391#line 1392 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13431392    break; 
    13441393 
    13451394  case 4: 
    1346 #line 66 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1395#line 68 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13471396    { (yyval.scalarNode) = new CScalarValExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
    1348 #line 1349 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1397#line 1398 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13491398    break; 
    13501399 
    13511400  case 5: 
    1352 #line 67 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1401#line 69 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13531402    { (yyval.scalarNode) = new CScalarVarExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
    1354 #line 1355 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1403#line 1404 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13551404    break; 
    13561405 
    13571406  case 6: 
    1358 #line 68 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1407#line 70 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13591408    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "add", (yyvsp[0].scalarNode)); } 
    1360 #line 1361 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1409#line 1410 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13611410    break; 
    13621411 
    13631412  case 7: 
    1364 #line 69 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1413#line 71 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13651414    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "minus", (yyvsp[0].scalarNode)); } 
    1366 #line 1367 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1415#line 1416 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13671416    break; 
    13681417 
    13691418  case 8: 
    1370 #line 70 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1419#line 72 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13711420    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "mult", (yyvsp[0].scalarNode)); } 
    1372 #line 1373 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1421#line 1422 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13731422    break; 
    13741423 
    13751424  case 9: 
    1376 #line 71 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1425#line 73 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13771426    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "div", (yyvsp[0].scalarNode)); } 
    1378 #line 1379 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1427#line 1428 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13791428    break; 
    13801429 
    13811430  case 10: 
    1382 #line 72 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1431#line 74 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13831432    { (yyval.scalarNode) = new CScalarUnaryOpExprNode("neg", (yyvsp[0].scalarNode)); } 
    1384 #line 1385 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1433#line 1434 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13851434    break; 
    13861435 
    13871436  case 11: 
    1388 #line 73 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1437#line 75 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13891438    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "pow", (yyvsp[0].scalarNode)); } 
    1390 #line 1391 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1439#line 1440 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13911440    break; 
    13921441 
    13931442  case 12: 
    1394 #line 74 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1443#line 76 "yacc_parser.yacc" /* yacc.c:1646  */ 
    13951444    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "eq", (yyvsp[0].scalarNode)); } 
    1396 #line 1397 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1445#line 1446 "yacc_parser.cpp" /* yacc.c:1646  */ 
    13971446    break; 
    13981447 
    13991448  case 13: 
    1400 #line 75 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1449#line 77 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14011450    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "lt", (yyvsp[0].scalarNode)); } 
    1402 #line 1403 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1451#line 1452 "yacc_parser.cpp" /* yacc.c:1646  */ 
    14031452    break; 
    14041453 
    14051454  case 14: 
    1406 #line 76 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1455#line 78 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14071456    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "gt", (yyvsp[0].scalarNode)); } 
    1408 #line 1409 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1457#line 1458 "yacc_parser.cpp" /* yacc.c:1646  */ 
    14091458    break; 
    14101459 
    14111460  case 15: 
    1412 #line 77 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1461#line 79 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14131462    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "le", (yyvsp[0].scalarNode)); } 
    1414 #line 1415 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1463#line 1464 "yacc_parser.cpp" /* yacc.c:1646  */ 
    14151464    break; 
    14161465 
    14171466  case 16: 
    1418 #line 78 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1467#line 80 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14191468    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "ge", (yyvsp[0].scalarNode)); } 
    1420 #line 1421 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1469#line 1470 "yacc_parser.cpp" /* yacc.c:1646  */ 
    14211470    break; 
    14221471 
    14231472  case 17: 
    1424 #line 79 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1473#line 81 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1474    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "ne", (yyvsp[0].scalarNode)); } 
     1475#line 1476 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1476    break; 
     1477 
     1478  case 18: 
     1479#line 82 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1480    {(yyval.scalarNode) = new CScalarTernaryOpExprNode((yyvsp[-4].scalarNode), "cond", (yyvsp[-2].scalarNode), (yyvsp[0].scalarNode));} 
     1481#line 1482 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1482    break; 
     1483 
     1484  case 19: 
     1485#line 83 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14251486    { (yyval.scalarNode) = (yyvsp[-1].scalarNode); } 
    1426 #line 1427 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1427     break; 
    1428  
    1429   case 18: 
    1430 #line 80 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1487#line 1488 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1488    break; 
     1489 
     1490  case 20: 
     1491#line 84 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14311492    { (yyval.scalarNode) = new CScalarUnaryOpExprNode(*(yyvsp[-3].str), (yyvsp[-1].scalarNode)); delete (yyvsp[-3].str); } 
    1432 #line 1433 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1433     break; 
    1434  
    1435   case 19: 
    1436 #line 84 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1493#line 1494 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1494    break; 
     1495 
     1496  case 21: 
     1497#line 88 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14371498    { (yyval.filterNode) = new CFilterFieldExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
    1438 #line 1439 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1439     break; 
    1440  
    1441   case 20: 
    1442 #line 85 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1499#line 1500 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1500    break; 
     1501 
     1502  case 22: 
     1503#line 89 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14431504    { (yyval.filterNode) = new CFilterTemporalFieldExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
    1444 #line 1445 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1445     break; 
    1446  
    1447   case 21: 
    1448 #line 86 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1505#line 1506 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1506    break; 
     1507 
     1508  case 23: 
     1509#line 90 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14491510    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "add", (yyvsp[0].filterNode)); } 
    1450 #line 1451 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1451     break; 
    1452  
    1453   case 22: 
    1454 #line 87 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1511#line 1512 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1512    break; 
     1513 
     1514  case 24: 
     1515#line 91 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14551516    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "minus", (yyvsp[0].filterNode)); } 
    1456 #line 1457 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1457     break; 
    1458  
    1459   case 23: 
    1460 #line 88 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1517#line 1518 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1518    break; 
     1519 
     1520  case 25: 
     1521#line 92 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14611522    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "mult", (yyvsp[0].filterNode)); } 
    1462 #line 1463 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1463     break; 
    1464  
    1465   case 24: 
    1466 #line 89 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1523#line 1524 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1524    break; 
     1525 
     1526  case 26: 
     1527#line 93 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14671528    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "div", (yyvsp[0].filterNode)); } 
    1468 #line 1469 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1469     break; 
    1470  
    1471   case 25: 
    1472 #line 90 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1529#line 1530 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1530    break; 
     1531 
     1532  case 27: 
     1533#line 94 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14731534    { (yyval.filterNode) = new CFilterUnaryOpExprNode("neg", (yyvsp[0].filterNode)); } 
    1474 #line 1475 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1475     break; 
    1476  
    1477   case 26: 
    1478 #line 91 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1535#line 1536 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1536    break; 
     1537 
     1538  case 28: 
     1539#line 95 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14791540    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "pow", (yyvsp[0].filterNode)); } 
    1480 #line 1481 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1481     break; 
    1482  
    1483   case 27: 
    1484 #line 92 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1541#line 1542 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1542    break; 
     1543 
     1544  case 29: 
     1545#line 96 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14851546    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "eq", (yyvsp[0].filterNode)); } 
    1486 #line 1487 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1487     break; 
    1488  
    1489   case 28: 
    1490 #line 93 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1547#line 1548 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1548    break; 
     1549 
     1550  case 30: 
     1551#line 97 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14911552    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "lt", (yyvsp[0].filterNode)); } 
    1492 #line 1493 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1493     break; 
    1494  
    1495   case 29: 
    1496 #line 94 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1553#line 1554 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1554    break; 
     1555 
     1556  case 31: 
     1557#line 98 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14971558    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "gt", (yyvsp[0].filterNode)); } 
    1498 #line 1499 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1499     break; 
    1500  
    1501   case 30: 
    1502 #line 95 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1559#line 1560 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1560    break; 
     1561 
     1562  case 32: 
     1563#line 99 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15031564    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "le", (yyvsp[0].filterNode)); } 
    1504 #line 1505 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1505     break; 
    1506  
    1507   case 31: 
    1508 #line 96 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1565#line 1566 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1566    break; 
     1567 
     1568  case 33: 
     1569#line 100 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15091570    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "ge", (yyvsp[0].filterNode)); } 
    1510 #line 1511 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1511     break; 
    1512  
    1513   case 32: 
    1514 #line 97 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1571#line 1572 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1572    break; 
     1573 
     1574  case 34: 
     1575#line 101 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1576    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "ne", (yyvsp[0].filterNode)); } 
     1577#line 1578 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1578    break; 
     1579 
     1580  case 35: 
     1581#line 102 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15151582    { (yyval.filterNode) = (yyvsp[-1].filterNode); } 
    1516 #line 1517 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1517     break; 
    1518  
    1519   case 33: 
    1520 #line 98 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1583#line 1584 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1584    break; 
     1585 
     1586  case 36: 
     1587#line 103 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1588    {(yyval.filterNode) = new CFilterScalarScalarFieldOpExprNode((yyvsp[-4].scalarNode), "cond",(yyvsp[-2].scalarNode), (yyvsp[0].filterNode));} 
     1589#line 1590 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1590    break; 
     1591 
     1592  case 37: 
     1593#line 104 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1594    {(yyval.filterNode) = new CFilterScalarFieldScalarOpExprNode((yyvsp[-4].scalarNode), "cond",(yyvsp[-2].filterNode), (yyvsp[0].scalarNode));} 
     1595#line 1596 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1596    break; 
     1597 
     1598  case 38: 
     1599#line 105 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1600    {(yyval.filterNode) = new CFilterScalarFieldFieldOpExprNode((yyvsp[-4].scalarNode), "cond",(yyvsp[-2].filterNode), (yyvsp[0].filterNode));} 
     1601#line 1602 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1602    break; 
     1603 
     1604  case 39: 
     1605#line 106 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1606    {(yyval.filterNode) = new CFilterFieldScalarScalarOpExprNode((yyvsp[-4].filterNode), "cond",(yyvsp[-2].scalarNode), (yyvsp[0].scalarNode));} 
     1607#line 1608 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1608    break; 
     1609 
     1610  case 40: 
     1611#line 107 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1612    {(yyval.filterNode) = new CFilterFieldScalarFieldOpExprNode((yyvsp[-4].filterNode), "cond",(yyvsp[-2].scalarNode), (yyvsp[0].filterNode));} 
     1613#line 1614 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1614    break; 
     1615 
     1616  case 41: 
     1617#line 108 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1618    {(yyval.filterNode) = new CFilterFieldFieldScalarOpExprNode((yyvsp[-4].filterNode), "cond",(yyvsp[-2].filterNode), (yyvsp[0].scalarNode));} 
     1619#line 1620 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1620    break; 
     1621 
     1622  case 42: 
     1623#line 109 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1624    {(yyval.filterNode) = new CFilterFieldFieldFieldOpExprNode((yyvsp[-4].filterNode), "cond",(yyvsp[-2].filterNode), (yyvsp[0].filterNode));} 
     1625#line 1626 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1626    break; 
     1627 
     1628  case 43: 
     1629#line 110 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15211630    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "add", (yyvsp[0].scalarNode)); } 
    1522 #line 1523 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1523     break; 
    1524  
    1525   case 34: 
    1526 #line 99 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1631#line 1632 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1632    break; 
     1633 
     1634  case 44: 
     1635#line 111 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15271636    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "add", (yyvsp[0].filterNode)); } 
    1528 #line 1529 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1529     break; 
    1530  
    1531   case 35: 
    1532 #line 100 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1637#line 1638 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1638    break; 
     1639 
     1640  case 45: 
     1641#line 112 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15331642    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "minus", (yyvsp[0].scalarNode)); } 
    1534 #line 1535 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1535     break; 
    1536  
    1537   case 36: 
    1538 #line 101 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1643#line 1644 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1644    break; 
     1645 
     1646  case 46: 
     1647#line 113 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15391648    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "minus", (yyvsp[0].filterNode)); } 
    1540 #line 1541 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1541     break; 
    1542  
    1543   case 37: 
    1544 #line 102 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1649#line 1650 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1650    break; 
     1651 
     1652  case 47: 
     1653#line 114 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15451654    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "mult", (yyvsp[0].scalarNode)); } 
    1546 #line 1547 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1547     break; 
    1548  
    1549   case 38: 
    1550 #line 103 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1655#line 1656 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1656    break; 
     1657 
     1658  case 48: 
     1659#line 115 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15511660    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "mult", (yyvsp[0].filterNode)); } 
    1552 #line 1553 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1553     break; 
    1554  
    1555   case 39: 
    1556 #line 104 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1661#line 1662 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1662    break; 
     1663 
     1664  case 49: 
     1665#line 116 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15571666    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "div", (yyvsp[0].scalarNode)); } 
    1558 #line 1559 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1559     break; 
    1560  
    1561   case 40: 
    1562 #line 105 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1667#line 1668 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1668    break; 
     1669 
     1670  case 50: 
     1671#line 117 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15631672    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "div", (yyvsp[0].filterNode)); } 
    1564 #line 1565 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1565     break; 
    1566  
    1567   case 41: 
    1568 #line 106 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1673#line 1674 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1674    break; 
     1675 
     1676  case 51: 
     1677#line 118 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15691678    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "pow", (yyvsp[0].scalarNode)); } 
    1570 #line 1571 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1571     break; 
    1572  
    1573   case 42: 
    1574 #line 107 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1679#line 1680 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1680    break; 
     1681 
     1682  case 52: 
     1683#line 119 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15751684    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "eq", (yyvsp[0].scalarNode)); } 
    1576 #line 1577 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1577     break; 
    1578  
    1579   case 43: 
    1580 #line 108 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1685#line 1686 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1686    break; 
     1687 
     1688  case 53: 
     1689#line 120 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15811690    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "eq", (yyvsp[0].filterNode)); } 
    1582 #line 1583 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1583     break; 
    1584  
    1585   case 44: 
    1586 #line 109 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1691#line 1692 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1692    break; 
     1693 
     1694  case 54: 
     1695#line 121 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15871696    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "lt", (yyvsp[0].scalarNode)); } 
    1588 #line 1589 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1589     break; 
    1590  
    1591   case 45: 
    1592 #line 110 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1697#line 1698 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1698    break; 
     1699 
     1700  case 55: 
     1701#line 122 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15931702    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "lt", (yyvsp[0].filterNode)); } 
    1594 #line 1595 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1595     break; 
    1596  
    1597   case 46: 
    1598 #line 111 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1703#line 1704 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1704    break; 
     1705 
     1706  case 56: 
     1707#line 123 "yacc_parser.yacc" /* yacc.c:1646  */ 
    15991708    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "gt", (yyvsp[0].scalarNode)); } 
    1600 #line 1601 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1601     break; 
    1602  
    1603   case 47: 
    1604 #line 112 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1709#line 1710 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1710    break; 
     1711 
     1712  case 57: 
     1713#line 124 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16051714    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "gt", (yyvsp[0].filterNode)); } 
    1606 #line 1607 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1607     break; 
    1608  
    1609   case 48: 
    1610 #line 113 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1715#line 1716 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1716    break; 
     1717 
     1718  case 58: 
     1719#line 125 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16111720    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "le", (yyvsp[0].scalarNode)); } 
    1612 #line 1613 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1613     break; 
    1614  
    1615   case 49: 
    1616 #line 114 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1721#line 1722 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1722    break; 
     1723 
     1724  case 59: 
     1725#line 126 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16171726    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "le", (yyvsp[0].filterNode)); } 
    1618 #line 1619 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1619     break; 
    1620  
    1621   case 50: 
    1622 #line 115 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1727#line 1728 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1728    break; 
     1729 
     1730  case 60: 
     1731#line 127 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16231732    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "ge", (yyvsp[0].scalarNode)); } 
    1624 #line 1625 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1625     break; 
    1626  
    1627   case 51: 
    1628 #line 116 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1733#line 1734 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1734    break; 
     1735 
     1736  case 61: 
     1737#line 128 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16291738    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "ge", (yyvsp[0].filterNode)); } 
    1630 #line 1631 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1631     break; 
    1632  
    1633   case 52: 
    1634 #line 117 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1739#line 1740 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1740    break; 
     1741 
     1742  case 62: 
     1743#line 129 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1744    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "ne", (yyvsp[0].scalarNode)); } 
     1745#line 1746 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1746    break; 
     1747 
     1748  case 63: 
     1749#line 130 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1750    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "ne", (yyvsp[0].filterNode)); } 
     1751#line 1752 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1752    break; 
     1753 
     1754  case 64: 
     1755#line 131 "yacc_parser.yacc" /* yacc.c:1646  */ 
    16351756    { (yyval.filterNode) = new CFilterUnaryOpExprNode(*(yyvsp[-3].str), (yyvsp[-1].filterNode)); delete (yyvsp[-3].str); } 
    1636 #line 1637 "yacc_parser.cpp" /* yacc.c:1646  */ 
    1637     break; 
    1638  
    1639  
    1640 #line 1641 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1757#line 1758 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1758    break; 
     1759 
     1760 
     1761#line 1762 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16411762      default: break; 
    16421763    } 
     
    18661987  return yyresult; 
    18671988} 
    1868 #line 119 "yacc_parser.yacc" /* yacc.c:1906  */ 
     1989#line 133 "yacc_parser.yacc" /* yacc.c:1906  */ 
    18691990 
    18701991 
  • XIOS/dev/dev_olga/src/parse_expr/yacc_parser.hpp

    r728 r1158  
    6060    LE = 270, 
    6161    GE = 271, 
    62     LEFT_PARENTHESIS = 272, 
    63     RIGHT_PARENTHESIS = 273, 
    64     END = 274, 
    65     NEG = 275 
     62    NE = 272, 
     63    LEFT_PARENTHESIS = 273, 
     64    RIGHT_PARENTHESIS = 274, 
     65    QUESTION_MARK = 275, 
     66    COLON = 276, 
     67    END = 277, 
     68    NEG = 278 
    6669  }; 
    6770#endif 
     
    7881  xios::IFilterExprNode* filterNode; 
    7982 
    80 #line 81 "yacc_parser.hpp" /* yacc.c:1909  */ 
     83#line 84 "yacc_parser.hpp" /* yacc.c:1909  */ 
    8184}; 
    8285# define YYSTYPE_IS_TRIVIAL 1 
  • XIOS/dev/dev_olga/src/parse_expr/yacc_parser.yacc

    r728 r1158  
    4242%token <str> VAR ID AVERAGE 
    4343%token PLUS MINUS TIMES DIVIDE POWER 
    44 %token EQ LT GT LE GE 
     44%token EQ LT GT LE GE NE 
    4545%token LEFT_PARENTHESIS RIGHT_PARENTHESIS 
     46%token QUESTION_MARK COLON 
    4647%token <str> END 
    4748 
    48 %left EQ LT GT LE GE 
     49%nonassoc QUESTION_MARK COLON 
     50%left EQ LT GT LE GE NE 
    4951%left PLUS MINUS 
    5052%left TIMES DIVIDE 
     
    7779          | Expression LE Expression  { $$ = new CScalarBinaryOpExprNode($1, "le", $3); } 
    7880          | Expression GE Expression  { $$ = new CScalarBinaryOpExprNode($1, "ge", $3); } 
     81          | Expression NE Expression  { $$ = new CScalarBinaryOpExprNode($1, "ne", $3); } 
     82          | Expression QUESTION_MARK Expression COLON Expression {$$ = new CScalarTernaryOpExprNode($1, "cond", $3, $5);}  
    7983          | LEFT_PARENTHESIS Expression RIGHT_PARENTHESIS    { $$ = $2; } 
    8084          | ID LEFT_PARENTHESIS Expression RIGHT_PARENTHESIS { $$ = new CScalarUnaryOpExprNode(*$1, $3); delete $1; } 
     
    9599          | Field_expr LE Field_expr { $$ = new CFilterFieldFieldOpExprNode($1, "le", $3); } 
    96100          | Field_expr GE Field_expr { $$ = new CFilterFieldFieldOpExprNode($1, "ge", $3); } 
     101          | Field_expr NE Field_expr { $$ = new CFilterFieldFieldOpExprNode($1, "ne", $3); } 
    97102          | LEFT_PARENTHESIS Field_expr RIGHT_PARENTHESIS       { $$ = $2; } 
     103          | Expression QUESTION_MARK Expression COLON Field_expr {$$ = new CFilterScalarScalarFieldOpExprNode($1, "cond",$3, $5);} 
     104          | Expression QUESTION_MARK Field_expr COLON Expression {$$ = new CFilterScalarFieldScalarOpExprNode($1, "cond",$3, $5);} 
     105          | Expression QUESTION_MARK Field_expr COLON Field_expr {$$ = new CFilterScalarFieldFieldOpExprNode($1, "cond",$3, $5);} 
     106          | Field_expr QUESTION_MARK Expression COLON Expression {$$ = new CFilterFieldScalarScalarOpExprNode($1, "cond",$3, $5);} 
     107          | Field_expr QUESTION_MARK Expression COLON Field_expr {$$ = new CFilterFieldScalarFieldOpExprNode($1, "cond",$3, $5);} 
     108          | Field_expr QUESTION_MARK Field_expr COLON Expression {$$ = new CFilterFieldFieldScalarOpExprNode($1, "cond",$3, $5);} 
     109          | Field_expr QUESTION_MARK Field_expr COLON Field_expr {$$ = new CFilterFieldFieldFieldOpExprNode($1, "cond",$3, $5);} 
    98110          | Field_expr PLUS Expression   { $$ = new CFilterFieldScalarOpExprNode($1, "add", $3); } 
    99111          | Expression PLUS Field_expr   { $$ = new CFilterScalarFieldOpExprNode($1, "add", $3); } 
     
    115127          | Field_expr GE Expression { $$ = new CFilterFieldScalarOpExprNode($1, "ge", $3); } 
    116128          | Expression GE Field_expr { $$ = new CFilterScalarFieldOpExprNode($1, "ge", $3); } 
     129          | Field_expr NE Expression { $$ = new CFilterFieldScalarOpExprNode($1, "ne", $3); } 
     130          | Expression NE Field_expr { $$ = new CFilterScalarFieldOpExprNode($1, "ne", $3); } 
    117131          | ID LEFT_PARENTHESIS Field_expr RIGHT_PARENTHESIS { $$ = new CFilterUnaryOpExprNode(*$1, $3); delete $1; } 
    118132          ; 
Note: See TracChangeset for help on using the changeset viewer.