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

📄 xpath_syntax.cpp

📁 j2me is based on j2mepolish, client & server for mobile application.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
               break;
            default :
               if (! o_recognize (xpath_name_test, o_final))
                  return false;
               if (o_final)
                  v_action (xpath_node_test, xpath_node_test_name_test);
         }
         break;

      case xpath_predicate :
         // [8]   Predicate				::=   '[' PredicateExpr ']' 
         if (! ltp_get (1))
            return false;
         if (ltp_get (0) -> lex_get_value () != lex_obrack)
            return false;
         v_inc_current (1);
         if (! o_recognize (xpath_predicate_expr, o_final))
            return false;
         if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_cbrack)
            return false;
         v_inc_current (1);
         if (o_final)
            v_action (xpath_predicate, 0);
         break;

      case xpath_predicate_expr :
         // [9]   PredicateExpr			::=   Expr
         if (! o_recognize (xpath_expr, o_final))
            return false;
         if (o_final)
            v_action (xpath_predicate_expr, 0);
         break;

      case xpath_abbreviated_absolute_location_path :
         // [10]   AbbreviatedAbsoluteLocationPath	::=   '//' RelativeLocationPath 
         if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_2_slash)
            return false;
         v_inc_current (1);
         if (! o_recognize (xpath_relative_location_path, o_final))
            return false;
         if (o_final)
            v_action (xpath_abbreviated_absolute_location_path, 0);
         break;

      // Note : [11] is processed by [3]

      case xpath_abbrieviated_step :
         // [12]   AbbreviatedStep					::=   '.' | '..' 
         if (! ltp_get (0))
            return false;
         switch (ltp_get (0) -> lex_get_value ())
         {
            case lex_dot :
               v_inc_current (1);
               if (o_final)
                  v_action (xpath_abbrieviated_step, 0);
               break;
            case lex_2_dot :
               v_inc_current (1);
               if (o_final)
                  v_action (xpath_abbrieviated_step, 1);
               break;
            default :
               return false;
         }
         break;

      // Note : [13] processed by [5]

      case xpath_expr :
         //
         // [14]   Expr					::=   OrExpr 
         //
         if (! ltp_get (0))
            return false;
         if (! o_recognize (xpath_or_expr, o_final))
            return false;
         if (o_final)
            v_action (xpath_expr, 0);
         break;

      case xpath_primary_expr :
         // [15]   PrimaryExpr			::=   VariableReference
			// 				            | '(' Expr ')' 
			// 				            | Literal 
			// 				            | Number 
			// 				            | FunctionCall
         if (! ltp_get (0))
            return false;
         switch (ltp_get (0) -> lex_get_value ())
         {
            case lex_dollar :
               if (! o_recognize (xpath_variable_reference, o_final))
                  return false;
               if (o_final)
                  v_action (xpath_primary_expr, xpath_primary_expr_variable);
               break;
            case lex_oparen :
               v_inc_current (1);
               if (! o_recognize (xpath_expr, o_final))
                  return false;
               if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_cparen)
                  return false;
               v_inc_current (1);
               if (o_final)
                  v_action (xpath_primary_expr, xpath_primary_expr_paren_expr);
               break;
            case lex_literal :
               if (o_final)
                  v_action (xpath_primary_expr, xpath_primary_expr_literal, 0, ltp_get (0) -> cp_get_literal ());
               v_inc_current (1);
               break;
            case lex_number :
               if (o_final)
                  v_action (xpath_primary_expr, xpath_primary_expr_number, 0, ltp_get (0) -> cp_get_literal ());
               v_inc_current (1);
               break;
            default :
               if (! o_recognize (xpath_function_call, o_final))
                  return false;
               if (o_final)
                  v_action (xpath_primary_expr, xpath_primary_expr_function_call);
               break;
         }
         break;

      case xpath_function_call :
         // [16]   FunctionCall			::=   FunctionName '(' ( Argument ( ',' Argument )* )? ')' 
         // [35]   FunctionName	      ::=  	QName - node_type
         if (! ltp_get (0))
            return false;
         switch (ltp_get (0) -> lex_get_value ())
         {
            case lex_comment :
            case lex_text :
            case lex_node :
            case lex_processing_instruction :
               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_recognize (xpath_xml_q_name, o_final))
                  return false;
         }
         if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_oparen)
            return false;
         v_inc_current (1);
         if (! ltp_get (0))
            return false;
         if (ltp_get (0) -> lex_get_value () == lex_cparen)
         {
            v_inc_current (1);
            if (o_final)
               v_action (xpath_function_call, 0);
         }
         else
         {
            ltp_freeze = ltp_get (0);
            o_found = true;
            u_nb_argument = 0;
            while (o_found)
            {
               if (u_nb_argument)
               {
                  if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_comma)
                     o_found = false;
                  else
                     v_inc_current (1);
               }
               if (o_found)
               {
                  if (! o_recognize (xpath_argument, o_final))
                     o_found = false;
                  else
                  {
                     u_nb_argument++;
                     ltp_freeze = ltp_get (0);
                  }
               }
            }
            v_set_current (ltp_freeze);
            if (! ltp_get (0) || ltp_get (0) -> lex_get_value () != lex_cparen)
               return false;
            v_inc_current (1);
            if (o_final)
               v_action (xpath_function_call, 1, u_nb_argument);
         }
         break;

      case xpath_argument :
         // [17]   Argument				::=   Expr
         if (! o_recognize (xpath_expr, o_final))
            return false;
         if (o_final)
            v_action (xpath_argument, 0);
         break;

      case xpath_union_expr :
         //
         // [18]   UnionExpr			::=   PathExpr 
			// 					         | UnionExpr '|' PathExpr 
         //
         if (! o_recognize (xpath_path_expr, o_final))
            return false;
         if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_orchar)
         {
            v_inc_current (1);
            if (! o_recognize (xpath_union_expr, o_final))
               return false;
            if (o_final)
               v_action (xpath_union_expr, xpath_union_expr_union);
         }
         else
            if (o_final)
               v_action (xpath_union_expr, xpath_union_expr_simple);
         break;

      case xpath_path_expr :
         //
         // [19]   PathExpr				::=   LocationPath 
         // 	        							| FilterExpr 
         // 			      					| FilterExpr '/' RelativeLocationPath 
         // 					      			| FilterExpr '//' RelativeLocationPath 
         //
         ltp_freeze = ltp_get (0);
         o_location_path = false;

         if (! o_recognize (xpath_filter_expr, false))
            o_location_path = true;
         else
         {
            v_set_current (ltp_freeze);
            o_recognize (xpath_filter_expr, o_final);
            if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_slash)
            {
               v_inc_current (1);
               if (! o_recognize (xpath_relative_location_path, o_final))
                  o_location_path = true;
               else
                  if (o_final)
                     v_action (xpath_path_expr, xpath_path_expr_slash);
            }
            else
               if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_2_slash)
               {
                  v_inc_current (1);
                  if (! o_recognize (xpath_relative_location_path, o_final))
                     o_location_path = true;
                  else
                     if (o_final)
                        v_action (xpath_path_expr, xpath_path_expr_2_slash);
               }
               else
               {
                  if (o_final)
                     v_action (xpath_path_expr, xpath_path_expr_filter);
               }
         }

         if (o_location_path)
         {
            v_set_current (ltp_freeze);
            if (! o_recognize (xpath_location_path, o_final))
               return false;
            if (o_final)
               v_action (xpath_path_expr, xpath_path_expr_location_path);
         }
         break;

      case xpath_filter_expr :
         //
         // [20]   FilterExpr			::=   PrimaryExpr 
			// 				            | FilterExpr Predicate
         //
         if (! o_recognize (xpath_primary_expr, o_final))
            return false;
         if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_obrack)
         {
            if (! o_recognize (xpath_predicate, o_final))
               return false;
            if (o_final)
               v_action (xpath_filter_expr, xpath_filter_expr_predicate);
         }
         else
            if (o_final)
               v_action (xpath_filter_expr, xpath_filter_expr_primary);
         break;

      case xpath_or_expr :
         //
         // [21]   OrExpr				::=   AndExpr 
			// 					         | OrExpr 'or' AndExpr 
         //
         o_test_more = false;
         if (! o_recognize (xpath_and_expr, o_final))
            return false;
         if (ltp_get (0) && ltp_get (0) -> lex_get_value () == lex_or)
         {
            v_inc_current (1);
            if (! o_recognize (xpath_and_expr, o_final))
               return false;
            if (o_final)
               v_action (xpath_or_expr, xpath_or_expr_or);
            o_test_more = true;
         }
         else
            if (o_final)
               v_action (xpath_or_expr, xpath_or_expr_simple);
         if (o_test_more)
         {
            while (ltp_get (0) && (ltp_get (0) ->lex_get_value () == lex_or ))
            {
               v_inc_current (1);
               if (! o_recognize (xpath_and_expr, o_final))
                  return false;
               if (o_final)
                  v_action (xpath_or_expr, xpath_or_expr_more);				
            } 
         }		
         break;

      case xpath_and_expr :
         //
         // [22]   AndExpr				::=   EqualityExpr 
         // 								| AndExpr 'and' EqualityExpr 
         //
         if (! o_recognize (xpath_equality_expr, o_final))
            return false;

⌨️ 快捷键说明

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