Changeset 1038


Ignore:
Timestamp:
01/30/17 16:33:03 (7 years ago)
Author:
ymipsl
Message:
  • Add generic ternary arithmetic operators and filters
  • Add conditional operator "(cond) ? x : y" for arithmetic filters.

YM

Location:
XIOS/trunk/src
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/parse_expr/filter_expr_node.cpp

    r1001 r1038  
    22#include "unary_arithmetic_filter.hpp" 
    33#include "binary_arithmetic_filter.hpp" 
     4#include "ternary_arithmetic_filter.hpp" 
    45#include "field.hpp" 
    56 
     
    129130    return filter; 
    130131  } 
     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   
    131276} 
  • XIOS/trunk/src/parse_expr/filter_expr_node.hpp

    r643 r1038  
    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/trunk/src/parse_expr/generate_lex_yacc.sh

    r501 r1038  
    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/trunk/src/parse_expr/lex_parser.cpp

    r1019 r1038  
    372372        4,    4,    5,    4,    4,    4,    6,    4,    4,    4, 
    373373        7,    8,    9,   10,    4,   11,    4,   12,   13,   13, 
    374        13,   13,   13,   13,   13,   13,   13,   13,    4,    4, 
    375        14,   15,   16,    4,   17,   18,   18,   18,   18,   18, 
    376  
    377        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    378        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    379        18,    4,    4,    4,   19,    4,    4,   18,   18,   18, 
    380        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    381        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    382        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 
    383383    }, 
    384384 
     
    390390 
    391391        7,    8,    9,   10,    4,   11,    4,   12,   13,   13, 
    392        13,   13,   13,   13,   13,   13,   13,   13,    4,    4, 
    393        14,   15,   16,    4,   17,   18,   18,   18,   18,   18, 
    394        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    395        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    396        18,    4,    4,    4,   19,    4,    4,   18,   18,   18, 
    397        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    398        18,   18,   18,   18,   18,   18,   18,   18,   18,   18, 
    399        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 
    400400    }, 
    401401 
     
    436436 
    437437    { 
    438         3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   21, 
     438        3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   23, 
    439439       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    440440       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    441        -5,   -5,   21,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
     441       -5,   -5,   23,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    442442       -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5, 
    443443 
     
    460460       -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6, 
    461461       -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6, 
    462        -6,   -6,   -6,   -6,   -6,   22,   22,   22,   22,   22, 
    463        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    464        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    465        22,   -6,   -6,   -6,   -6,   -6,   -6,   22,   22,   22, 
    466        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    467        22,   22,   22,   22,   22,   22,   22,   22,   22,   22, 
    468  
    469        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 
    470470    }, 
    471471 
     
    564564      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    565565      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    566       -12,   23,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
     566      -12,   25,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    567567      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
    568568      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12, 
     
    579579      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    580580      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    581       -13,  -13,  -13,  -13,  -13,  -13,   24,  -13,   25,   25, 
    582        25,   25,   25,   25,   25,   25,   25,   25,  -13,  -13, 
    583       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,   26, 
     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, 
    584584      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    585585      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    586586      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    587       -13,   26,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
     587      -13,   28,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
    588588 
    589589      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13, 
     
    598598      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    599599      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    600       -14,   27,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
     600      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    601601      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14, 
    602602 
     
    616616 
    617617      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    618       -15,   28,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
     618      -15,   29,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    619619      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
    620620      -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15, 
     
    633633      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    634634      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    635       -16,   29,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
     635      -16,   30,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    636636      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
    637637      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
     
    650650      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
    651651      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17, 
    652       -17,  -17,  -17,  -17,  -17,   30,   30,   30,   30,   30, 
    653        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    654        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    655  
    656        30,  -17,  -17,  -17,  -17,  -17,  -17,   30,   30,   30, 
    657        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    658        30,   30,   30,   30,   30,   30,   30,   30,   30,   30, 
    659        30,   30,   30,  -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 
    660660    }, 
    661661 
     
    665665      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
    666666      -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18, 
    667       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,   31,   31, 
    668        31,   31,   31,   31,   31,   31,   31,   31,  -18,  -18, 
    669  
    670       -18,  -18,  -18,  -18,  -18,   31,   31,   31,   31,   31, 
    671        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    672        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    673        31,  -18,  -18,  -18,  -18,   31,  -18,   31,   31,   31, 
    674        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    675        31,   31,   31,   31,   31,   31,   31,   31,   31,   31, 
    676        31,   31,   31,  -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 
    677677    }, 
    678678 
     
    685685      -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    686686      -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    687       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    688       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    689       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    690       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    691       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    692       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
    693       -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 
    694694 
    695695    }, 
     
    700700      -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    701701      -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    702       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    703       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    704       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    705       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    706       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    707       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    708  
    709       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    710       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20, 
    711       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20 
    712     }, 
    713  
    714     { 
    715         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, 
    716716      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    717717      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    718       -21,  -21,   21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
     718      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    719719      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
    720720      -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21, 
     
    735735      -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22, 
    736736 
    737       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,   32,   32, 
    738        32,   32,   32,   32,   32,   32,   32,   32,  -22,  -22, 
    739       -22,  -22,  -22,  -22,  -22,   32,   32,   32,   32,   32, 
    740        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    741        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    742        32,  -22,  -22,  -22,  -22,   32,  -22,   32,   32,   32, 
    743        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    744        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    745        32,   32,   32,  -22,  -22,  -22,  -22,  -22 
    746     }, 
    747  
    748     { 
    749         3,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    750  
     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, 
     750 
     751      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     752      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     753      -23,  -23,   23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    751754      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    752755      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     
    756759      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    757760      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
    758       -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, 
    761761 
    762762      -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23, 
     
    769769      -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    770770      -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    771       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   33,   33, 
    772        33,   33,   33,   33,   33,   33,   33,   33,  -24,  -24, 
    773       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    774       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    775  
    776       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    777       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    778       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    779       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24, 
    780       -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 
    781781    }, 
    782782 
     
    786786      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    787787      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    788       -25,  -25,  -25,  -25,  -25,  -25,   24,  -25,   25,   25, 
    789  
    790        25,   25,   25,   25,   25,   25,   25,   25,  -25,  -25, 
    791       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,   26, 
     788      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     789 
    792790      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    793791      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    794792      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    795       -25,   26,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     793      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     794      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
     795      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    796796      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
    797797      -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25 
     
    804804      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    805805      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
    806       -26,  -26,  -26,   34,  -26,   34,  -26,  -26,   35,   35, 
     806      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,   35,   35, 
    807807       35,   35,   35,   35,   35,   35,   35,   35,  -26,  -26, 
    808808      -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26, 
     
    821821      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    822822      -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, 
    823826      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    824827      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
     828 
    825829      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    826       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    827       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    828  
    829       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    830       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
     830      -27,   28,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    831831      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27, 
    832832      -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27 
     
    838838      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    839839      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    840       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
    841       -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, 
    842842 
    843843      -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
     
    873873      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
    874874      -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30, 
    875       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,   36,   36, 
    876        36,   36,   36,   36,   36,   36,   36,   36,  -30,  -30, 
    877       -30,  -30,  -30,  -30,  -30,   36,   36,   36,   36,   36, 
    878        36,   36,   36,   36,   36,   36,   36,   36,   36,   36, 
    879        36,   36,   36,   36,   36,   36,   36,   36,   36,   36, 
    880        36,  -30,  -30,  -30,  -30,   36,  -30,   36,   36,   36, 
    881  
    882        36,   36,   36,   36,   36,   36,   36,   36,   36,   36, 
    883        36,   36,   36,   36,   36,   36,   36,   36,   36,   36, 
    884        36,   36,   36,  -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 
    885885    }, 
    886886 
     
    890890      -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31, 
    891891      -31,  -31,  -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 
     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 
    902902    }, 
    903903 
     
    908908      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32, 
    909909 
    910       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,   32,   32, 
    911        32,   32,   32,   32,   32,   32,   32,   32,  -32,  -32, 
    912       -32,  -32,  -32,  -32,  -32,   32,   32,   32,   32,   32, 
    913        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    914        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    915        32,  -32,  -32,  -32,  -32,   32,  -32,   32,   32,   32, 
    916        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    917        32,   32,   32,   32,   32,   32,   32,   32,   32,   32, 
    918        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 
    919919    }, 
    920920 
     
    927927      -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,   33,   33, 
    928928       33,   33,   33,   33,   33,   33,   33,   33,  -33,  -33, 
    929       -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,   26, 
    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,   26,  -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 
     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 
    937937    }, 
    938938 
     
    942942      -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    943943      -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34, 
    944       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,   35,   35, 
    945        35,   35,   35,   35,   35,   35,   35,   35,  -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 
     944      -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,   34,   34, 
     945       34,   34,   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 
    954954    }, 
    955955 
     
    962962 
    963963       35,   35,   35,   35,   35,   35,   35,   35,  -35,  -35, 
     964      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,   28, 
    964965      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    965966      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    966967      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    967       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    968       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
     968      -35,   28,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    969969      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35, 
    970970      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35 
     
    977977      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
    978978      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
    979       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,   36,   36, 
    980        36,   36,   36,   36,   36,   36,   36,   36,  -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 
     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 
    9891023    }, 
    9901024 
     
    10061040        (yy_c_buf_p) = yy_cp; 
    10071041 
    1008 #define YY_NUM_RULES 20 
    1009 #define YY_END_OF_BUFFER 21 
     1042#define YY_NUM_RULES 22 
     1043#define YY_END_OF_BUFFER 23 
    10101044/* This struct is not used in this scanner, 
    10111045   but its presence is necessary. */ 
     
    10151049        flex_int32_t yy_nxt; 
    10161050        }; 
    1017 static yyconst flex_int16_t yy_accept[37] = 
     1051static yyconst flex_int16_t yy_accept[39] = 
    10181052    {   0, 
    1019         0,    0,   21,   20,    1,   20,   17,   18,    8,    6, 
    1020         7,    9,    2,   12,   20,   13,   20,    5,   10,   19, 
    1021         1,    4,   16,    0,    2,    0,   14,   11,   15,    3, 
    1022         5,    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 
    10231057    } ; 
    10241058 
     
    10261060static char *yy_last_accepting_cpos; 
    10271061 
    1028 static yyconst yy_state_type yy_NUL_trans[37] = 
     1062static yyconst yy_state_type yy_NUL_trans[39] = 
    10291063    {   0, 
    1030        20,   20,    0,    0,    0,    0,    0,    0,    0,    0, 
     1064       22,   22,    0,    0,    0,    0,    0,    0,    0,    0, 
    10311065        0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
    10321066        0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
    1033         0,    0,    0,    0,    0,    0 
     1067        0,    0,    0,    0,    0,    0,    0,    0 
    10341068    } ; 
    10351069 
     
    10611095#include "yacc_parser.hpp" 
    10621096 
    1063 #line 1064 "lex_parser.cpp" 
     1097#line 1098 "lex_parser.cpp" 
    10641098 
    10651099#define INITIAL 0 
     
    12301264 
    12311265 
    1232 #line 1233 "lex_parser.cpp" 
     1266#line 1267 "lex_parser.cpp" 
    12331267 
    12341268        if ( !(yy_init) ) 
     
    13951429case 17: 
    13961430YY_RULE_SETUP 
    1397 #line 69 "lex_parser.lex" 
    1398 return LEFT_PARENTHESIS; 
     1431#line 68 "lex_parser.lex" 
     1432return QUESTION_MARK; 
    13991433        YY_BREAK 
    14001434case 18: 
    14011435YY_RULE_SETUP 
    1402 #line 70 "lex_parser.lex" 
    1403 return RIGHT_PARENTHESIS; 
     1436#line 69 "lex_parser.lex" 
     1437return COLON; 
    14041438        YY_BREAK 
    14051439case 19: 
    14061440YY_RULE_SETUP 
    1407 #line 72 "lex_parser.lex" 
    1408 return END; 
     1441#line 70 "lex_parser.lex" 
     1442return LEFT_PARENTHESIS; 
    14091443        YY_BREAK 
    14101444case 20: 
    14111445YY_RULE_SETUP 
     1446#line 71 "lex_parser.lex" 
     1447return RIGHT_PARENTHESIS; 
     1448        YY_BREAK 
     1449case 21: 
     1450YY_RULE_SETUP 
    14121451#line 73 "lex_parser.lex" 
     1452return END; 
     1453        YY_BREAK 
     1454case 22: 
     1455YY_RULE_SETUP 
     1456#line 74 "lex_parser.lex" 
    14131457ECHO; 
    14141458        YY_BREAK 
    1415 #line 1416 "lex_parser.cpp" 
     1459#line 1460 "lex_parser.cpp" 
    14161460case YY_STATE_EOF(INITIAL): 
    14171461        yyterminate(); 
     
    21722216        char *buf; 
    21732217        yy_size_t n; 
    2174         yy_size_t i; 
     2218        int i; 
    21752219     
    21762220        /* Get memory for full buffer, including space for trailing EOB's. */ 
     
    24022446#define YYTABLES_NAME "yytables" 
    24032447 
    2404 #line 73 "lex_parser.lex" 
     2448#line 74 "lex_parser.lex" 
  • XIOS/trunk/src/parse_expr/lex_parser.lex

    r1019 r1038  
    6666">=" return GE; 
    6767"/=" return NE; 
    68  
     68"?" return QUESTION_MARK; 
     69":" return COLON; 
    6970"("  return LEFT_PARENTHESIS; 
    7071")"  return RIGHT_PARENTHESIS; 
  • XIOS/trunk/src/parse_expr/operator_expr.hpp

    r1019 r1038  
    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    { 
     
    4452      opScalarScalar[string("ge")] = ge_ss; 
    4553      opScalarScalar[string("ne")] = ne_ss; 
    46  
     54      opScalarScalarScalar[string("cond")] = cond_sss; 
     55       
    4756      opField[string("neg")] = neg_f; 
    4857      opField[string("cos")] = cos_f; 
     
    8897      opScalarField[string("ge")] = ge_sf; 
    8998      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 
    90109    } 
    91110 
     
    106125    } 
    107126 
     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 
    108135    functionField getOpField(const string& id) 
    109136    { 
     
    138165    } 
    139166 
     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     
    140224    map<string,functionScalar> opScalar; 
    141225    map<string,functionScalarScalar> opScalarScalar; 
     226    map<string,functionScalarScalarScalar> opScalarScalarScalar; 
    142227    map<string,functionField> opField; 
    143228    map<string,functionFieldField> opFieldField; 
    144229    map<string,functionFieldScalar> opFieldScalar; 
    145230    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 
    146240 
    147241    static inline double neg_s(double x)   { return -x; } 
     
    209303    static inline CArray<double,1> ge_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x >= y); } 
    210304    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 
    211370  }; 
    212371 
  • XIOS/trunk/src/parse_expr/scalar_expr_node.cpp

    r1020 r1038  
    6767    return op(child1->reduce(), child2->reduce()); 
    6868  } 
     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  } 
    6987} 
  • XIOS/trunk/src/parse_expr/scalar_expr_node.hpp

    r642 r1038  
    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/trunk/src/parse_expr/yacc_parser.cpp

    r1019 r1038  
    1 /* A Bison parser, made by GNU Bison 2.7.  */ 
     1/* A Bison parser, made by GNU Bison 3.0.2.  */ 
    22 
    33/* Bison implementation for Yacc-like parsers in C 
    4     
    5       Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. 
    6     
     4 
     5   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. 
     6 
    77   This program is free software: you can redistribute it and/or modify 
    88   it under the terms of the GNU General Public License as published by 
    99   the Free Software Foundation, either version 3 of the License, or 
    1010   (at your option) any later version. 
    11     
     11 
    1212   This program is distributed in the hope that it will be useful, 
    1313   but WITHOUT ANY WARRANTY; without even the implied warranty of 
    1414   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1515   GNU General Public License for more details. 
    16     
     16 
    1717   You should have received a copy of the GNU General Public License 
    1818   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
     
    2727   Bison output files to be licensed under the GNU General Public 
    2828   License without this special exception. 
    29     
     29 
    3030   This special exception was added by the Free Software Foundation in 
    3131   version 2.2 of Bison.  */ 
     
    4545 
    4646/* Bison version.  */ 
    47 #define YYBISON_VERSION "2.7" 
     47#define YYBISON_VERSION "3.0.2" 
    4848 
    4949/* Skeleton name.  */ 
     
    6363 
    6464/* Copy the first part of user declarations.  */ 
    65 /* Line 371 of yacc.c  */ 
    66 #line 1 "yacc_parser.yacc" 
     65#line 1 "yacc_parser.yacc" /* yacc.c:339  */ 
    6766 
    6867#include "filter_expr_node.hpp" 
     
    9796  } 
    9897 
    99 /* Line 371 of yacc.c  */ 
    100 #line 101 "yacc_parser.cpp" 
    101  
    102 # ifndef YY_NULL 
     98#line 99 "yacc_parser.cpp" /* yacc.c:339  */ 
     99 
     100# ifndef YY_NULLPTR 
    103101#  if defined __cplusplus && 201103L <= __cplusplus 
    104 #   define YY_NULL nullptr 
     102#   define YY_NULLPTR nullptr 
    105103#  else 
    106 #   define YY_NULL 0 
     104#   define YY_NULLPTR 0 
    107105#  endif 
    108106# endif 
     
    120118#ifndef YY_YY_YACC_PARSER_HPP_INCLUDED 
    121119# define YY_YY_YACC_PARSER_HPP_INCLUDED 
    122 /* Enabling traces.  */ 
     120/* Debug traces.  */ 
    123121#ifndef YYDEBUG 
    124122# define YYDEBUG 0 
     
    128126#endif 
    129127 
    130 /* Tokens.  */ 
     128/* Token type.  */ 
    131129#ifndef YYTOKENTYPE 
    132130# define YYTOKENTYPE 
    133    /* Put the tokens into the symbol table, so that GDB and other debuggers 
    134       know about them.  */ 
    135    enum yytokentype { 
    136      NUMBER = 258, 
    137      VAR = 259, 
    138      ID = 260, 
    139      AVERAGE = 261, 
    140      PLUS = 262, 
    141      MINUS = 263, 
    142      TIMES = 264, 
    143      DIVIDE = 265, 
    144      POWER = 266, 
    145      EQ = 267, 
    146      LT = 268, 
    147      GT = 269, 
    148      LE = 270, 
    149      GE = 271, 
    150      NE = 272, 
    151      LEFT_PARENTHESIS = 273, 
    152      RIGHT_PARENTHESIS = 274, 
    153      END = 275, 
    154      NEG = 276 
    155    }; 
    156 #endif 
    157  
    158  
     131  enum yytokentype 
     132  { 
     133    NUMBER = 258, 
     134    VAR = 259, 
     135    ID = 260, 
     136    AVERAGE = 261, 
     137    PLUS = 262, 
     138    MINUS = 263, 
     139    TIMES = 264, 
     140    DIVIDE = 265, 
     141    POWER = 266, 
     142    EQ = 267, 
     143    LT = 268, 
     144    GT = 269, 
     145    LE = 270, 
     146    GE = 271, 
     147    NE = 272, 
     148    LEFT_PARENTHESIS = 273, 
     149    RIGHT_PARENTHESIS = 274, 
     150    QUESTION_MARK = 275, 
     151    COLON = 276, 
     152    END = 277, 
     153    NEG = 278 
     154  }; 
     155#endif 
     156 
     157/* Value type.  */ 
    159158#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 
    160 typedef union YYSTYPE 
    161 { 
    162 /* Line 387 of yacc.c  */ 
    163 #line 35 "yacc_parser.yacc" 
     159typedef union YYSTYPE YYSTYPE; 
     160union YYSTYPE 
     161{ 
     162#line 35 "yacc_parser.yacc" /* yacc.c:355  */ 
    164163 
    165164  std::string* str;                /* symbol table index */ 
     
    167166  xios::IFilterExprNode* filterNode; 
    168167 
    169  
    170 /* Line 387 of yacc.c  */ 
    171 #line 172 "yacc_parser.cpp" 
    172 } YYSTYPE; 
     168#line 169 "yacc_parser.cpp" /* yacc.c:355  */ 
     169}; 
    173170# define YYSTYPE_IS_TRIVIAL 1 
    174 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 
    175171# define YYSTYPE_IS_DECLARED 1 
    176172#endif 
    177173 
     174 
    178175extern YYSTYPE yylval; 
    179176 
    180 #ifdef YYPARSE_PARAM 
    181 #if defined __STDC__ || defined __cplusplus 
    182 int yyparse (void *YYPARSE_PARAM); 
    183 #else 
    184 int yyparse (); 
    185 #endif 
    186 #else /* ! YYPARSE_PARAM */ 
    187 #if defined __STDC__ || defined __cplusplus 
    188177int yyparse (void); 
    189 #else 
    190 int yyparse (); 
    191 #endif 
    192 #endif /* ! YYPARSE_PARAM */ 
    193178 
    194179#endif /* !YY_YY_YACC_PARSER_HPP_INCLUDED  */ 
     
    196181/* Copy the second part of user declarations.  */ 
    197182 
    198 /* Line 390 of yacc.c  */ 
    199 #line 200 "yacc_parser.cpp" 
     183#line 184 "yacc_parser.cpp" /* yacc.c:358  */ 
    200184 
    201185#ifdef short 
     
    211195#ifdef YYTYPE_INT8 
    212196typedef YYTYPE_INT8 yytype_int8; 
    213 #elif (defined __STDC__ || defined __C99__FUNC__ \ 
    214      || defined __cplusplus || defined _MSC_VER) 
     197#else 
    215198typedef signed char yytype_int8; 
    216 #else 
    217 typedef short int yytype_int8; 
    218199#endif 
    219200 
     
    235216# elif defined size_t 
    236217#  define YYSIZE_T size_t 
    237 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 
    238      || defined __cplusplus || defined _MSC_VER) 
     218# elif ! defined YYSIZE_T 
    239219#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 
    240220#  define YYSIZE_T size_t 
     
    258238#endif 
    259239 
     240#ifndef YY_ATTRIBUTE 
     241# if (defined __GNUC__                                               \ 
     242      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \ 
     243     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C 
     244#  define YY_ATTRIBUTE(Spec) __attribute__(Spec) 
     245# else 
     246#  define YY_ATTRIBUTE(Spec) /* empty */ 
     247# endif 
     248#endif 
     249 
     250#ifndef YY_ATTRIBUTE_PURE 
     251# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__)) 
     252#endif 
     253 
     254#ifndef YY_ATTRIBUTE_UNUSED 
     255# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) 
     256#endif 
     257 
     258#if !defined _Noreturn \ 
     259     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) 
     260# if defined _MSC_VER && 1200 <= _MSC_VER 
     261#  define _Noreturn __declspec (noreturn) 
     262# else 
     263#  define _Noreturn YY_ATTRIBUTE ((__noreturn__)) 
     264# endif 
     265#endif 
     266 
    260267/* Suppress unused-variable warnings by "using" E.  */ 
    261268#if ! defined lint || defined __GNUC__ 
     
    265272#endif 
    266273 
    267 /* Identity function, used to suppress warnings about constant conditions.  */ 
    268 #ifndef lint 
    269 # define YYID(N) (N) 
     274#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ 
     275/* Suppress an incorrect diagnostic about yylval being uninitialized.  */ 
     276# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 
     277    _Pragma ("GCC diagnostic push") \ 
     278    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ 
     279    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 
     280# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 
     281    _Pragma ("GCC diagnostic pop") 
    270282#else 
    271 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    272      || defined __cplusplus || defined _MSC_VER) 
    273 static int 
    274 YYID (int yyi) 
    275 #else 
    276 static int 
    277 YYID (yyi) 
    278     int yyi; 
    279 #endif 
    280 { 
    281   return yyi; 
    282 } 
    283 #endif 
     283# define YY_INITIAL_VALUE(Value) Value 
     284#endif 
     285#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 
     286# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 
     287# define YY_IGNORE_MAYBE_UNINITIALIZED_END 
     288#endif 
     289#ifndef YY_INITIAL_VALUE 
     290# define YY_INITIAL_VALUE(Value) /* Nothing. */ 
     291#endif 
     292 
    284293 
    285294#if ! defined yyoverflow || YYERROR_VERBOSE 
     
    300309#   else 
    301310#    define YYSTACK_ALLOC alloca 
    302 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 
    303      || defined __cplusplus || defined _MSC_VER) 
     311#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS 
    304312#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 
    305313      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */ 
     
    313321 
    314322# ifdef YYSTACK_ALLOC 
    315    /* Pacify GCC's `empty if-body' warning.  */ 
    316 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 
     323   /* Pacify GCC's 'empty if-body' warning.  */ 
     324#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 
    317325#  ifndef YYSTACK_ALLOC_MAXIMUM 
    318326    /* The OS might guarantee only one guard page at the bottom of the stack, 
     
    330338#  if (defined __cplusplus && ! defined EXIT_SUCCESS \ 
    331339       && ! ((defined YYMALLOC || defined malloc) \ 
    332              && (defined YYFREE || defined free))) 
     340             && (defined YYFREE || defined free))) 
    333341#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 
    334342#   ifndef EXIT_SUCCESS 
     
    338346#  ifndef YYMALLOC 
    339347#   define YYMALLOC malloc 
    340 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 
    341      || defined __cplusplus || defined _MSC_VER) 
     348#   if ! defined malloc && ! defined EXIT_SUCCESS 
    342349void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 
    343350#   endif 
     
    345352#  ifndef YYFREE 
    346353#   define YYFREE free 
    347 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 
    348      || defined __cplusplus || defined _MSC_VER) 
     354#   if ! defined free && ! defined EXIT_SUCCESS 
    349355void free (void *); /* INFRINGES ON USER NAME SPACE */ 
    350356#   endif 
     
    356362#if (! defined yyoverflow \ 
    357363     && (! defined __cplusplus \ 
    358         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 
     364        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 
    359365 
    360366/* A type that is properly aligned for any stack member.  */ 
     
    381387   stack.  Advance YYPTR to a properly aligned location for the next 
    382388   stack.  */ 
    383 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \ 
    384     do                                                                  \ 
    385       {                                                                 \ 
    386         YYSIZE_T yynewbytes;                                            \ 
    387         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \ 
    388         Stack = &yyptr->Stack_alloc;                                    \ 
    389         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 
    390         yyptr += yynewbytes / sizeof (*yyptr);                          \ 
    391       }                                                                 \ 
    392     while (YYID (0)) 
     389# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \ 
     390    do                                                                  \ 
     391      {                                                                 \ 
     392        YYSIZE_T yynewbytes;                                            \ 
     393        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \ 
     394        Stack = &yyptr->Stack_alloc;                                    \ 
     395        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 
     396        yyptr += yynewbytes / sizeof (*yyptr);                          \ 
     397      }                                                                 \ 
     398    while (0) 
    393399 
    394400#endif 
     
    409415            (Dst)[yyi] = (Src)[yyi];            \ 
    410416        }                                       \ 
    411       while (YYID (0)) 
     417      while (0) 
    412418#  endif 
    413419# endif 
     
    417423#define YYFINAL  16 
    418424/* YYLAST -- Last index in YYTABLE.  */ 
    419 #define YYLAST   229 
     425#define YYLAST   371 
    420426 
    421427/* YYNTOKENS -- Number of terminals.  */ 
    422 #define YYNTOKENS  22 
     428#define YYNTOKENS  24 
    423429/* YYNNTS -- Number of nonterminals.  */ 
    424430#define YYNNTS  4 
    425431/* YYNRULES -- Number of rules.  */ 
    426 #define YYNRULES  56 
    427 /* YYNRULES -- Number of states.  */ 
    428 #define YYNSTATES  116 
    429  
    430 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */ 
     432#define YYNRULES  64 
     433/* YYNSTATES -- Number of states.  */ 
     434#define YYNSTATES  138 
     435 
     436/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned 
     437   by yylex, with out-of-bounds checking.  */ 
    431438#define YYUNDEFTOK  2 
    432 #define YYMAXUTOK   276 
    433  
    434 #define YYTRANSLATE(YYX)                                                \ 
     439#define YYMAXUTOK   278 
     440 
     441#define YYTRANSLATE(YYX)                                                \ 
    435442  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 
    436443 
    437 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */ 
     444/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM 
     445   as returned by yylex, without out-of-bounds checking.  */ 
    438446static const yytype_uint8 yytranslate[] = 
    439447{ 
     
    465473       2,     2,     2,     2,     2,     2,     1,     2,     3,     4, 
    466474       5,     6,     7,     8,     9,    10,    11,    12,    13,    14, 
    467       15,    16,    17,    18,    19,    20,    21 
     475      15,    16,    17,    18,    19,    20,    21,    22,    23 
    468476}; 
    469477 
    470478#if YYDEBUG 
    471 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 
    472    YYRHS.  */ 
    473 static const yytype_uint8 yyprhs[] = 
    474 { 
    475        0,     0,     3,     5,     8,    10,    12,    16,    20,    24, 
    476       28,    31,    35,    39,    43,    47,    51,    55,    59,    63, 
    477       68,    70,    72,    76,    80,    84,    88,    91,    95,    99, 
    478      103,   107,   111,   115,   119,   123,   127,   131,   135,   139, 
    479      143,   147,   151,   155,   159,   163,   167,   171,   175,   179, 
    480      183,   187,   191,   195,   199,   203,   207 
    481 }; 
    482  
    483 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */ 
    484 static const yytype_int8 yyrhs[] = 
    485 { 
    486       23,     0,    -1,    20,    -1,    25,    20,    -1,     3,    -1, 
    487        4,    -1,    24,     7,    24,    -1,    24,     8,    24,    -1, 
    488       24,     9,    24,    -1,    24,    10,    24,    -1,     8,    24, 
    489       -1,    24,    11,    24,    -1,    24,    12,    24,    -1,    24, 
    490       13,    24,    -1,    24,    14,    24,    -1,    24,    15,    24, 
    491       -1,    24,    16,    24,    -1,    24,    17,    24,    -1,    18, 
    492       24,    19,    -1,     5,    18,    24,    19,    -1,     5,    -1, 
    493        6,    -1,    25,     7,    25,    -1,    25,     8,    25,    -1, 
    494       25,     9,    25,    -1,    25,    10,    25,    -1,     8,    25, 
    495       -1,    25,    11,    25,    -1,    25,    12,    25,    -1,    25, 
    496       13,    25,    -1,    25,    14,    25,    -1,    25,    15,    25, 
    497       -1,    25,    16,    25,    -1,    25,    17,    25,    -1,    18, 
    498       25,    19,    -1,    25,     7,    24,    -1,    24,     7,    25, 
    499       -1,    25,     8,    24,    -1,    24,     8,    25,    -1,    25, 
    500        9,    24,    -1,    24,     9,    25,    -1,    25,    10,    24, 
    501       -1,    24,    10,    25,    -1,    25,    11,    24,    -1,    25, 
    502       12,    24,    -1,    24,    12,    25,    -1,    25,    13,    24, 
    503       -1,    24,    13,    25,    -1,    25,    14,    24,    -1,    24, 
    504       14,    25,    -1,    25,    15,    24,    -1,    24,    15,    25, 
    505       -1,    25,    16,    24,    -1,    24,    16,    25,    -1,    25, 
    506       17,    24,    -1,    24,    17,    25,    -1,     5,    18,    25, 
    507       19,    -1 
    508 }; 
    509  
    510 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */ 
     479  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */ 
    511480static const yytype_uint8 yyrline[] = 
    512481{ 
    513        0,    61,    61,    62,    66,    67,    68,    69,    70,    71, 
    514       72,    73,    74,    75,    76,    77,    78,    79,    80,    81, 
    515       85,    86,    87,    88,    89,    90,    91,    92,    93,    94, 
    516       95,    96,    97,    98,    99,   100,   101,   102,   103,   104, 
    517      105,   106,   107,   108,   109,   110,   111,   112,   113,   114, 
    518      115,   116,   117,   118,   119,   120,   121 
     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 
    519489}; 
    520490#endif 
     
    527497  "$end", "error", "$undefined", "NUMBER", "VAR", "ID", "AVERAGE", "PLUS", 
    528498  "MINUS", "TIMES", "DIVIDE", "POWER", "EQ", "LT", "GT", "LE", "GE", "NE", 
    529   "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "END", "NEG", "$accept", "Line", 
    530   "Expression", "Field_expr", YY_NULL 
     499  "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "QUESTION_MARK", "COLON", "END", 
     500  "NEG", "$accept", "Line", "Expression", "Field_expr", YY_NULLPTR 
    531501}; 
    532502#endif 
    533503 
    534504# ifdef YYPRINT 
    535 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 
    536    token YYLEX-NUM.  */ 
     505/* YYTOKNUM[NUM] -- (External) token number corresponding to the 
     506   (internal) symbol number NUM (which must be that of a token).  */ 
    537507static const yytype_uint16 yytoknum[] = 
    538508{ 
    539509       0,   256,   257,   258,   259,   260,   261,   262,   263,   264, 
    540510     265,   266,   267,   268,   269,   270,   271,   272,   273,   274, 
    541      275,   276 
     511     275,   276,   277,   278 
    542512}; 
    543513# endif 
    544514 
    545 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */ 
    546 static const yytype_uint8 yyr1[] = 
    547 { 
    548        0,    22,    23,    23,    24,    24,    24,    24,    24,    24, 
    549       24,    24,    24,    24,    24,    24,    24,    24,    24,    24, 
    550       25,    25,    25,    25,    25,    25,    25,    25,    25,    25, 
    551       25,    25,    25,    25,    25,    25,    25,    25,    25,    25, 
    552       25,    25,    25,    25,    25,    25,    25,    25,    25,    25, 
    553       25,    25,    25,    25,    25,    25,    25 
     515#define YYPACT_NINF -14 
     516 
     517#define yypact_value_is_default(Yystate) \ 
     518  (!!((Yystate) == (-14))) 
     519 
     520#define YYTABLE_NINF -1 
     521 
     522#define yytable_value_is_error(Yytable_value) \ 
     523  (!!((Yytable_value) == (-1))) 
     524 
     525  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 
     526     STATE-NUM.  */ 
     527static const yytype_int16 yypact[] = 
     528{ 
     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 
    554543}; 
    555544 
    556 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */ 
    557 static const yytype_uint8 yyr2[] = 
    558 { 
    559        0,     2,     1,     2,     1,     1,     3,     3,     3,     3, 
    560        2,     3,     3,     3,     3,     3,     3,     3,     3,     4, 
    561        1,     1,     3,     3,     3,     3,     2,     3,     3,     3, 
    562        3,     3,     3,     3,     3,     3,     3,     3,     3,     3, 
    563        3,     3,     3,     3,     3,     3,     3,     3,     3,     3, 
    564        3,     3,     3,     3,     3,     3,     4 
     545  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. 
     546     Performed when YYTABLE does not specify something else to do.  Zero 
     547     means the default is an error.  */ 
     548static const yytype_uint8 yydefact[] = 
     549{ 
     550       0,     4,     5,    21,    22,     0,     0,     2,     0,     0, 
     551       0,     0,    10,    27,     0,     0,     1,     0,     0,     0, 
     552       0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 
     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 
    565564}; 
    566565 
    567 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 
    568    Performed when YYTABLE doesn't specify something else to do.  Zero 
    569    means the default is an error.  */ 
    570 static const yytype_uint8 yydefact[] = 
    571 { 
    572        0,     4,     5,    20,    21,     0,     0,     2,     0,     0, 
    573        0,     0,    10,    26,     0,     0,     1,     0,     0,     0, 
    574        0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 
    575        0,     0,     0,     0,     0,     0,     0,     0,     0,     3, 
    576        0,     0,    18,    34,     6,    36,     7,    38,     8,    40, 
    577        9,    42,     0,     0,     0,    11,    12,    45,    13,    47, 
    578       14,    49,    15,    51,    16,    53,    17,    55,    35,    22, 
    579       37,    23,    39,    24,    41,    25,    43,    27,    44,    28, 
    580       46,    29,    48,    30,    50,    31,    52,    32,    54,    33, 
    581       19,    56,     0,    10,     0,     0,     0,     0,     0,     0, 
    582        0,     0,     0,     0,     0,     0,     6,     7,     8,     9, 
    583       12,    13,    14,    15,    16,    17 
     566  /* YYPGOTO[NTERM-NUM].  */ 
     567static const yytype_int8 yypgoto[] = 
     568{ 
     569     -14,   -14,    -5,    35 
    584570}; 
    585571 
    586 /* YYDEFGOTO[NTERM-NUM].  */ 
     572  /* YYDEFGOTO[NTERM-NUM].  */ 
    587573static const yytype_int8 yydefgoto[] = 
    588574{ 
     
    590576}; 
    591577 
    592 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 
    593    STATE-NUM.  */ 
    594 #define YYPACT_NINF -14 
    595 static const yytype_int16 yypact[] = 
    596 { 
    597       97,   -14,   -14,   -13,   -14,    70,    70,   -14,    37,   207, 
    598      115,    70,    32,    34,   129,   142,   -14,    70,    70,    70, 
    599       70,   103,    70,    70,    70,    70,    70,    70,    70,    70, 
    600       70,    70,    70,    70,    70,    70,    70,    70,    70,   -14, 
    601      155,   168,   -14,   -14,    -7,    25,    -7,    25,    32,    34, 
    602       32,    34,    28,   103,   103,    32,     0,    72,     0,    72, 
    603        0,    72,     0,    72,     0,    72,     0,    72,    -7,    25, 
    604       -7,    25,    32,    34,    32,    34,    32,    34,     0,    72, 
    605        0,    72,     0,    72,     0,    72,     0,    72,     0,    72, 
    606      -14,   -14,   103,    32,   181,   103,   103,   103,   103,   103, 
    607      103,   103,   103,   103,   103,   194,    31,    31,    32,    32, 
    608      218,   218,   218,   218,   218,   218 
     578  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If 
     579     positive, shift that token.  If negative, reduce the rule whose 
     580     number is the opposite.  If YYTABLE_NINF, syntax error.  */ 
     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 
    609621}; 
    610622 
    611 /* YYPGOTO[NTERM-NUM].  */ 
    612 static const yytype_int8 yypgoto[] = 
    613 { 
    614      -14,   -14,    -5,    33 
    615 }; 
    616  
    617 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If 
    618    positive, shift that token.  If negative, reduce the rule which 
    619    number is the opposite.  If YYTABLE_NINF, syntax error.  */ 
    620 #define YYTABLE_NINF -1 
    621 static const yytype_uint8 yytable[] = 
    622 { 
    623       12,    14,    19,    20,    21,    11,    40,    17,    18,    19, 
    624       20,    21,    44,    46,    48,    50,    55,    56,    58,    60, 
    625       62,    64,    66,    68,    70,    72,    74,    76,    78,    80, 
    626       82,    84,    86,    88,    30,    31,    32,    16,    13,    15, 
    627       97,    98,    21,    21,    41,    32,    92,     0,    93,    94, 
    628       45,    47,    49,    51,     0,    57,    59,    61,    63,    65, 
    629       67,    69,    71,    73,    75,    77,    79,    81,    83,    85, 
    630       87,    89,     0,     1,     2,     3,     4,     0,     5,    28, 
    631       29,    30,    31,    32,     0,     0,     0,   105,     6,     0, 
    632      106,   107,   108,   109,   110,   111,   112,   113,   114,   115, 
    633        1,     2,     3,     4,     0,     5,     1,     2,    52,     0, 
    634        0,    53,     0,     0,     0,     6,     0,     7,     0,     0, 
    635        0,    54,    28,    29,    30,    31,    32,    33,    34,    35, 
    636       36,    37,    38,     0,     0,    39,    17,    18,    19,    20, 
    637       21,    22,    23,    24,    25,    26,    27,     0,    42,    28, 
    638       29,    30,    31,    32,    33,    34,    35,    36,    37,    38, 
    639        0,    43,    17,    18,    19,    20,    21,    22,    23,    24, 
    640       25,    26,    27,     0,    90,    28,    29,    30,    31,    32, 
    641       33,    34,    35,    36,    37,    38,     0,    91,    95,    96, 
    642       97,    98,    21,    99,   100,   101,   102,   103,   104,     0, 
    643       42,    95,    96,    97,    98,    21,    99,   100,   101,   102, 
    644      103,   104,     0,    90,    17,    18,    19,    20,    21,    22, 
    645       23,    24,    25,    26,    27,    95,    96,    97,    98,    21 
    646 }; 
    647  
    648 #define yypact_value_is_default(Yystate) \ 
    649   (!!((Yystate) == (-14))) 
    650  
    651 #define yytable_value_is_error(Yytable_value) \ 
    652   YYID (0) 
    653  
    654 static const yytype_int8 yycheck[] = 
     623static const yytype_int16 yycheck[] = 
    655624{ 
    656625       5,     6,     9,    10,    11,    18,    11,     7,     8,     9, 
    657626      10,    11,    17,    18,    19,    20,    21,    22,    23,    24, 
    658627      25,    26,    27,    28,    29,    30,    31,    32,    33,    34, 
    659       35,    36,    37,    38,     9,    10,    11,     0,     5,     6, 
    660        9,    10,    11,    11,    11,    11,    18,    -1,    53,    54, 
    661       17,    18,    19,    20,    -1,    22,    23,    24,    25,    26, 
    662       27,    28,    29,    30,    31,    32,    33,    34,    35,    36, 
    663       37,    38,    -1,     3,     4,     5,     6,    -1,     8,     7, 
    664        8,     9,    10,    11,    -1,    -1,    -1,    92,    18,    -1, 
    665       95,    96,    97,    98,    99,   100,   101,   102,   103,   104, 
    666        3,     4,     5,     6,    -1,     8,     3,     4,     5,    -1, 
    667       -1,     8,    -1,    -1,    -1,    18,    -1,    20,    -1,    -1, 
    668       -1,    18,     7,     8,     9,    10,    11,    12,    13,    14, 
    669       15,    16,    17,    -1,    -1,    20,     7,     8,     9,    10, 
    670       11,    12,    13,    14,    15,    16,    17,    -1,    19,     7, 
     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, 
    671652       8,     9,    10,    11,    12,    13,    14,    15,    16,    17, 
    672       -1,    19,     7,     8,     9,    10,    11,    12,    13,    14, 
    673       15,    16,    17,    -1,    19,     7,     8,     9,    10,    11, 
    674       12,    13,    14,    15,    16,    17,    -1,    19,     7,     8, 
    675        9,    10,    11,    12,    13,    14,    15,    16,    17,    -1, 
    676       19,     7,     8,     9,    10,    11,    12,    13,    14,    15, 
    677       16,    17,    -1,    19,     7,     8,     9,    10,    11,    12, 
    678       13,    14,    15,    16,    17,     7,     8,     9,    10,    11 
     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 
    679663}; 
    680664 
    681 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 
    682    symbol of state STATE-NUM.  */ 
     665  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 
     666     symbol of state STATE-NUM.  */ 
    683667static const yytype_uint8 yystos[] = 
    684668{ 
    685        0,     3,     4,     5,     6,     8,    18,    20,    23,    24, 
    686       25,    18,    24,    25,    24,    25,     0,     7,     8,     9, 
    687       10,    11,    12,    13,    14,    15,    16,    17,     7,     8, 
    688        9,    10,    11,    12,    13,    14,    15,    16,    17,    20, 
    689       24,    25,    19,    19,    24,    25,    24,    25,    24,    25, 
    690       24,    25,     5,     8,    18,    24,    24,    25,    24,    25, 
    691       24,    25,    24,    25,    24,    25,    24,    25,    24,    25, 
    692       24,    25,    24,    25,    24,    25,    24,    25,    24,    25, 
    693       24,    25,    24,    25,    24,    25,    24,    25,    24,    25, 
    694       19,    19,    18,    24,    24,     7,     8,     9,    10,    12, 
    695       13,    14,    15,    16,    17,    24,    24,    24,    24,    24, 
    696       24,    24,    24,    24,    24,    24 
     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 
    697683}; 
    698684 
    699 #define yyerrok         (yyerrstatus = 0) 
    700 #define yyclearin       (yychar = YYEMPTY) 
    701 #define YYEMPTY         (-2) 
    702 #define YYEOF           0 
    703  
    704 #define YYACCEPT        goto yyacceptlab 
    705 #define YYABORT         goto yyabortlab 
    706 #define YYERROR         goto yyerrorlab 
    707  
    708  
    709 /* Like YYERROR except do call yyerror.  This remains here temporarily 
    710    to ease the transition to the new meaning of YYERROR, for GCC. 
    711    Once GCC version 2 has supplanted version 1, this can go.  However, 
    712    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated 
    713    in Bison 2.4.2's NEWS entry, where a plan to phase it out is 
    714    discussed.  */ 
    715  
    716 #define YYFAIL          goto yyerrlab 
    717 #if defined YYFAIL 
    718   /* This is here to suppress warnings from the GCC cpp's 
    719      -Wunused-macros.  Normally we don't worry about that warning, but 
    720      some users do, and we want to make it easy for users to remove 
    721      YYFAIL uses, which will produce warnings from Bison 2.5.  */ 
    722 #endif 
     685  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */ 
     686static const yytype_uint8 yyr1[] = 
     687{ 
     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 
     695}; 
     696 
     697  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */ 
     698static const yytype_uint8 yyr2[] = 
     699{ 
     700       0,     2,     1,     2,     1,     1,     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, 
     705       3,     3,     3,     3,     3,     3,     3,     3,     3,     3, 
     706       3,     3,     3,     3,     4 
     707}; 
     708 
     709 
     710#define yyerrok         (yyerrstatus = 0) 
     711#define yyclearin       (yychar = YYEMPTY) 
     712#define YYEMPTY         (-2) 
     713#define YYEOF           0 
     714 
     715#define YYACCEPT        goto yyacceptlab 
     716#define YYABORT         goto yyabortlab 
     717#define YYERROR         goto yyerrorlab 
     718 
    723719 
    724720#define YYRECOVERING()  (!!yyerrstatus) 
     
    737733    {                                                           \ 
    738734      yyerror (YY_("syntax error: cannot back up")); \ 
    739       YYERROR;                                                  \ 
    740     }                                                           \ 
    741 while (YYID (0)) 
     735      YYERROR;                                                  \ 
     736    }                                                           \ 
     737while (0) 
    742738 
    743739/* Error token number */ 
    744 #define YYTERROR        1 
    745 #define YYERRCODE       256 
    746  
    747  
    748 /* This macro is provided for backward compatibility. */ 
    749 #ifndef YY_LOCATION_PRINT 
    750 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 
    751 #endif 
    752  
    753  
    754 /* YYLEX -- calling `yylex' with the right arguments.  */ 
    755 #ifdef YYLEX_PARAM 
    756 # define YYLEX yylex (YYLEX_PARAM) 
    757 #else 
    758 # define YYLEX yylex () 
    759 #endif 
     740#define YYTERROR        1 
     741#define YYERRCODE       256 
     742 
     743 
    760744 
    761745/* Enable debugging if requested.  */ 
     
    767751# endif 
    768752 
    769 # define YYDPRINTF(Args)                        \ 
    770 do {                                            \ 
    771   if (yydebug)                                  \ 
    772     YYFPRINTF Args;                             \ 
    773 } while (YYID (0)) 
    774  
    775 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \ 
    776 do {                                                                      \ 
    777   if (yydebug)                                                            \ 
    778     {                                                                     \ 
    779       YYFPRINTF (stderr, "%s ", Title);                                   \ 
    780       yy_symbol_print (stderr,                                            \ 
    781                   Type, Value); \ 
    782       YYFPRINTF (stderr, "\n");                                           \ 
    783     }                                                                     \ 
    784 } while (YYID (0)) 
    785  
    786  
    787 /*--------------------------------. 
    788 | Print this symbol on YYOUTPUT.  | 
    789 `--------------------------------*/ 
    790  
    791 /*ARGSUSED*/ 
    792 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    793      || defined __cplusplus || defined _MSC_VER) 
     753# define YYDPRINTF(Args)                        \ 
     754do {                                            \ 
     755  if (yydebug)                                  \ 
     756    YYFPRINTF Args;                             \ 
     757} while (0) 
     758 
     759/* This macro is provided for backward compatibility. */ 
     760#ifndef YY_LOCATION_PRINT 
     761# define YY_LOCATION_PRINT(File, Loc) ((void) 0) 
     762#endif 
     763 
     764 
     765# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \ 
     766do {                                                                      \ 
     767  if (yydebug)                                                            \ 
     768    {                                                                     \ 
     769      YYFPRINTF (stderr, "%s ", Title);                                   \ 
     770      yy_symbol_print (stderr,                                            \ 
     771                  Type, Value); \ 
     772      YYFPRINTF (stderr, "\n");                                           \ 
     773    }                                                                     \ 
     774} while (0) 
     775 
     776 
     777/*----------------------------------------. 
     778| Print this symbol's value on YYOUTPUT.  | 
     779`----------------------------------------*/ 
     780 
    794781static void 
    795782yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 
    796 #else 
    797 static void 
    798 yy_symbol_value_print (yyoutput, yytype, yyvaluep) 
    799     FILE *yyoutput; 
    800     int yytype; 
    801     YYSTYPE const * const yyvaluep; 
    802 #endif 
    803783{ 
    804784  FILE *yyo = yyoutput; 
     
    809789  if (yytype < YYNTOKENS) 
    810790    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 
    811 # else 
    812   YYUSE (yyoutput); 
    813791# endif 
    814   switch (yytype) 
    815     { 
    816       default: 
    817         break; 
    818     } 
     792  YYUSE (yytype); 
    819793} 
    820794 
     
    824798`--------------------------------*/ 
    825799 
    826 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    827      || defined __cplusplus || defined _MSC_VER) 
    828800static void 
    829801yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 
    830 #else 
    831 static void 
    832 yy_symbol_print (yyoutput, yytype, yyvaluep) 
    833     FILE *yyoutput; 
    834     int yytype; 
    835     YYSTYPE const * const yyvaluep; 
    836 #endif 
    837 { 
    838   if (yytype < YYNTOKENS) 
    839     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 
    840   else 
    841     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 
     802{ 
     803  YYFPRINTF (yyoutput, "%s %s (", 
     804             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); 
    842805 
    843806  yy_symbol_value_print (yyoutput, yytype, yyvaluep); 
     
    850813`------------------------------------------------------------------*/ 
    851814 
    852 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    853      || defined __cplusplus || defined _MSC_VER) 
    854815static void 
    855816yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 
    856 #else 
    857 static void 
    858 yy_stack_print (yybottom, yytop) 
    859     yytype_int16 *yybottom; 
    860     yytype_int16 *yytop; 
    861 #endif 
    862817{ 
    863818  YYFPRINTF (stderr, "Stack now"); 
     
    870825} 
    871826 
    872 # define YY_STACK_PRINT(Bottom, Top)                            \ 
    873 do {                                                            \ 
    874   if (yydebug)                                                  \ 
    875     yy_stack_print ((Bottom), (Top));                           \ 
    876 } while (YYID (0)) 
     827# define YY_STACK_PRINT(Bottom, Top)                            \ 
     828do {                                                            \ 
     829  if (yydebug)                                                  \ 
     830    yy_stack_print ((Bottom), (Top));                           \ 
     831} while (0) 
    877832 
    878833 
     
    881836`------------------------------------------------*/ 
    882837 
    883 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    884      || defined __cplusplus || defined _MSC_VER) 
    885838static void 
    886 yy_reduce_print (YYSTYPE *yyvsp, int yyrule) 
    887 #else 
    888 static void 
    889 yy_reduce_print (yyvsp, yyrule) 
    890     YYSTYPE *yyvsp; 
    891     int yyrule; 
    892 #endif 
    893 { 
     839yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) 
     840{ 
     841  unsigned long int yylno = yyrline[yyrule]; 
    894842  int yynrhs = yyr2[yyrule]; 
    895843  int yyi; 
    896   unsigned long int yylno = yyrline[yyrule]; 
    897844  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 
    898              yyrule - 1, yylno); 
     845             yyrule - 1, yylno); 
    899846  /* The symbols being reduced.  */ 
    900847  for (yyi = 0; yyi < yynrhs; yyi++) 
    901848    { 
    902849      YYFPRINTF (stderr, "   $%d = ", yyi + 1); 
    903       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 
    904                        &(yyvsp[(yyi + 1) - (yynrhs)]) 
    905                                        ); 
     850      yy_symbol_print (stderr, 
     851                       yystos[yyssp[yyi + 1 - yynrhs]], 
     852                       &(yyvsp[(yyi + 1) - (yynrhs)]) 
     853                                              ); 
    906854      YYFPRINTF (stderr, "\n"); 
    907855    } 
    908856} 
    909857 
    910 # define YY_REDUCE_PRINT(Rule)          \ 
    911 do {                                    \ 
    912   if (yydebug)                          \ 
    913     yy_reduce_print (yyvsp, Rule); \ 
    914 } while (YYID (0)) 
     858# define YY_REDUCE_PRINT(Rule)          \ 
     859do {                                    \ 
     860  if (yydebug)                          \ 
     861    yy_reduce_print (yyssp, yyvsp, Rule); \ 
     862} while (0) 
    915863 
    916864/* Nonzero means print parse trace.  It is left uninitialized so that 
     
    926874 
    927875/* YYINITDEPTH -- initial size of the parser's stacks.  */ 
    928 #ifndef YYINITDEPTH 
     876#ifndef YYINITDEPTH 
    929877# define YYINITDEPTH 200 
    930878#endif 
     
    949897#  else 
    950898/* Return the length of YYSTR.  */ 
    951 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    952      || defined __cplusplus || defined _MSC_VER) 
    953899static YYSIZE_T 
    954900yystrlen (const char *yystr) 
    955 #else 
    956 static YYSIZE_T 
    957 yystrlen (yystr) 
    958     const char *yystr; 
    959 #endif 
    960901{ 
    961902  YYSIZE_T yylen; 
     
    973914/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 
    974915   YYDEST.  */ 
    975 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    976      || defined __cplusplus || defined _MSC_VER) 
    977916static char * 
    978917yystpcpy (char *yydest, const char *yysrc) 
    979 #else 
    980 static char * 
    981 yystpcpy (yydest, yysrc) 
    982     char *yydest; 
    983     const char *yysrc; 
    984 #endif 
    985918{ 
    986919  char *yyd = yydest; 
     
    1012945 
    1013946      for (;;) 
    1014         switch (*++yyp) 
    1015           { 
    1016           case '\'': 
    1017           case ',': 
    1018             goto do_not_strip_quotes; 
    1019  
    1020           case '\\': 
    1021             if (*++yyp != '\\') 
    1022               goto do_not_strip_quotes; 
    1023             /* Fall through.  */ 
    1024           default: 
    1025             if (yyres) 
    1026               yyres[yyn] = *yyp; 
    1027             yyn++; 
    1028             break; 
    1029  
    1030           case '"': 
    1031             if (yyres) 
    1032               yyres[yyn] = '\0'; 
    1033             return yyn; 
    1034           } 
     947        switch (*++yyp) 
     948          { 
     949          case '\'': 
     950          case ',': 
     951            goto do_not_strip_quotes; 
     952 
     953          case '\\': 
     954            if (*++yyp != '\\') 
     955              goto do_not_strip_quotes; 
     956            /* Fall through.  */ 
     957          default: 
     958            if (yyres) 
     959              yyres[yyn] = *yyp; 
     960            yyn++; 
     961            break; 
     962 
     963          case '"': 
     964            if (yyres) 
     965              yyres[yyn] = '\0'; 
     966            return yyn; 
     967          } 
    1035968    do_not_strip_quotes: ; 
    1036969    } 
     
    1055988                yytype_int16 *yyssp, int yytoken) 
    1056989{ 
    1057   YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); 
     990  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); 
    1058991  YYSIZE_T yysize = yysize0; 
    1059992  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 
    1060993  /* Internationalized format string. */ 
    1061   const char *yyformat = YY_NULL; 
     994  const char *yyformat = YY_NULLPTR; 
    1062995  /* Arguments of yyformat. */ 
    1063996  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 
     
    10671000 
    10681001  /* There are many possibilities here to consider: 
    1069      - Assume YYFAIL is not used.  It's too flawed to consider.  See 
    1070        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 
    1071        for details.  YYERROR is fine as it does not invoke this 
    1072        function. 
    10731002     - If this state is a consistent state with a default action, then 
    10741003       the only way this function was invoked is if the default action 
     
    11201049                yyarg[yycount++] = yytname[yyx]; 
    11211050                { 
    1122                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); 
     1051                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); 
    11231052                  if (! (yysize <= yysize1 
    11241053                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 
     
    11871116`-----------------------------------------------*/ 
    11881117 
    1189 /*ARGSUSED*/ 
    1190 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    1191      || defined __cplusplus || defined _MSC_VER) 
    11921118static void 
    11931119yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 
    1194 #else 
    1195 static void 
    1196 yydestruct (yymsg, yytype, yyvaluep) 
    1197     const char *yymsg; 
    1198     int yytype; 
    1199     YYSTYPE *yyvaluep; 
    1200 #endif 
    12011120{ 
    12021121  YYUSE (yyvaluep); 
    1203  
    12041122  if (!yymsg) 
    12051123    yymsg = "Deleting"; 
    12061124  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 
    12071125 
    1208   switch (yytype) 
    1209     { 
    1210  
    1211       default: 
    1212         break; 
    1213     } 
     1126  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 
     1127  YYUSE (yytype); 
     1128  YY_IGNORE_MAYBE_UNINITIALIZED_END 
    12141129} 
    12151130 
     
    12201135int yychar; 
    12211136 
    1222  
    1223 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 
    1224 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 
    1225 # define YY_IGNORE_MAYBE_UNINITIALIZED_END 
    1226 #endif 
    1227 #ifndef YY_INITIAL_VALUE 
    1228 # define YY_INITIAL_VALUE(Value) /* Nothing. */ 
    1229 #endif 
    1230  
    12311137/* The semantic value of the lookahead symbol.  */ 
    1232 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); 
    1233  
     1138YYSTYPE yylval; 
    12341139/* Number of syntax errors so far.  */ 
    12351140int yynerrs; 
     
    12401145`----------*/ 
    12411146 
    1242 #ifdef YYPARSE_PARAM 
    1243 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    1244      || defined __cplusplus || defined _MSC_VER) 
    1245 int 
    1246 yyparse (void *YYPARSE_PARAM) 
    1247 #else 
    1248 int 
    1249 yyparse (YYPARSE_PARAM) 
    1250     void *YYPARSE_PARAM; 
    1251 #endif 
    1252 #else /* ! YYPARSE_PARAM */ 
    1253 #if (defined __STDC__ || defined __C99__FUNC__ \ 
    1254      || defined __cplusplus || defined _MSC_VER) 
    12551147int 
    12561148yyparse (void) 
    1257 #else 
    1258 int 
    1259 yyparse () 
    1260  
    1261 #endif 
    1262 #endif 
    12631149{ 
    12641150    int yystate; 
     
    12671153 
    12681154    /* The stacks and their tools: 
    1269        `yyss': related to states. 
    1270        `yyvs': related to semantic values. 
     1155       'yyss': related to states. 
     1156       'yyvs': related to semantic values. 
    12711157 
    12721158       Refer to the stacks through separate pointers, to allow yyoverflow 
     
    13361222#ifdef yyoverflow 
    13371223      { 
    1338         /* Give user a chance to reallocate the stack.  Use copies of 
    1339            these so that the &'s don't force the real ones into 
    1340            memory.  */ 
    1341         YYSTYPE *yyvs1 = yyvs; 
    1342         yytype_int16 *yyss1 = yyss; 
    1343  
    1344         /* Each stack pointer address is followed by the size of the 
    1345            data in use in that stack, in bytes.  This used to be a 
    1346            conditional around just the two extra args, but that might 
    1347            be undefined if yyoverflow is a macro.  */ 
    1348         yyoverflow (YY_("memory exhausted"), 
    1349                     &yyss1, yysize * sizeof (*yyssp), 
    1350                     &yyvs1, yysize * sizeof (*yyvsp), 
    1351                     &yystacksize); 
    1352  
    1353         yyss = yyss1; 
    1354         yyvs = yyvs1; 
     1224        /* Give user a chance to reallocate the stack.  Use copies of 
     1225           these so that the &'s don't force the real ones into 
     1226           memory.  */ 
     1227        YYSTYPE *yyvs1 = yyvs; 
     1228        yytype_int16 *yyss1 = yyss; 
     1229 
     1230        /* Each stack pointer address is followed by the size of the 
     1231           data in use in that stack, in bytes.  This used to be a 
     1232           conditional around just the two extra args, but that might 
     1233           be undefined if yyoverflow is a macro.  */ 
     1234        yyoverflow (YY_("memory exhausted"), 
     1235                    &yyss1, yysize * sizeof (*yyssp), 
     1236                    &yyvs1, yysize * sizeof (*yyvsp), 
     1237                    &yystacksize); 
     1238 
     1239        yyss = yyss1; 
     1240        yyvs = yyvs1; 
    13551241      } 
    13561242#else /* no yyoverflow */ 
     
    13601246      /* Extend the stack our own way.  */ 
    13611247      if (YYMAXDEPTH <= yystacksize) 
    1362         goto yyexhaustedlab; 
     1248        goto yyexhaustedlab; 
    13631249      yystacksize *= 2; 
    13641250      if (YYMAXDEPTH < yystacksize) 
    1365         yystacksize = YYMAXDEPTH; 
     1251        yystacksize = YYMAXDEPTH; 
    13661252 
    13671253      { 
    1368         yytype_int16 *yyss1 = yyss; 
    1369         union yyalloc *yyptr = 
    1370           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 
    1371         if (! yyptr) 
    1372           goto yyexhaustedlab; 
    1373         YYSTACK_RELOCATE (yyss_alloc, yyss); 
    1374         YYSTACK_RELOCATE (yyvs_alloc, yyvs); 
     1254        yytype_int16 *yyss1 = yyss; 
     1255        union yyalloc *yyptr = 
     1256          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 
     1257        if (! yyptr) 
     1258          goto yyexhaustedlab; 
     1259        YYSTACK_RELOCATE (yyss_alloc, yyss); 
     1260        YYSTACK_RELOCATE (yyvs_alloc, yyvs); 
    13751261#  undef YYSTACK_RELOCATE 
    1376         if (yyss1 != yyssa) 
    1377           YYSTACK_FREE (yyss1); 
     1262        if (yyss1 != yyssa) 
     1263          YYSTACK_FREE (yyss1); 
    13781264      } 
    13791265# endif 
     
    13841270 
    13851271      YYDPRINTF ((stderr, "Stack size increased to %lu\n", 
    1386                   (unsigned long int) yystacksize)); 
     1272                  (unsigned long int) yystacksize)); 
    13871273 
    13881274      if (yyss + yystacksize - 1 <= yyssp) 
    1389         YYABORT; 
     1275        YYABORT; 
    13901276    } 
    13911277 
     
    14161302    { 
    14171303      YYDPRINTF ((stderr, "Reading a token: ")); 
    1418       yychar = YYLEX; 
     1304      yychar = yylex (); 
    14191305    } 
    14201306 
     
    14811367 
    14821368  /* If YYLEN is nonzero, implement the default value of the action: 
    1483      `$$ = $1'. 
     1369     '$$ = $1'. 
    14841370 
    14851371     Otherwise, the following line sets YYVAL to garbage. 
     
    14951381    { 
    14961382        case 2: 
    1497 /* Line 1792 of yacc.c  */ 
    1498 #line 61 "yacc_parser.yacc" 
     1383#line 63 "yacc_parser.yacc" /* yacc.c:1646  */ 
    14991384    { /* Nothing to do */ } 
     1385#line 1386 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15001386    break; 
    15011387 
    15021388  case 3: 
    1503 /* Line 1792 of yacc.c  */ 
    1504 #line 62 "yacc_parser.yacc" 
    1505     { parsed = (yyvsp[(1) - (2)].filterNode); } 
     1389#line 64 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1390    { parsed = (yyvsp[-1].filterNode); } 
     1391#line 1392 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15061392    break; 
    15071393 
    15081394  case 4: 
    1509 /* Line 1792 of yacc.c  */ 
    1510 #line 66 "yacc_parser.yacc" 
    1511     { (yyval.scalarNode) = new CScalarValExprNode(*(yyvsp[(1) - (1)].str)); delete (yyvsp[(1) - (1)].str); } 
     1395#line 68 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1396    { (yyval.scalarNode) = new CScalarValExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
     1397#line 1398 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15121398    break; 
    15131399 
    15141400  case 5: 
    1515 /* Line 1792 of yacc.c  */ 
    1516 #line 67 "yacc_parser.yacc" 
    1517     { (yyval.scalarNode) = new CScalarVarExprNode(*(yyvsp[(1) - (1)].str)); delete (yyvsp[(1) - (1)].str); } 
     1401#line 69 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1402    { (yyval.scalarNode) = new CScalarVarExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
     1403#line 1404 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15181404    break; 
    15191405 
    15201406  case 6: 
    1521 /* Line 1792 of yacc.c  */ 
    1522 #line 68 "yacc_parser.yacc" 
    1523     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "add", (yyvsp[(3) - (3)].scalarNode)); } 
     1407#line 70 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1408    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "add", (yyvsp[0].scalarNode)); } 
     1409#line 1410 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15241410    break; 
    15251411 
    15261412  case 7: 
    1527 /* Line 1792 of yacc.c  */ 
    1528 #line 69 "yacc_parser.yacc" 
    1529     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "minus", (yyvsp[(3) - (3)].scalarNode)); } 
     1413#line 71 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1414    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "minus", (yyvsp[0].scalarNode)); } 
     1415#line 1416 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15301416    break; 
    15311417 
    15321418  case 8: 
    1533 /* Line 1792 of yacc.c  */ 
    1534 #line 70 "yacc_parser.yacc" 
    1535     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "mult", (yyvsp[(3) - (3)].scalarNode)); } 
     1419#line 72 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1420    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "mult", (yyvsp[0].scalarNode)); } 
     1421#line 1422 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15361422    break; 
    15371423 
    15381424  case 9: 
    1539 /* Line 1792 of yacc.c  */ 
    1540 #line 71 "yacc_parser.yacc" 
    1541     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "div", (yyvsp[(3) - (3)].scalarNode)); } 
     1425#line 73 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1426    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "div", (yyvsp[0].scalarNode)); } 
     1427#line 1428 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15421428    break; 
    15431429 
    15441430  case 10: 
    1545 /* Line 1792 of yacc.c  */ 
    1546 #line 72 "yacc_parser.yacc" 
    1547     { (yyval.scalarNode) = new CScalarUnaryOpExprNode("neg", (yyvsp[(2) - (2)].scalarNode)); } 
     1431#line 74 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1432    { (yyval.scalarNode) = new CScalarUnaryOpExprNode("neg", (yyvsp[0].scalarNode)); } 
     1433#line 1434 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15481434    break; 
    15491435 
    15501436  case 11: 
    1551 /* Line 1792 of yacc.c  */ 
    1552 #line 73 "yacc_parser.yacc" 
    1553     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "pow", (yyvsp[(3) - (3)].scalarNode)); } 
     1437#line 75 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1438    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "pow", (yyvsp[0].scalarNode)); } 
     1439#line 1440 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15541440    break; 
    15551441 
    15561442  case 12: 
    1557 /* Line 1792 of yacc.c  */ 
    1558 #line 74 "yacc_parser.yacc" 
    1559     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "eq", (yyvsp[(3) - (3)].scalarNode)); } 
     1443#line 76 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1444    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "eq", (yyvsp[0].scalarNode)); } 
     1445#line 1446 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15601446    break; 
    15611447 
    15621448  case 13: 
    1563 /* Line 1792 of yacc.c  */ 
    1564 #line 75 "yacc_parser.yacc" 
    1565     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "lt", (yyvsp[(3) - (3)].scalarNode)); } 
     1449#line 77 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1450    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "lt", (yyvsp[0].scalarNode)); } 
     1451#line 1452 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15661452    break; 
    15671453 
    15681454  case 14: 
    1569 /* Line 1792 of yacc.c  */ 
    1570 #line 76 "yacc_parser.yacc" 
    1571     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "gt", (yyvsp[(3) - (3)].scalarNode)); } 
     1455#line 78 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1456    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "gt", (yyvsp[0].scalarNode)); } 
     1457#line 1458 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15721458    break; 
    15731459 
    15741460  case 15: 
    1575 /* Line 1792 of yacc.c  */ 
    1576 #line 77 "yacc_parser.yacc" 
    1577     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "le", (yyvsp[(3) - (3)].scalarNode)); } 
     1461#line 79 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1462    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "le", (yyvsp[0].scalarNode)); } 
     1463#line 1464 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15781464    break; 
    15791465 
    15801466  case 16: 
    1581 /* Line 1792 of yacc.c  */ 
    1582 #line 78 "yacc_parser.yacc" 
    1583     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "ge", (yyvsp[(3) - (3)].scalarNode)); } 
     1467#line 80 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1468    { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[-2].scalarNode), "ge", (yyvsp[0].scalarNode)); } 
     1469#line 1470 "yacc_parser.cpp" /* yacc.c:1646  */ 
    15841470    break; 
    15851471 
    15861472  case 17: 
    1587 /* Line 1792 of yacc.c  */ 
    1588 #line 79 "yacc_parser.yacc" 
    1589     { (yyval.scalarNode) = new CScalarBinaryOpExprNode((yyvsp[(1) - (3)].scalarNode), "ne", (yyvsp[(3) - (3)].scalarNode)); } 
     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  */ 
    15901476    break; 
    15911477 
    15921478  case 18: 
    1593 /* Line 1792 of yacc.c  */ 
    1594 #line 80 "yacc_parser.yacc" 
    1595     { (yyval.scalarNode) = (yyvsp[(2) - (3)].scalarNode); } 
     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  */ 
    15961482    break; 
    15971483 
    15981484  case 19: 
    1599 /* Line 1792 of yacc.c  */ 
    1600 #line 81 "yacc_parser.yacc" 
    1601     { (yyval.scalarNode) = new CScalarUnaryOpExprNode(*(yyvsp[(1) - (4)].str), (yyvsp[(3) - (4)].scalarNode)); delete (yyvsp[(1) - (4)].str); } 
     1485#line 83 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1486    { (yyval.scalarNode) = (yyvsp[-1].scalarNode); } 
     1487#line 1488 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16021488    break; 
    16031489 
    16041490  case 20: 
    1605 /* Line 1792 of yacc.c  */ 
    1606 #line 85 "yacc_parser.yacc" 
    1607     { (yyval.filterNode) = new CFilterFieldExprNode(*(yyvsp[(1) - (1)].str)); delete (yyvsp[(1) - (1)].str); } 
     1491#line 84 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1492    { (yyval.scalarNode) = new CScalarUnaryOpExprNode(*(yyvsp[-3].str), (yyvsp[-1].scalarNode)); delete (yyvsp[-3].str); } 
     1493#line 1494 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16081494    break; 
    16091495 
    16101496  case 21: 
    1611 /* Line 1792 of yacc.c  */ 
    1612 #line 86 "yacc_parser.yacc" 
    1613     { (yyval.filterNode) = new CFilterTemporalFieldExprNode(*(yyvsp[(1) - (1)].str)); delete (yyvsp[(1) - (1)].str); } 
     1497#line 88 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1498    { (yyval.filterNode) = new CFilterFieldExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
     1499#line 1500 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16141500    break; 
    16151501 
    16161502  case 22: 
    1617 /* Line 1792 of yacc.c  */ 
    1618 #line 87 "yacc_parser.yacc" 
    1619     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "add", (yyvsp[(3) - (3)].filterNode)); } 
     1503#line 89 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1504    { (yyval.filterNode) = new CFilterTemporalFieldExprNode(*(yyvsp[0].str)); delete (yyvsp[0].str); } 
     1505#line 1506 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16201506    break; 
    16211507 
    16221508  case 23: 
    1623 /* Line 1792 of yacc.c  */ 
    1624 #line 88 "yacc_parser.yacc" 
    1625     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "minus", (yyvsp[(3) - (3)].filterNode)); } 
     1509#line 90 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1510    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "add", (yyvsp[0].filterNode)); } 
     1511#line 1512 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16261512    break; 
    16271513 
    16281514  case 24: 
    1629 /* Line 1792 of yacc.c  */ 
    1630 #line 89 "yacc_parser.yacc" 
    1631     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "mult", (yyvsp[(3) - (3)].filterNode)); } 
     1515#line 91 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1516    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "minus", (yyvsp[0].filterNode)); } 
     1517#line 1518 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16321518    break; 
    16331519 
    16341520  case 25: 
    1635 /* Line 1792 of yacc.c  */ 
    1636 #line 90 "yacc_parser.yacc" 
    1637     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "div", (yyvsp[(3) - (3)].filterNode)); } 
     1521#line 92 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1522    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "mult", (yyvsp[0].filterNode)); } 
     1523#line 1524 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16381524    break; 
    16391525 
    16401526  case 26: 
    1641 /* Line 1792 of yacc.c  */ 
    1642 #line 91 "yacc_parser.yacc" 
    1643     { (yyval.filterNode) = new CFilterUnaryOpExprNode("neg", (yyvsp[(2) - (2)].filterNode)); } 
     1527#line 93 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1528    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "div", (yyvsp[0].filterNode)); } 
     1529#line 1530 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16441530    break; 
    16451531 
    16461532  case 27: 
    1647 /* Line 1792 of yacc.c  */ 
    1648 #line 92 "yacc_parser.yacc" 
    1649     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "pow", (yyvsp[(3) - (3)].filterNode)); } 
     1533#line 94 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1534    { (yyval.filterNode) = new CFilterUnaryOpExprNode("neg", (yyvsp[0].filterNode)); } 
     1535#line 1536 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16501536    break; 
    16511537 
    16521538  case 28: 
    1653 /* Line 1792 of yacc.c  */ 
    1654 #line 93 "yacc_parser.yacc" 
    1655     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "eq", (yyvsp[(3) - (3)].filterNode)); } 
     1539#line 95 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1540    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "pow", (yyvsp[0].filterNode)); } 
     1541#line 1542 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16561542    break; 
    16571543 
    16581544  case 29: 
    1659 /* Line 1792 of yacc.c  */ 
    1660 #line 94 "yacc_parser.yacc" 
    1661     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "lt", (yyvsp[(3) - (3)].filterNode)); } 
     1545#line 96 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1546    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "eq", (yyvsp[0].filterNode)); } 
     1547#line 1548 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16621548    break; 
    16631549 
    16641550  case 30: 
    1665 /* Line 1792 of yacc.c  */ 
    1666 #line 95 "yacc_parser.yacc" 
    1667     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "gt", (yyvsp[(3) - (3)].filterNode)); } 
     1551#line 97 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1552    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "lt", (yyvsp[0].filterNode)); } 
     1553#line 1554 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16681554    break; 
    16691555 
    16701556  case 31: 
    1671 /* Line 1792 of yacc.c  */ 
    1672 #line 96 "yacc_parser.yacc" 
    1673     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "le", (yyvsp[(3) - (3)].filterNode)); } 
     1557#line 98 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1558    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "gt", (yyvsp[0].filterNode)); } 
     1559#line 1560 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16741560    break; 
    16751561 
    16761562  case 32: 
    1677 /* Line 1792 of yacc.c  */ 
    1678 #line 97 "yacc_parser.yacc" 
    1679     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "ge", (yyvsp[(3) - (3)].filterNode)); } 
     1563#line 99 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1564    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "le", (yyvsp[0].filterNode)); } 
     1565#line 1566 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16801566    break; 
    16811567 
    16821568  case 33: 
    1683 /* Line 1792 of yacc.c  */ 
    1684 #line 98 "yacc_parser.yacc" 
    1685     { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[(1) - (3)].filterNode), "ne", (yyvsp[(3) - (3)].filterNode)); } 
     1569#line 100 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1570    { (yyval.filterNode) = new CFilterFieldFieldOpExprNode((yyvsp[-2].filterNode), "ge", (yyvsp[0].filterNode)); } 
     1571#line 1572 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16861572    break; 
    16871573 
    16881574  case 34: 
    1689 /* Line 1792 of yacc.c  */ 
    1690 #line 99 "yacc_parser.yacc" 
    1691     { (yyval.filterNode) = (yyvsp[(2) - (3)].filterNode); } 
     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  */ 
    16921578    break; 
    16931579 
    16941580  case 35: 
    1695 /* Line 1792 of yacc.c  */ 
    1696 #line 100 "yacc_parser.yacc" 
    1697     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "add", (yyvsp[(3) - (3)].scalarNode)); } 
     1581#line 102 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1582    { (yyval.filterNode) = (yyvsp[-1].filterNode); } 
     1583#line 1584 "yacc_parser.cpp" /* yacc.c:1646  */ 
    16981584    break; 
    16991585 
    17001586  case 36: 
    1701 /* Line 1792 of yacc.c  */ 
    1702 #line 101 "yacc_parser.yacc" 
    1703     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "add", (yyvsp[(3) - (3)].filterNode)); } 
     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  */ 
    17041590    break; 
    17051591 
    17061592  case 37: 
    1707 /* Line 1792 of yacc.c  */ 
    1708 #line 102 "yacc_parser.yacc" 
    1709     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "minus", (yyvsp[(3) - (3)].scalarNode)); } 
     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  */ 
    17101596    break; 
    17111597 
    17121598  case 38: 
    1713 /* Line 1792 of yacc.c  */ 
    1714 #line 103 "yacc_parser.yacc" 
    1715     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "minus", (yyvsp[(3) - (3)].filterNode)); } 
     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  */ 
    17161602    break; 
    17171603 
    17181604  case 39: 
    1719 /* Line 1792 of yacc.c  */ 
    1720 #line 104 "yacc_parser.yacc" 
    1721     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "mult", (yyvsp[(3) - (3)].scalarNode)); } 
     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  */ 
    17221608    break; 
    17231609 
    17241610  case 40: 
    1725 /* Line 1792 of yacc.c  */ 
    1726 #line 105 "yacc_parser.yacc" 
    1727     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "mult", (yyvsp[(3) - (3)].filterNode)); } 
     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  */ 
    17281614    break; 
    17291615 
    17301616  case 41: 
    1731 /* Line 1792 of yacc.c  */ 
    1732 #line 106 "yacc_parser.yacc" 
    1733     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "div", (yyvsp[(3) - (3)].scalarNode)); } 
     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  */ 
    17341620    break; 
    17351621 
    17361622  case 42: 
    1737 /* Line 1792 of yacc.c  */ 
    1738 #line 107 "yacc_parser.yacc" 
    1739     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "div", (yyvsp[(3) - (3)].filterNode)); } 
     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  */ 
    17401626    break; 
    17411627 
    17421628  case 43: 
    1743 /* Line 1792 of yacc.c  */ 
    1744 #line 108 "yacc_parser.yacc" 
    1745     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "pow", (yyvsp[(3) - (3)].scalarNode)); } 
     1629#line 110 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1630    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "add", (yyvsp[0].scalarNode)); } 
     1631#line 1632 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17461632    break; 
    17471633 
    17481634  case 44: 
    1749 /* Line 1792 of yacc.c  */ 
    1750 #line 109 "yacc_parser.yacc" 
    1751     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "eq", (yyvsp[(3) - (3)].scalarNode)); } 
     1635#line 111 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1636    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "add", (yyvsp[0].filterNode)); } 
     1637#line 1638 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17521638    break; 
    17531639 
    17541640  case 45: 
    1755 /* Line 1792 of yacc.c  */ 
    1756 #line 110 "yacc_parser.yacc" 
    1757     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "eq", (yyvsp[(3) - (3)].filterNode)); } 
     1641#line 112 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1642    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "minus", (yyvsp[0].scalarNode)); } 
     1643#line 1644 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17581644    break; 
    17591645 
    17601646  case 46: 
    1761 /* Line 1792 of yacc.c  */ 
    1762 #line 111 "yacc_parser.yacc" 
    1763     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "lt", (yyvsp[(3) - (3)].scalarNode)); } 
     1647#line 113 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1648    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "minus", (yyvsp[0].filterNode)); } 
     1649#line 1650 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17641650    break; 
    17651651 
    17661652  case 47: 
    1767 /* Line 1792 of yacc.c  */ 
    1768 #line 112 "yacc_parser.yacc" 
    1769     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "lt", (yyvsp[(3) - (3)].filterNode)); } 
     1653#line 114 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1654    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "mult", (yyvsp[0].scalarNode)); } 
     1655#line 1656 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17701656    break; 
    17711657 
    17721658  case 48: 
    1773 /* Line 1792 of yacc.c  */ 
    1774 #line 113 "yacc_parser.yacc" 
    1775     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "gt", (yyvsp[(3) - (3)].scalarNode)); } 
     1659#line 115 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1660    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "mult", (yyvsp[0].filterNode)); } 
     1661#line 1662 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17761662    break; 
    17771663 
    17781664  case 49: 
    1779 /* Line 1792 of yacc.c  */ 
    1780 #line 114 "yacc_parser.yacc" 
    1781     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "gt", (yyvsp[(3) - (3)].filterNode)); } 
     1665#line 116 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1666    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "div", (yyvsp[0].scalarNode)); } 
     1667#line 1668 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17821668    break; 
    17831669 
    17841670  case 50: 
    1785 /* Line 1792 of yacc.c  */ 
    1786 #line 115 "yacc_parser.yacc" 
    1787     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "le", (yyvsp[(3) - (3)].scalarNode)); } 
     1671#line 117 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1672    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "div", (yyvsp[0].filterNode)); } 
     1673#line 1674 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17881674    break; 
    17891675 
    17901676  case 51: 
    1791 /* Line 1792 of yacc.c  */ 
    1792 #line 116 "yacc_parser.yacc" 
    1793     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "le", (yyvsp[(3) - (3)].filterNode)); } 
     1677#line 118 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1678    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "pow", (yyvsp[0].scalarNode)); } 
     1679#line 1680 "yacc_parser.cpp" /* yacc.c:1646  */ 
    17941680    break; 
    17951681 
    17961682  case 52: 
    1797 /* Line 1792 of yacc.c  */ 
    1798 #line 117 "yacc_parser.yacc" 
    1799     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "ge", (yyvsp[(3) - (3)].scalarNode)); } 
     1683#line 119 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1684    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "eq", (yyvsp[0].scalarNode)); } 
     1685#line 1686 "yacc_parser.cpp" /* yacc.c:1646  */ 
    18001686    break; 
    18011687 
    18021688  case 53: 
    1803 /* Line 1792 of yacc.c  */ 
    1804 #line 118 "yacc_parser.yacc" 
    1805     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "ge", (yyvsp[(3) - (3)].filterNode)); } 
     1689#line 120 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1690    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "eq", (yyvsp[0].filterNode)); } 
     1691#line 1692 "yacc_parser.cpp" /* yacc.c:1646  */ 
    18061692    break; 
    18071693 
    18081694  case 54: 
    1809 /* Line 1792 of yacc.c  */ 
    1810 #line 119 "yacc_parser.yacc" 
    1811     { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[(1) - (3)].filterNode), "ne", (yyvsp[(3) - (3)].scalarNode)); } 
     1695#line 121 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1696    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "lt", (yyvsp[0].scalarNode)); } 
     1697#line 1698 "yacc_parser.cpp" /* yacc.c:1646  */ 
    18121698    break; 
    18131699 
    18141700  case 55: 
    1815 /* Line 1792 of yacc.c  */ 
    1816 #line 120 "yacc_parser.yacc" 
    1817     { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[(1) - (3)].scalarNode), "ne", (yyvsp[(3) - (3)].filterNode)); } 
     1701#line 122 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1702    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "lt", (yyvsp[0].filterNode)); } 
     1703#line 1704 "yacc_parser.cpp" /* yacc.c:1646  */ 
    18181704    break; 
    18191705 
    18201706  case 56: 
    1821 /* Line 1792 of yacc.c  */ 
    1822 #line 121 "yacc_parser.yacc" 
    1823     { (yyval.filterNode) = new CFilterUnaryOpExprNode(*(yyvsp[(1) - (4)].str), (yyvsp[(3) - (4)].filterNode)); delete (yyvsp[(1) - (4)].str); } 
    1824     break; 
    1825  
    1826  
    1827 /* Line 1792 of yacc.c  */ 
    1828 #line 1829 "yacc_parser.cpp" 
     1707#line 123 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1708    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "gt", (yyvsp[0].scalarNode)); } 
     1709#line 1710 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1710    break; 
     1711 
     1712  case 57: 
     1713#line 124 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1714    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "gt", (yyvsp[0].filterNode)); } 
     1715#line 1716 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1716    break; 
     1717 
     1718  case 58: 
     1719#line 125 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1720    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "le", (yyvsp[0].scalarNode)); } 
     1721#line 1722 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1722    break; 
     1723 
     1724  case 59: 
     1725#line 126 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1726    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "le", (yyvsp[0].filterNode)); } 
     1727#line 1728 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1728    break; 
     1729 
     1730  case 60: 
     1731#line 127 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1732    { (yyval.filterNode) = new CFilterFieldScalarOpExprNode((yyvsp[-2].filterNode), "ge", (yyvsp[0].scalarNode)); } 
     1733#line 1734 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1734    break; 
     1735 
     1736  case 61: 
     1737#line 128 "yacc_parser.yacc" /* yacc.c:1646  */ 
     1738    { (yyval.filterNode) = new CFilterScalarFieldOpExprNode((yyvsp[-2].scalarNode), "ge", (yyvsp[0].filterNode)); } 
     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  */ 
     1756    { (yyval.filterNode) = new CFilterUnaryOpExprNode(*(yyvsp[-3].str), (yyvsp[-1].filterNode)); delete (yyvsp[-3].str); } 
     1757#line 1758 "yacc_parser.cpp" /* yacc.c:1646  */ 
     1758    break; 
     1759 
     1760 
     1761#line 1762 "yacc_parser.cpp" /* yacc.c:1646  */ 
    18291762      default: break; 
    18301763    } 
     
    18481781  *++yyvsp = yyval; 
    18491782 
    1850   /* Now `shift' the result of the reduction.  Determine what state 
     1783  /* Now 'shift' the result of the reduction.  Determine what state 
    18511784     that goes to, based on the state we popped back to and the rule 
    18521785     number reduced by.  */ 
     
    18631796 
    18641797 
    1865 /*------------------------------------. 
    1866 | yyerrlab -- here on detecting error | 
    1867 `------------------------------------*/ 
     1798/*--------------------------------------. 
     1799| yyerrlab -- here on detecting error. | 
     1800`--------------------------------------*/ 
    18681801yyerrlab: 
    18691802  /* Make sure we have latest lookahead translation.  See comments at 
     
    19161849    { 
    19171850      /* If just tried and failed to reuse lookahead token after an 
    1918         error, discard it.  */ 
     1851        error, discard it.  */ 
    19191852 
    19201853      if (yychar <= YYEOF) 
    1921         { 
    1922           /* Return failure if at end of input.  */ 
    1923           if (yychar == YYEOF) 
    1924             YYABORT; 
    1925         } 
     1854        { 
     1855          /* Return failure if at end of input.  */ 
     1856          if (yychar == YYEOF) 
     1857            YYABORT; 
     1858        } 
    19261859      else 
    1927         { 
    1928           yydestruct ("Error: discarding", 
    1929                       yytoken, &yylval); 
    1930           yychar = YYEMPTY; 
    1931         } 
     1860        { 
     1861          yydestruct ("Error: discarding", 
     1862                      yytoken, &yylval); 
     1863          yychar = YYEMPTY; 
     1864        } 
    19321865    } 
    19331866 
     
    19481881     goto yyerrorlab; 
    19491882 
    1950   /* Do not reclaim the symbols of the rule which action triggered 
     1883  /* Do not reclaim the symbols of the rule whose action triggered 
    19511884     this YYERROR.  */ 
    19521885  YYPOPSTACK (yylen); 
     
    19611894`-------------------------------------------------------------*/ 
    19621895yyerrlab1: 
    1963   yyerrstatus = 3;      /* Each real token shifted decrements this.  */ 
     1896  yyerrstatus = 3;      /* Each real token shifted decrements this.  */ 
    19641897 
    19651898  for (;;) 
     
    19671900      yyn = yypact[yystate]; 
    19681901      if (!yypact_value_is_default (yyn)) 
    1969         { 
    1970           yyn += YYTERROR; 
    1971           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 
    1972             { 
    1973               yyn = yytable[yyn]; 
    1974               if (0 < yyn) 
    1975                 break; 
    1976             } 
    1977         } 
     1902        { 
     1903          yyn += YYTERROR; 
     1904          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 
     1905            { 
     1906              yyn = yytable[yyn]; 
     1907              if (0 < yyn) 
     1908                break; 
     1909            } 
     1910        } 
    19781911 
    19791912      /* Pop the current state because it cannot handle the error token.  */ 
    19801913      if (yyssp == yyss) 
    1981         YYABORT; 
     1914        YYABORT; 
    19821915 
    19831916 
    19841917      yydestruct ("Error: popping", 
    1985                   yystos[yystate], yyvsp); 
     1918                  yystos[yystate], yyvsp); 
    19861919      YYPOPSTACK (1); 
    19871920      yystate = *yyssp; 
     
    20341967                  yytoken, &yylval); 
    20351968    } 
    2036   /* Do not reclaim the symbols of the rule which action triggered 
     1969  /* Do not reclaim the symbols of the rule whose action triggered 
    20371970     this YYABORT or YYACCEPT.  */ 
    20381971  YYPOPSTACK (yylen); 
     
    20411974    { 
    20421975      yydestruct ("Cleanup: popping", 
    2043                   yystos[*yyssp], yyvsp); 
     1976                  yystos[*yyssp], yyvsp); 
    20441977      YYPOPSTACK (1); 
    20451978    } 
     
    20521985    YYSTACK_FREE (yymsg); 
    20531986#endif 
    2054   /* Make sure YYID is used.  */ 
    2055   return YYID (yyresult); 
     1987  return yyresult; 
    20561988} 
    2057  
    2058  
    2059 /* Line 2055 of yacc.c  */ 
    2060 #line 123 "yacc_parser.yacc" 
     1989#line 133 "yacc_parser.yacc" /* yacc.c:1906  */ 
    20611990 
    20621991 
  • XIOS/trunk/src/parse_expr/yacc_parser.hpp

    r1019 r1038  
    1 /* A Bison parser, made by GNU Bison 2.7.  */ 
     1/* A Bison parser, made by GNU Bison 3.0.2.  */ 
    22 
    33/* Bison interface for Yacc-like parsers in C 
    4     
    5       Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. 
    6     
     4 
     5   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. 
     6 
    77   This program is free software: you can redistribute it and/or modify 
    88   it under the terms of the GNU General Public License as published by 
    99   the Free Software Foundation, either version 3 of the License, or 
    1010   (at your option) any later version. 
    11     
     11 
    1212   This program is distributed in the hope that it will be useful, 
    1313   but WITHOUT ANY WARRANTY; without even the implied warranty of 
    1414   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1515   GNU General Public License for more details. 
    16     
     16 
    1717   You should have received a copy of the GNU General Public License 
    1818   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
     
    2727   Bison output files to be licensed under the GNU General Public 
    2828   License without this special exception. 
    29     
     29 
    3030   This special exception was added by the Free Software Foundation in 
    3131   version 2.2 of Bison.  */ 
     
    3333#ifndef YY_YY_YACC_PARSER_HPP_INCLUDED 
    3434# define YY_YY_YACC_PARSER_HPP_INCLUDED 
    35 /* Enabling traces.  */ 
     35/* Debug traces.  */ 
    3636#ifndef YYDEBUG 
    3737# define YYDEBUG 0 
     
    4141#endif 
    4242 
    43 /* Tokens.  */ 
     43/* Token type.  */ 
    4444#ifndef YYTOKENTYPE 
    4545# define YYTOKENTYPE 
    46    /* Put the tokens into the symbol table, so that GDB and other debuggers 
    47       know about them.  */ 
    48    enum yytokentype { 
    49      NUMBER = 258, 
    50      VAR = 259, 
    51      ID = 260, 
    52      AVERAGE = 261, 
    53      PLUS = 262, 
    54      MINUS = 263, 
    55      TIMES = 264, 
    56      DIVIDE = 265, 
    57      POWER = 266, 
    58      EQ = 267, 
    59      LT = 268, 
    60      GT = 269, 
    61      LE = 270, 
    62      GE = 271, 
    63      NE = 272, 
    64      LEFT_PARENTHESIS = 273, 
    65      RIGHT_PARENTHESIS = 274, 
    66      END = 275, 
    67      NEG = 276 
    68    }; 
     46  enum yytokentype 
     47  { 
     48    NUMBER = 258, 
     49    VAR = 259, 
     50    ID = 260, 
     51    AVERAGE = 261, 
     52    PLUS = 262, 
     53    MINUS = 263, 
     54    TIMES = 264, 
     55    DIVIDE = 265, 
     56    POWER = 266, 
     57    EQ = 267, 
     58    LT = 268, 
     59    GT = 269, 
     60    LE = 270, 
     61    GE = 271, 
     62    NE = 272, 
     63    LEFT_PARENTHESIS = 273, 
     64    RIGHT_PARENTHESIS = 274, 
     65    QUESTION_MARK = 275, 
     66    COLON = 276, 
     67    END = 277, 
     68    NEG = 278 
     69  }; 
    6970#endif 
    7071 
    71  
     72/* Value type.  */ 
    7273#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 
    73 typedef union YYSTYPE 
     74typedef union YYSTYPE YYSTYPE; 
     75union YYSTYPE 
    7476{ 
    75 /* Line 2058 of yacc.c  */ 
    76 #line 35 "yacc_parser.yacc" 
     77#line 35 "yacc_parser.yacc" /* yacc.c:1909  */ 
    7778 
    7879  std::string* str;                /* symbol table index */ 
     
    8081  xios::IFilterExprNode* filterNode; 
    8182 
    82  
    83 /* Line 2058 of yacc.c  */ 
    84 #line 85 "yacc_parser.hpp" 
    85 } YYSTYPE; 
     83#line 84 "yacc_parser.hpp" /* yacc.c:1909  */ 
     84}; 
    8685# define YYSTYPE_IS_TRIVIAL 1 
    87 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 
    8886# define YYSTYPE_IS_DECLARED 1 
    8987#endif 
    9088 
     89 
    9190extern YYSTYPE yylval; 
    9291 
    93 #ifdef YYPARSE_PARAM 
    94 #if defined __STDC__ || defined __cplusplus 
    95 int yyparse (void *YYPARSE_PARAM); 
    96 #else 
    97 int yyparse (); 
    98 #endif 
    99 #else /* ! YYPARSE_PARAM */ 
    100 #if defined __STDC__ || defined __cplusplus 
    10192int yyparse (void); 
    102 #else 
    103 int yyparse (); 
    104 #endif 
    105 #endif /* ! YYPARSE_PARAM */ 
    10693 
    10794#endif /* !YY_YY_YACC_PARSER_HPP_INCLUDED  */ 
  • XIOS/trunk/src/parse_expr/yacc_parser.yacc

    r1019 r1038  
    4444%token EQ LT GT LE GE NE 
    4545%token LEFT_PARENTHESIS RIGHT_PARENTHESIS 
     46%token QUESTION_MARK COLON 
    4647%token <str> END 
    4748 
     49%nonassoc QUESTION_MARK COLON 
    4850%left EQ LT GT LE GE NE 
    4951%left PLUS MINUS 
     
    7880          | Expression GE Expression  { $$ = new CScalarBinaryOpExprNode($1, "ge", $3); } 
    7981          | Expression NE Expression  { $$ = new CScalarBinaryOpExprNode($1, "ne", $3); } 
     82          | Expression QUESTION_MARK Expression COLON Expression {$$ = new CScalarTernaryOpExprNode($1, "cond", $3, $5);}  
    8083          | LEFT_PARENTHESIS Expression RIGHT_PARENTHESIS    { $$ = $2; } 
    8184          | ID LEFT_PARENTHESIS Expression RIGHT_PARENTHESIS { $$ = new CScalarUnaryOpExprNode(*$1, $3); delete $1; } 
     
    98101          | Field_expr NE Field_expr { $$ = new CFilterFieldFieldOpExprNode($1, "ne", $3); } 
    99102          | 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);} 
    100110          | Field_expr PLUS Expression   { $$ = new CFilterFieldScalarOpExprNode($1, "add", $3); } 
    101111          | Expression PLUS Field_expr   { $$ = new CFilterScalarFieldOpExprNode($1, "add", $3); } 
Note: See TracChangeset for help on using the changeset viewer.