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

📄 parser.java

📁 编译原理大作业---tiger编译器 包括semant,translate,mipsframe,regalloc等所有phase 懂的人自会知道
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
  /** EOF Symbol index */  public int EOF_sym() {return 0;}  /** error Symbol index */  public int error_sym() {return 1;}  /** user initialization */  public void user_init() throws java.lang.Exception    { lexer.init();     }  /** scan to get the next Symbol */  public java_cup.runtime.Symbol scan()    throws java.lang.Exception    { return lexer.next_token();     }  /* override error routines */  public void report_fatal_error(    String   message,    Object   info)    {      done_parsing();      lexer.emit_error(message);      System.err.println("Can't recover from previous error(s), giving up.");      System.exit(1);    }    public void report_error(String message, Object info)    {      lexer.emit_error(message);    }}/** Cup generated class to encapsulate user supplied action code.*/class CUP$parser$actions {  /** helper routine to clone a new production part adding a given label */  protected production_part add_lab(production_part part, String lab)    throws internal_error    {      /* if there is no label, or this is an action, just return the original */      if (lab == null || part.is_action()) return part;      /* otherwise build a new one with the given label attached */      return new symbol_part(((symbol_part)part).the_symbol(),lab);    }  /** max size of right hand side we will support */  protected final int MAX_RHS = 200;  /** array for accumulating right hand side parts */  protected production_part[] rhs_parts = new production_part[MAX_RHS];  /** where we are currently in building a right hand side */  protected int rhs_pos = 0;  /** start a new right hand side */  protected void new_rhs() {rhs_pos = 0; }  /** add a new right hand side part */  protected void add_rhs_part(production_part part) throws java.lang.Exception    {      if (rhs_pos >= MAX_RHS)	throw new Exception("Internal Error: Productions limited to " + 			     MAX_RHS + " symbols and actions");       rhs_parts[rhs_pos] = part;      rhs_pos++;    }  /** string to build up multiple part names */  protected String multipart_name = new String();  /** append a new name segment to the accumulated multipart name */  protected void append_multipart(String name)    {      String dot = "";      /* if we aren't just starting out, put on a dot */      if (multipart_name.length() != 0)  dot = ".";      multipart_name = multipart_name.concat(dot + name);    }  /** table of declared symbols -- contains production parts indexed by name */  protected Hashtable symbols = new Hashtable();  /** table of just non terminals -- contains non_terminals indexed by name */  protected Hashtable non_terms = new Hashtable();  /** declared start non_terminal */  protected non_terminal start_nt = null;  /** left hand side non terminal of the current production */  protected non_terminal lhs_nt;  /** Current precedence number */  int _cur_prec = 0;  /** Current precedence side */  int _cur_side = assoc.no_prec;  /** update the precedences we are declaring */  protected void update_precedence(int p) {    _cur_side = p;    _cur_prec++;  }  /** add relevant data to terminals */   protected void add_precedence(String term) {    if (term == null) {      System.err.println("Unable to add precedence to nonexistent terminal");    } else {      symbol_part sp = (symbol_part)symbols.get(term);      if (sp == null) {	System.err.println("Could find terminal " + term + " while declaring precedence");      } else {	java_cup.symbol sym = sp.the_symbol();	if (sym instanceof terminal) 	  ((terminal)sym).set_precedence(_cur_side, _cur_prec);	else System.err.println("Precedence declaration: Can't find terminal " + term);      }    }  }  private final parser parser;  /** Constructor */  CUP$parser$actions(parser parser) {    this.parser = parser;  }  /** Method with the actual generated action code. */  public final java_cup.runtime.Symbol CUP$parser$do_action(    int                        CUP$parser$act_num,    java_cup.runtime.lr_parser CUP$parser$parser,    java.util.Stack            CUP$parser$stack,    int                        CUP$parser$top)    throws java.lang.Exception    {      /* Symbol object for return from actions */      java_cup.runtime.Symbol CUP$parser$result;      /* select the action based on the action number */      switch (CUP$parser$act_num)        {          /*. . . . . . . . . . . . . . . . . . . .*/          case 83: // empty ::=             {              Object RESULT = null;              CUP$parser$result = new java_cup.runtime.Symbol(26/*empty*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 82: // label_id ::= ID             {              String RESULT = null;		int the_idleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int the_idright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String the_id = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;		 RESULT = the_id;               CUP$parser$result = new java_cup.runtime.Symbol(35/*label_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 81: // symbol_id ::= ID             {              String RESULT = null;		int the_idleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int the_idright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String the_id = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;		 RESULT = the_id;               CUP$parser$result = new java_cup.runtime.Symbol(34/*symbol_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 80: // nt_id ::= ID             {              String RESULT = null;		int the_idleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int the_idright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String the_id = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;		 RESULT = the_id;               CUP$parser$result = new java_cup.runtime.Symbol(33/*nt_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 79: // new_non_term_id ::= ID             {              Object RESULT = null;		int non_term_idleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int non_term_idright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String non_term_id = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;		 	  /* see if this non terminal has been declared before */	  if (symbols.get(non_term_id) != null)	    {	      /* issue a message */	      lexer.emit_error( "java_cup.runtime.Symbol \"" + non_term_id + 			                      "\" has already been declared");	    }	  else	    {	      if (multipart_name.equals("")) {		append_multipart("Object");	      }	      /* build the non terminal object */              non_terminal this_nt = 		new non_terminal(non_term_id, multipart_name);	      /* put it in the non_terms table */	      non_terms.put(non_term_id, this_nt);	      /* build a production_part and put it in the symbols table */ 	      symbols.put(non_term_id, new symbol_part(this_nt));	    }	              CUP$parser$result = new java_cup.runtime.Symbol(23/*new_non_term_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 78: // new_term_id ::= ID             {              Object RESULT = null;		int term_idleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;		int term_idright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;		String term_id = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;		 	  /* see if this terminal has been declared before */	  if (symbols.get(term_id) != null)	    {	      /* issue a message */	      lexer.emit_error("java_cup.runtime.Symbol \"" + term_id + 			   "\" has already been declared");	    }	  else	    {	      /* if no type declared, declare one */	      if (multipart_name.equals("")) {		append_multipart("Object");	      }	      /* build a production_part and put it in the table */ 	      symbols.put(term_id, 	        new symbol_part(new terminal(term_id, multipart_name)));	    }	              CUP$parser$result = new java_cup.runtime.Symbol(22/*new_term_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);            }          return CUP$parser$result;          /*. . . . . . . . . . . . . . . . . . . .*/

⌨️ 快捷键说明

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