parser.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,233 行 · 第 1/5 页

JAVA
1,233
字号
	          /* build a special start production */	          new_rhs();	          add_rhs_part(add_lab(new symbol_part(start_nt),"start_val"));	          add_rhs_part(new symbol_part(terminal.EOF));		  add_rhs_part(new action_part("RESULT = start_val;"));	          emit.start_production = 		     new production(non_terminal.START_nt, rhs_parts, rhs_pos);	          new_rhs();		}	    }	  	  /* reset the rhs accumulation in any case */	  new_rhs();	              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(28/*rhs*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 65: // rhs ::= prod_part_list PERCENT_PREC term_id             {              Object RESULT = null;		int term_nameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int term_nameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String term_name = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;			  com.sun.java_cup.internal.symbol sym = null;	  if (lhs_nt != null) 	    {	      /* Find the precedence symbol */	      if (term_name == null) {		System.err.println("No terminal for contextual precedence");		sym = null;	      } else {		sym = ((symbol_part)symbols.get(term_name)).the_symbol();	      }	      /* build the production */	      production p;	      if ((sym!=null) && (sym instanceof terminal)) {		p = new production(lhs_nt, rhs_parts, rhs_pos,				   ((terminal)sym).precedence_num(),				   ((terminal)sym).precedence_side());		((symbol_part)symbols.get(term_name)).the_symbol().note_use();	      } else {		System.err.println("Invalid terminal " + term_name + 				   " for contextual precedence assignment");		p = new production(lhs_nt, rhs_parts, rhs_pos);	      }	      /* if we have no start non-terminal declared and this is 		 the first production, make its lhs nt the start_nt 		 and build a special start production for it. */              if (start_nt == null)		{		  start_nt = lhs_nt;	          /* build a special start production */	          new_rhs();	          add_rhs_part(add_lab(new symbol_part(start_nt),"start_val"));	          add_rhs_part(new symbol_part(terminal.EOF));		  add_rhs_part(new action_part("RESULT = start_val;"));		  if ((sym!=null) && (sym instanceof terminal)) {		    emit.start_production = 		      new production(non_terminal.START_nt, rhs_parts, 				     rhs_pos, ((terminal)sym).precedence_num(),				     ((terminal)sym).precedence_side());		  } else {		    emit.start_production = 		      new production(non_terminal.START_nt, rhs_parts, rhs_pos);		  }	          new_rhs();		}	    }	  /* reset the rhs accumulation in any case */	  new_rhs();	              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(28/*rhs*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 64: // rhs_list ::= rhs             {              Object RESULT = null;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(27/*rhs_list*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 63: // rhs_list ::= rhs_list BAR rhs             {              Object RESULT = null;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(27/*rhs_list*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 62: // production ::= error NT$13 SEMI             {              Object RESULT = null;              // propagate RESULT from NT$13              if ( ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null )                RESULT = (Object) ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(22/*production*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 61: // NT$13 ::=             {              Object RESULT = null; lexer.emit_error("Syntax Error");               CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(56/*NT$13*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 60: // production ::= nt_id NT$11 COLON_COLON_EQUALS NT$12 rhs_list SEMI             {              Object RESULT = null;              // propagate RESULT from NT$11              if ( ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-4)).value != null )                RESULT = (Object) ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-4)).value;              // propagate RESULT from NT$12              if ( ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value != null )                RESULT = (Object) ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value;		int lhs_idleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left;		int lhs_idright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).right;		String lhs_id = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-5)).value;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(22/*production*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 59: // NT$12 ::=             {              Object RESULT = null;		int lhs_idleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;		int lhs_idright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right;		String lhs_id = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value;               CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(55/*NT$12*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 58: // NT$11 ::=             {              Object RESULT = null;		int lhs_idleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int lhs_idright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String lhs_id = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;	  /* lookup the lhs nt */	  lhs_nt = (non_terminal)non_terms.get(lhs_id);          /* if it wasn't declared, emit a message */	  if (lhs_nt == null)	    {	      if (lexer.error_count == 0)	        lexer.emit_error("LHS non terminal \"" + lhs_id + 			       "\" has not been declared");	    }	  /* reset the rhs accumulation */	  new_rhs();	              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(54/*NT$11*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 57: // production_list ::= production             {              Object RESULT = null;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(12/*production_list*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 56: // production_list ::= production_list production             {              Object RESULT = null;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(12/*production_list*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 55: // start_spec ::= empty             {              Object RESULT = null;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*start_spec*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 54: // start_spec ::= START WITH nt_id NT$10 SEMI             {              Object RESULT = null;              // propagate RESULT from NT$10              if ( ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null )                RESULT = (Object) ((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value;		int start_nameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;		int start_nameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right;		String start_name = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value;              CUP$parser$result = new com.sun.java_cup.internal.runtime.Symbol(11/*start_spec*/, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 53: // NT$10 ::=             {              Object RESULT = null;		int start_nameleft = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int start_nameright = ((com.sun.java_cup.internal.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String start_name = (String)((com.sun.java_cup.internal.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value; 	  /* verify that the name has been declared as a non terminal */	  non_terminal nt = (non_terminal)non_terms.get(start_name);	  if (nt == null)	    {	      lexer.emit_error( "Start non terminal \"" + start_name + 	  		         "\" has not been declared");	    }          else	    {	      /* remember the non-terminal for later */	      start_nt = nt;	      /* build a special start production */	      new_rhs();	      add_rhs_part(add_lab(new symbol_part(start_nt), "start_val"));	      add_rhs_part(new symbol_part(terminal.EOF));	      add_r

⌨️ 快捷键说明

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