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

📄 grm.cup

📁 编译原理大作业---tiger编译器 包括semant,translate,mipsframe,regalloc等所有phase 懂的人自会知道
💻 CUP
📖 第 1 页 / 共 2 页
字号:
package Parse;action code {:   static Symbol.Symbol sym(String s) { return Symbol.Symbol.symbol(s); }   // stampa informazioni utili al debug (se e' attivata l'opzione debug)   public void stampaDebug(String stringa) {      if(Grm.dflag==1) System.out.println("> " + stringa );   }:};parser code  {:   public Absyn.Exp parseResult;   Lexer lexer;   public static int dflag;   ErrorMsg.ErrorMsg errorMsg;   //--------------------------------------------------------------   // array di nomi per i simboli (token --> stringa per la stampa)   public static String symnames[] = new String[60];   static {      symnames[sym.EOF] = "EOF";      symnames[sym.error] = "error";      symnames[sym.ID] = "ID";      symnames[sym.STRING] = "STRING";      symnames[sym.INT] = "INT";      symnames[sym.COMMA] = "COMMA";      symnames[sym.COLON] = "COLON";      symnames[sym.SEMICOLON] = "SEMICOLON";      symnames[sym.LPAREN] = "LPAREN";      symnames[sym.RPAREN] = "RPAREN";      symnames[sym.LBRACK] = "LBRACK";      symnames[sym.RBRACK] = "RBRACK";      symnames[sym.LBRACE] = "LBRACE";      symnames[sym.RBRACE] = "RBRACE";      symnames[sym.DOT] = "DOT";      symnames[sym.PLUS] = "PLUS";      symnames[sym.MINUS] = "MINUS";      symnames[sym.UMINUS] = "UMINUS";      symnames[sym.TIMES] = "TIMES";      symnames[sym.DIVIDE] = "DIVIDE";      symnames[sym.EQ] = "EQ";      symnames[sym.NEQ] = "NEQ";      symnames[sym.LT] = "LT";      symnames[sym.LE] = "LE";      symnames[sym.GT] = "GT";      symnames[sym.GE] = "GE";      symnames[sym.AND] = "AND";      symnames[sym.OR] = "OR";      symnames[sym.ASSIGN] = "ASSIGN";      symnames[sym.ARRAY] = "ARRAY";      symnames[sym.IF] = "IF";      symnames[sym.THEN] = "THEN";      symnames[sym.ELSE] = "ELSE";      symnames[sym.WHILE] = "WHILE";      symnames[sym.FOR] = "FOR";      symnames[sym.TO] = "TO";      symnames[sym.DO] = "DO";      symnames[sym.LET] = "LET";      symnames[sym.IN] = "IN";      symnames[sym.END] = "END";      symnames[sym.OF] = "OF";      symnames[sym.BREAK] = "BREAK";      symnames[sym.NIL] = "NIL";      symnames[sym.FUNCTION] = "FUNCTION";      symnames[sym.VAR] = "VAR";      symnames[sym.TYPE] = "TYPE";   }   //---------------------------------------------------------   public void syntax_error(java_cup.runtime.Symbol current) {      report_error("Errore di sintassi: token \"" + symnames[current.sym] + "\" inaspettato", current);   }   //---------------------------------------------------------   public void report_error(String message, java_cup.runtime.Symbol info) {      // nel caso di EOF devo dare come posizione la pos - 1      if(info.sym == sym.EOF) errorMsg.error(info.left - 1, message);      else errorMsg.error(info.left, message);   }   public Grm(Lexer l, ErrorMsg.ErrorMsg err, int flagdebug) {      this();      errorMsg=err;      lexer=l;      dflag=flagdebug;   }   //---------------------------------------------------------   // metodi di java_cup.runtime.lr_parser sovrascritti (traduzione in italiano)    public void report_fatal_error(    String   message,    Object   info)    throws java.lang.Exception    {      /* stop parsing (not really necessary since we throw an exception, but) */      done_parsing();      /* use the normal error message reporting to put out the message */      report_error(message, info);      /* throw an exception */      throw new Exception("\nImpossibile recuperare dagli errori precedenti.");    }    public void unrecovered_syntax_error(java_cup.runtime.Symbol cur_token)    throws java.lang.Exception    {      report_fatal_error("\nImpossibile recuperare dagli errori precedenti", cur_token);    }    public void report_error(String message, Object info) {       System.err.print(message);       if (info instanceof java_cup.runtime.Symbol) {          if (((java_cup.runtime.Symbol)info).left != -1) {             System.err.println(" al carattere " + ((java_cup.runtime.Symbol)info).left + " dell'input");          }          else System.err.println("");       }       else System.err.println("");    }:};scan with {: return lexer.nextToken(); :};terminal String ID,STRING;terminal Integer INT;terminal COMMA, COLON, SEMICOLON, LPAREN, RPAREN, LBRACK, RBRACK, LBRACE, RBRACE, DOT,         PLUS, MINUS, UMINUS, TIMES, DIVIDE, EQ, NEQ, LT, LE, GT, GE, AND, OR, ASSIGN, ARRAY,         IF, THEN, ELSE, WHILE, FOR, TO, DO, LET, IN, END, OF, BREAK, NIL, FUNCTION, VAR, TYPE;non terminal Absyn.TypeDec tydec;non terminal Absyn.NameTy namety;non terminal Absyn.ArrayTy arrayty;non terminal Absyn.RecordTy recordty;non terminal Absyn.Exp program;non terminal Absyn.Exp exp,assignexp,opexp,expseq,ifexp,ifelseexp,                       forexp,whileexp,letexp,opexplog,callexp,recordcreation,arrayexp;non terminal Absyn.Dec dec,vardec;non terminal Absyn.FunctionDec fundec;non terminal Absyn.DecList decs;non terminal Absyn.ExpList argseq;non terminal Integer intexp;non terminal Absyn.Var lvalue;non terminal Absyn.FieldList tyfields,tyrest;non terminal Absyn.Ty typeid;non terminal Absyn.FieldExpList recexp;non terminal Absyn.ExpList explist;precedence left OR;precedence left AND;precedence nonassoc EQ,NEQ,GT,GE,LT,LE;precedence left PLUS, MINUS;precedence left TIMES,DIVIDE;precedence left ELSE,LBRACK;precedence right UMINUS;precedence left FUNCTION,TYPE;

⌨️ 快捷键说明

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