亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? lr_parser.java

?? jflex-1.4.zip for the compiler construct
?? JAVA
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  /** Fetch an action from the action table.  The table is broken up into   *  rows, one per state (rows are indexed directly by state number).     *  Within each row, a list of index, value pairs are given (as sequential   *  entries in the table), and the list is terminated by a default entry    *  (denoted with a Symbol index of -1).  To find the proper entry in a row    *  we do a linear or binary search (depending on the size of the row).     *   * @param state the state index of the action being accessed.   * @param sym   the Symbol index of the action being accessed.   */  protected final short get_action(int state, int sym)    {      short tag;      int first, last, probe;      short[] row = action_tab[state];      /* linear search if we are < 10 entries */      if (row.length < 20)        for (probe = 0; probe < row.length; probe++)	  {	    /* is this entry labeled with our Symbol or the default? */	    tag = row[probe++];	    if (tag == sym || tag == -1)	      {	        /* return the next entry */	        return row[probe];	      }	  }      /* otherwise binary search */      else	{	  first = 0; 	  last = (row.length-1)/2 - 1;  /* leave out trailing default entry */	  while (first <= last)	    {	      probe = (first+last)/2;	      if (sym == row[probe*2])		return row[probe*2+1];	      else if (sym > row[probe*2])		first = probe+1;	      else	        last = probe-1;	    }	  /* not found, use the default at the end */	  return row[row.length-1];	}      /* shouldn't happened, but if we run off the end we return the 	 default (error == 0) */      return 0;    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Fetch a state from the reduce-goto table.  The table is broken up into   *  rows, one per state (rows are indexed directly by state number).     *  Within each row, a list of index, value pairs are given (as sequential   *  entries in the table), and the list is terminated by a default entry    *  (denoted with a Symbol index of -1).  To find the proper entry in a row    *  we do a linear search.     *   * @param state the state index of the entry being accessed.   * @param sym   the Symbol index of the entry being accessed.   */  protected final short get_reduce(int state, int sym)    {      short tag;      short[] row = reduce_tab[state];      /* if we have a null row we go with the default */      if (row == null)        return -1;      for (int probe = 0; probe < row.length; probe++)	{	  /* is this entry labeled with our Symbol or the default? */	  tag = row[probe++];	  if (tag == sym || tag == -1)	    {	      /* return the next entry */	      return row[probe];	    }	}      /* if we run off the end we return the default (error == -1) */      return -1;    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** This method provides the main parsing routine.  It returns only when    *  done_parsing() has been called (typically because the parser has    *  accepted, or a fatal error has been reported).  See the header    *  documentation for the class regarding how shift/reduce parsers operate   *  and how the various tables are used.   */  public Symbol parse() throws java.lang.Exception    {      /* the current action code */      int act;      /* the Symbol/stack element returned by a reduce */      Symbol lhs_sym = null;      /* information about production being reduced with */      short handle_size, lhs_sym_num;      /* set up direct reference to tables to drive the parser */      production_tab = production_table();      action_tab     = action_table();      reduce_tab     = reduce_table();      /* initialize the action encapsulation object */      init_actions();      /* do user initialization */      user_init();      /* get the first token */      cur_token = scan();       /* push dummy Symbol with start state to get us underway */      stack.removeAllElements();      stack.push(new Symbol(0, start_state()));      tos = 0;      /* continue until we are told to stop */      for (_done_parsing = false; !_done_parsing; )	{	  /* Check current token for freshness. */	  if (cur_token.used_by_parser)	    throw new Error("Symbol recycling detected (fix your scanner).");	  /* current state is always on the top of the stack */	  /* look up action out of the current state with the current input */	  act = get_action(((Symbol)stack.peek()).parse_state, cur_token.sym);	  /* decode the action -- > 0 encodes shift */	  if (act > 0)	    {	      /* shift to the encoded state by pushing it on the stack */	      cur_token.parse_state = act-1;	      cur_token.used_by_parser = true;	      stack.push(cur_token);	      tos++;	      /* advance to the next Symbol */	      cur_token = scan();	    }	  /* if its less than zero, then it encodes a reduce action */	  else if (act < 0)	    {	      /* perform the action for the reduce */	      lhs_sym = do_action((-act)-1, this, stack, tos);	      /* look up information about the production */	      lhs_sym_num = production_tab[(-act)-1][0];	      handle_size = production_tab[(-act)-1][1];	      /* pop the handle off the stack */	      for (int i = 0; i < handle_size; i++)		{		  stack.pop();		  tos--;		}	      	      /* look up the state to go to from the one popped back to */	      act = get_reduce(((Symbol)stack.peek()).parse_state, lhs_sym_num);	      /* shift to that state */	      lhs_sym.parse_state = act;	      lhs_sym.used_by_parser = true;	      stack.push(lhs_sym);	      tos++;	    }	  /* finally if the entry is zero, we have an error */	  else if (act == 0)	    {	      /* call user syntax error reporting routine */	      syntax_error(cur_token);	      /* try to error recover */	      if (!error_recovery(false))		{		  /* if that fails give up with a fatal syntax error */		  unrecovered_syntax_error(cur_token);		  /* just in case that wasn't fatal enough, end parse */		  done_parsing();		} else {		  lhs_sym = (Symbol)stack.peek();		}	    }	}      return lhs_sym;    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Write a debugging message to System.err for the debugging version    *  of the parser.    *   * @param mess the text of the debugging message.   */  public void debug_message(String mess)    {      System.err.println(mess);    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Dump the parse stack for debugging purposes. */  public void dump_stack()    {      if (stack == null)	{	  debug_message("# Stack dump requested, but stack is null");	  return;	}      debug_message("============ Parse Stack Dump ============");      /* dump the stack */      for (int i=0; i<stack.size(); i++)	{	  debug_message("Symbol: " + ((Symbol)stack.elementAt(i)).sym +			" State: " + ((Symbol)stack.elementAt(i)).parse_state);	}      debug_message("==========================================");    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Do debug output for a reduce.    *   * @param prod_num  the production we are reducing with.   * @param nt_num    the index of the LHS non terminal.   * @param rhs_size  the size of the RHS.   */  public void debug_reduce(int prod_num, int nt_num, int rhs_size)    {      debug_message("# Reduce with prod #" + prod_num + " [NT=" + nt_num + 	            ", " + "SZ=" + rhs_size + "]");    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Do debug output for shift.    *   * @param shift_tkn the Symbol being shifted onto the stack.   */  public void debug_shift(Symbol shift_tkn)    {      debug_message("# Shift under term #" + shift_tkn.sym + 		    " to state #" + shift_tkn.parse_state);    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Do debug output for stack state. [CSA]   */  public void debug_stack() {      StringBuffer sb=new StringBuffer("## STACK:");      for (int i=0; i<stack.size(); i++) {	  Symbol s = (Symbol) stack.elementAt(i);	  sb.append(" <state "+s.parse_state+", sym "+s.sym+">");	  if ((i%3)==2 || (i==(stack.size()-1))) {	      debug_message(sb.toString());	      sb = new StringBuffer("         ");	  }      }  }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Perform a parse with debugging output.  This does exactly the   *  same things as parse(), except that it calls debug_shift() and   *  debug_reduce() when shift and reduce moves are taken by the parser   *  and produces various other debugging messages.     */  public Symbol debug_parse()    throws java.lang.Exception    {      /* the current action code */      int act;      /* the Symbol/stack element returned by a reduce */      Symbol lhs_sym = null;      /* information about production being reduced with */      short handle_size, lhs_sym_num;      /* set up direct reference to tables to drive the parser */      production_tab = production_table();      action_tab     = action_table();      reduce_tab     = reduce_table();      debug_message("# Initializing parser");      /* initialize the action encapsulation object */      init_actions();      /* do user initialization */      user_init();      /* the current Symbol */      cur_token = scan();       debug_message("# Current Symbol is #" + cur_token.sym);      /* push dummy Symbol with start state to get us underway */      stack.removeAllElements();      stack.push(new Symbol(0, start_state()));      tos = 0;      /* continue until we are told to stop */      for (_done_parsing = false; !_done_parsing; )	{	  /* Check current token for freshness. */	  if (cur_token.used_by_parser)	    throw new Error("Symbol recycling detected (fix your scanner).");	  /* current state is always on the top of the stack */	  //debug_stack();	  /* look up action out of the current state with the current input */	  act = get_action(((Symbol)stack.peek()).parse_state, cur_token.sym);	  /* decode the action -- > 0 encodes shift */	  if (act > 0)	    {	      /* shift to the encoded state by pushing it on the stack */	      cur_token.parse_state = act-1;	      cur_token.used_by_parser = true;	      debug_shift(cur_token);	      stack.push(cur_token);	      tos++;	      /* advance to the next Symbol */	      cur_token = scan();              debug_message("# Current token is " + cur_token);	    }	  /* if its less than zero, then it encodes a reduce action */	  else if (act < 0)	    {	      /* perform the action for the reduce */	      lhs_sym = do_action((-act)-1, this, stack, tos);	      /* look up information about the production */	      lhs_sym_num = production_tab[(-act)-1][0];	      handle_size = production_tab[(-act)-1][1];	      debug_reduce((-act)-1, lhs_sym_num, handle_size);	      /* pop the handle off the stack */	      for (int i = 0; i < handle_size; i++)		{		  stack.pop();		  tos--;		}	      	      /* look up the state to go to from the one popped back to */	      act = get_reduce(((Symbol)stack.peek()).parse_state, lhs_sym_num);	      debug_message("# Reduce rule: top state " +			     ((Symbol)stack.peek()).parse_state +			     ", lhs sym " + lhs_sym_num + " -> state " + act); 	      /* shift to that state */	      lhs_sym.parse_state = act;	      lhs_sym.used_by_parser = true;	      stack.push(lhs_sym);	      tos++;	      debug_message("# Goto state #" + act);	    }	  /* finally if the entry is zero, we have an error */	  else if (act == 0)	    {	      /* call user syntax error reporting routine */	      syntax_error(cur_token);	      /* try to error recover */	      if (!error_recovery(true))		{		  /* if that fails give up with a fatal syntax error */		  unrecovered_syntax_error(cur_token);		  /* just in case that wasn't fatal enough, end parse */		  done_parsing();		} else {		  lhs_sym = (Symbol)stack.peek();		}	    }	}      return lhs_sym;    }  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /* Error recovery code */  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/  /** Attempt to recover from a syntax error.  This returns false if recovery    *  fails, true if it succeeds.  Recovery happens in 4 steps.  First we   *  pop the parse stack down to a point at which we have a shift out   *  of the top-most state on the error Symbol.  This represents the   *  initial error recovery configuration.  If no such configuration is   *  found, then we fail.  Next a small number of "lookahead" or "parse   *  ahead" Symbols are read into a buffer.  The size of this buffer is    *  determined by error_sync_size() and determines how many Symbols beyond   *  the error must be matched to consider the recovery a success.  Next,    *  we begin to discard Symbols in attempt to get past the point of error

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲大片在线观看| 国产风韵犹存在线视精品| 欧美r级在线观看| 成人动漫中文字幕| 视频精品一区二区| 国产精品毛片久久久久久| 欧美丝袜自拍制服另类| 国产高清不卡一区| 日韩电影免费在线观看网站| 国产精品国产三级国产aⅴ入口| 欧美疯狂性受xxxxx喷水图片| 成人sese在线| 欧美aaaaaa午夜精品| 中文字幕一区二区在线播放| 欧美一级淫片007| 99久久精品免费观看| 狠狠色丁香久久婷婷综合丁香| 一个色在线综合| 国产精品久久久久久久久免费樱桃| 欧美精品久久久久久久久老牛影院| 成人动漫在线一区| 国产毛片精品视频| 日本特黄久久久高潮| 亚洲一区二区三区四区的| 国产网红主播福利一区二区| 欧美xxxxxxxx| 在线综合视频播放| 欧美午夜片在线看| 99re免费视频精品全部| 国产成人在线电影| 精品在线播放免费| 五月天婷婷综合| 亚洲综合一二三区| 亚洲特黄一级片| 中文字幕一区三区| 国产精品久久久久9999吃药| 久久久久成人黄色影片| 精品久久人人做人人爰| 制服丝袜中文字幕亚洲| 欧美天堂一区二区三区| 在线观看日韩av先锋影音电影院| 99国产精品久久久| 不卡的av电影在线观看| 激情图区综合网| 九九**精品视频免费播放| 日本不卡视频一二三区| 欧美96一区二区免费视频| 调教+趴+乳夹+国产+精品| 亚洲国产cao| 三级亚洲高清视频| 国产一区二区中文字幕| 久久精品国产一区二区三区免费看| 三级不卡在线观看| 美女国产一区二区| 麻豆一区二区99久久久久| 麻豆精品视频在线观看视频| 美女久久久精品| 久久99精品久久久久婷婷| 久久97超碰国产精品超碰| 精品一区二区三区免费毛片爱| 久久国产乱子精品免费女| 国产精品一卡二卡在线观看| 成人午夜伦理影院| 99国产精品国产精品久久| 91在线免费看| 欧美日韩一级二级三级| 日韩一级片在线播放| 亚洲精品一区二区三区在线观看| 久久久久久久久久久久电影| 国产日韩欧美电影| 中文字幕一区二区三区在线不卡 | 国产精品久久久久影视| 亚洲欧洲韩国日本视频| 亚洲一区二区在线观看视频| 日韩电影在线一区| 国产精品99久| 在线精品视频免费播放| 日韩视频国产视频| 久久久国际精品| 自拍偷在线精品自拍偷无码专区| 亚洲一区视频在线| 另类专区欧美蜜桃臀第一页| 国产99精品国产| 在线观看亚洲精品视频| 欧美大片在线观看一区二区| 国产片一区二区| 亚洲你懂的在线视频| 日本aⅴ精品一区二区三区| 国产成a人无v码亚洲福利| 日本高清不卡aⅴ免费网站| 欧美一级理论片| 国产精品毛片久久久久久| 亚洲1区2区3区4区| 国产成人自拍网| 欧美另类变人与禽xxxxx| 久久久精品国产99久久精品芒果 | 日韩影院免费视频| 成人精品视频网站| 在线播放欧美女士性生活| 国产清纯美女被跳蛋高潮一区二区久久w| 自拍视频在线观看一区二区| 日本不卡高清视频| 不卡一二三区首页| 91精品国产美女浴室洗澡无遮挡| 亚洲三级久久久| 精品一区二区三区免费观看| 色香蕉久久蜜桃| 2020国产成人综合网| 亚洲一区在线观看网站| 国产精品一品二品| 欧美久久一二区| 国产精品免费观看视频| 毛片av中文字幕一区二区| 91在线丨porny丨国产| 亚洲精品在线电影| 日韩精品一级二级| 91亚洲午夜精品久久久久久| 久久伊99综合婷婷久久伊| 性欧美疯狂xxxxbbbb| 99精品久久99久久久久| 久久色中文字幕| 日本中文字幕一区二区视频| 色婷婷综合五月| 国产女人水真多18毛片18精品视频| 日韩精品一二三四| 欧美亚洲国产一区二区三区va | 日韩国产欧美在线观看| 91污片在线观看| 国产肉丝袜一区二区| 久久精品国产网站| 欧美日韩国产高清一区二区| 亚洲欧美综合在线精品| 高清不卡在线观看av| 精品99一区二区| 久久精品二区亚洲w码| 777色狠狠一区二区三区| 亚洲综合激情小说| 色诱视频网站一区| 亚洲三级理论片| 97精品国产露脸对白| 国产精品久久久久一区| 国产a久久麻豆| 久久久www成人免费无遮挡大片| 久久9热精品视频| 91精品国产麻豆| 美女一区二区三区在线观看| 制服.丝袜.亚洲.中文.综合| 亚洲成人你懂的| 欧美精品乱码久久久久久| 天天综合天天做天天综合| 欧美日韩国产影片| 日韩综合小视频| 在线播放/欧美激情| 青青国产91久久久久久| 日韩欧美卡一卡二| 国内成+人亚洲+欧美+综合在线| 欧美成人精品3d动漫h| 久久99精品一区二区三区| 精品少妇一区二区三区视频免付费| 美腿丝袜亚洲三区| 久久精品一二三| 成人av动漫在线| 亚洲私人影院在线观看| 在线观看日产精品| 日本aⅴ亚洲精品中文乱码| 欧美电视剧免费观看| 91网站在线观看视频| 亚洲一区中文在线| 51精品久久久久久久蜜臀| 秋霞午夜鲁丝一区二区老狼| 久久新电视剧免费观看| 国产不卡视频在线观看| 国产精品美女视频| 91国产视频在线观看| 天涯成人国产亚洲精品一区av| 日韩美女视频在线| 成人网在线播放| 亚洲自拍偷拍网站| 日韩欧美在线综合网| 国产成人a级片| 亚洲欧美日韩电影| 91精品综合久久久久久| 国产一区二区剧情av在线| 国产精品久久久久影院色老大 | 欧美成va人片在线观看| 国产91精品在线观看| 亚洲欧美日韩国产手机在线| 欧美精选一区二区| 国产成人精品免费看| 亚洲综合在线视频| 日韩午夜激情免费电影| 大胆亚洲人体视频| 亚洲电影一级片| 久久久91精品国产一区二区三区| 91在线无精精品入口| 蜜臀精品一区二区三区在线观看| 中文字幕欧美日韩一区| 欧美日韩精品综合在线| 国产成人夜色高潮福利影视| 亚洲成人激情综合网|