⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpath_syntax.cpp

📁 j2me is based on j2mepolish, client & server for mobile application.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
         if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_and)
         {
            v_inc_current (1);
            if (! o_recognize (xpath_equality_expr, o_final))
               return false;
            if (o_final)
               v_action (xpath_and_expr, xpath_and_expr_and);
         }
         else
            if (o_final)
               v_action (xpath_and_expr, xpath_and_expr_simple);
         break;

      case xpath_equality_expr :
         //
         // [23]   EqualityExpr			::=   RelationalExpr 
			// 					         | EqualityExpr '=' RelationalExpr 
			// 					         | EqualityExpr '!=' RelationalExpr 
         //
         if (! o_recognize (xpath_relational_expr, o_final))
            return false;
         if (ltp_get (0))
         {
            switch (ltp_get (0) -> lex_get_value ())
            {
               case lex_equal :
                  v_inc_current (1);
                  if (! o_recognize (xpath_relational_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_equality_expr, xpath_equality_expr_equal);
                  break;

               case lex_not_equal :
                  v_inc_current (1);
                  if (! o_recognize (xpath_relational_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_equality_expr, xpath_equality_expr_not_equal);
                  break;

               default :
                  if (o_final)
                     v_action (xpath_equality_expr, xpath_equality_expr_simple);
                  break;
            }
         }
         else
         {
            if (o_final)
               v_action (xpath_equality_expr, xpath_equality_expr_simple);
         }
         break;

      case xpath_relational_expr :
         //
         // [24]   RelationalExpr		::=   AdditiveExpr 
			// 					         | RelationalExpr '<' AdditiveExpr 
			// 					         | RelationalExpr '>' AdditiveExpr 
			// 					         | RelationalExpr '<=' AdditiveExpr 
			// 					         | RelationalExpr '>=' AdditiveExpr
         //
         if (! o_recognize (xpath_additive_expr, o_final))
            return false;
         if (ltp_get (0))
         {
            switch (ltp_get (0) -> lex_get_value ())
            {
               case lex_lt :
                  v_inc_current (1);
                  if (! o_recognize (xpath_additive_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_relational_expr, xpath_relational_expr_lt);
                  break;
               case lex_gt :
                  v_inc_current (1);
                  if (! o_recognize (xpath_additive_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_relational_expr, xpath_relational_expr_gt);
                  break;
               case lex_lt_equal :
                  v_inc_current (1);
                  if (! o_recognize (xpath_additive_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_relational_expr, xpath_relational_expr_lte);
                  break;
               case lex_gt_equal :
                  v_inc_current (1);
                  if (! o_recognize (xpath_additive_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_relational_expr, xpath_relational_expr_gte);
                  break;
               default :
                  if (o_final)
                     v_action (xpath_relational_expr, xpath_relational_expr_simple);
                  break;
            }     // switch
         }
         else
            if (o_final)
               v_action (xpath_relational_expr, xpath_relational_expr_simple);
         break;

      case xpath_additive_expr :
         // 
         // [25]   AdditiveExpr			::=   MultiplicativeExpr 
			// 					         | AdditiveExpr '+' MultiplicativeExpr 
			// 					         | AdditiveExpr '-' MultiplicativeExpr 
         // 
         if (! o_recognize (xpath_multiplicative_expr, o_final))
            return false;
         o_test_more = false;
         if (ltp_get (0))
         {
            switch (ltp_get (0) -> lex_get_value ())
            {
               case lex_plus :
                  v_inc_current (1);
                  if (! o_recognize (xpath_multiplicative_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_additive_expr, xpath_additive_expr_plus);
                  o_test_more = true;
                  break;
               case lex_minus :
                  v_inc_current (1);
                  if (! o_recognize (xpath_multiplicative_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_additive_expr, xpath_additive_expr_minus);
                  o_test_more = true;
                  break;
               default :
                  if (o_final)
                     v_action (xpath_additive_expr, xpath_additive_expr_simple);
                  break;
            }     // switch
         }
         else
            if (o_final)
               v_action (xpath_additive_expr, xpath_additive_expr_simple);
         if (o_test_more)
         {
            while (ltp_get (0) && (ltp_get (0) -> lex_get_value () == lex_plus || ltp_get (0) -> lex_get_value () == lex_minus))
            {
               if (ltp_get (0) -> lex_get_value () == lex_plus)
               {
                  v_inc_current (1);
                  if (! o_recognize (xpath_multiplicative_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_additive_expr, xpath_additive_expr_more_plus);
               }
               else
               {
                  v_inc_current (1);
                  if (! o_recognize (xpath_multiplicative_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_additive_expr, xpath_additive_expr_more_minus);
               }
            } 
         }
         break;

      case xpath_multiplicative_expr :
         //
         // [26]   MultiplicativeExpr   ::=   UnaryExpr 
			// 					         | MultiplicativeExpr MultiplyOperator UnaryExpr 
			// 					         | MultiplicativeExpr 'div' UnaryExpr 
			// 					         | MultiplicativeExpr 'mod' UnaryExpr 
         //
         if (! o_recognize (xpath_unary_expr, o_final))
            return false;
         if (ltp_get (0))
         {
            switch (ltp_get (0) -> lex_get_value ())
            {
               case lex_star :
                  //
                  // [34]   MultiplyOperator		::=   '*' 
                  //
                  v_inc_current (1);
                  if (! o_recognize (xpath_unary_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_multiplicative_expr, xpath_multiplicative_expr_star);
                  break;
               case lex_div :
                  v_inc_current (1);
                  if (! o_recognize (xpath_unary_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_multiplicative_expr, xpath_multiplicative_expr_div);
                  break;
               case lex_mod :
                  v_inc_current (1);
                  if (! o_recognize (xpath_unary_expr, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_multiplicative_expr, xpath_multiplicative_expr_mod);
                  break;
               default :
                  if (o_final)
                     v_action (xpath_multiplicative_expr, xpath_multiplicative_expr_simple);
                  break;
            }
         }
         else
            if (o_final)
               v_action (xpath_multiplicative_expr, xpath_multiplicative_expr_simple);
         break;

      case xpath_unary_expr :
         //
         // [27]   UnaryExpr			::=   UnionExpr 
			// 					         | '-' UnaryExpr
         //
         if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_minus)
         {
            v_inc_current (1);
            if (! o_recognize (xpath_unary_expr, o_final))
               return false;
            if (o_final)
               v_action (xpath_unary_expr, xpath_unary_expr_minus);
         }
         else
         {
            if (! o_recognize (xpath_union_expr, o_final))
               return false;
            if (o_final)
               v_action (xpath_unary_expr, xpath_unary_expr_simple);
         }
         break;

      case xpath_variable_reference :
         // [36]   VariableReference	::=   '$' QName 
         if (! ltp_get (0) || ! ltp_get (1))
            return false;
         if (ltp_get (0) -> lex_get_value () != lex_dollar)
            return false;
         v_inc_current (1);
         if (! o_recognize (xpath_xml_q_name, o_final))
            return false;
         if (o_final)
            v_action (xpath_variable_reference, 0);
         break;

      case xpath_name_test :
         // [37]   NameTest				::=   '*' 
			// 				            | NCName ':' '*' 
			// 				            | QName 
         if (! ltp_get (0))
            return false;
         switch (ltp_get (0) -> lex_get_value ())
         {
            case lex_star :
               v_inc_current (1);
               if (o_final)
                  v_action (xpath_name_test, xpath_name_test_star);
               break;
            case lex_ncname :
               o_qname = false;
               if (ltp_get (1) && ltp_get (2) && 
                   ltp_get (1) -> lex_get_value () == lex_colon)
               {
                  if (ltp_get (2) -> lex_get_value () == lex_star)
                  {
                     v_inc_current (3);
                     if (o_final)
                        v_action (xpath_name_test, xpath_name_test_ncname);
                  }
                  else
                     o_qname = true;
               }
               else
                  o_qname = true;
               if (o_qname)
               {
                  if (! o_recognize (xpath_xml_q_name, o_final))
                     return false;
                  if (o_final)
                     v_action (xpath_name_test, xpath_name_test_qname);
               }
               break;
         }
         break;

      case xpath_xml_q_name :
         // [Namespace XML : 6] QName					::= (Prefix ':')? LocalPart 
         // [Namespace XML : 7] Prefix					::= NCName 
         // [Namespace XML : 8] LocalPart				::= NCName
         if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_ncname)
            return false;
         if (ltp_get (1) && ltp_get (1) -> lex_get_value () == lex_colon)
         {
            if (! ltp_get (2) || ltp_get (2) -> lex_get_value () != lex_ncname)
               return false;
            if (o_final)
            {
               v_action (xpath_xml_prefix, 0, 0, ltp_get (0) -> cp_get_literal ());
               v_action (xpath_xml_local_part, 0, 0, ltp_get (2) -> cp_get_literal ());
               v_action (xpath_xml_q_name, xpath_xml_q_name_colon);
            }
            v_inc_current (3);
         }
         else
         {
            if (o_final)
            {
               v_action (xpath_xml_local_part, 0, 0, ltp_get (0) -> cp_get_literal ());
               v_action (xpath_xml_q_name, xpath_xml_q_name_simple);
            }
            v_inc_current (1);
         }
         break;

      default :
         if (o_final)
            v_action (xpath_unknown, 0);
         return false;
         break;
   }
   return true;
}     // v_recognize ()

} }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -