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

📄 env.java

📁 编译原理大作业---tiger编译器 包括semant,translate,mipsframe,regalloc等所有phase 懂的人自会知道
💻 JAVA
字号:
package Semant;class Env {   Symbol.Table venv;  // ambiente dei valori   Symbol.Table tenv;  // ambiente dei tipi   ErrorMsg.ErrorMsg errorMsg;   Types.INT inttemp;   Types.STRING stringtemp;   public Translate.Level lev;   /* costruttore */   public Env(ErrorMsg.ErrorMsg err,Translate.Level l) {      errorMsg=err;      lev=l;      // creazione tabelle dei simboli      tenv = new Symbol.Table();      venv = new Symbol.Table();      inttemp=new Types.INT();      stringtemp=new Types.STRING();      // inserimento dei tipi base in tenv (tabella dei tipi)      tenv.put(Symbol.Symbol.symbol("int"),inttemp);      tenv.put(Symbol.Symbol.symbol("string"),stringtemp);      // inserimento delle funzioni base in venv (tabella dei valori)      // creazione delle label      Temp.Label printLabel = new Temp.Label("print");      Temp.Label exitLabel = new Temp.Label("exit");      Temp.Label flushLabel = new Temp.Label("flush");      Temp.Label getcharLabel = new Temp.Label("getchar");      Temp.Label ordLabel = new Temp.Label("ord");      Temp.Label chrLabel = new Temp.Label("chr");      Temp.Label sizeLabel = new Temp.Label("size");      Temp.Label substringLabel = new Temp.Label("substring");      Temp.Label concatLabel = new Temp.Label("concat");      Temp.Label notLabel = new Temp.Label("not");      // print(s: string)      venv.put(         Symbol.Symbol.symbol("print"),         new FunEntry(            new Translate.Level(lev,Symbol.Symbol.symbol(printLabel.toString()),new Util.BoolList(false, null)),            printLabel,            new Types.RECORD(Symbol.Symbol.symbol("s"), stringtemp, null),            null));      // flush()      venv.put(         Symbol.Symbol.symbol("flush"),         new FunEntry(            new Translate.Level(lev,Symbol.Symbol.symbol(flushLabel.toString()),null),            flushLabel,            null,            null));      // getchar() : string      venv.put(         Symbol.Symbol.symbol("getchar"),         new FunEntry(            new Translate.Level(lev,Symbol.Symbol.symbol(getcharLabel.toString()),null),            getcharLabel,            null,            stringtemp));      // ord(s: string) : int      venv.put(         Symbol.Symbol.symbol("ord"),         new FunEntry(            new Translate.Level(lev,Symbol.Symbol.symbol(ordLabel.toString()),null),            ordLabel,            new Types.RECORD(Symbol.Symbol.symbol("s"), stringtemp, null),            inttemp));      // chr(i: int) : string      venv.put(         Symbol.Symbol.symbol("chr"),         new FunEntry(            new Translate.Level(lev,Symbol.Symbol.symbol(chrLabel.toString()),new Util.BoolList(false, null)),            chrLabel,            new Types.RECORD(Symbol.Symbol.symbol("i"), inttemp, null),            stringtemp));      // size(s: string) : int      venv.put(         Symbol.Symbol.symbol("size"),         new FunEntry(            new Translate.Level(lev, Symbol.Symbol.symbol(sizeLabel.toString()),new Util.BoolList(false,null)),            sizeLabel,            new Types.RECORD(Symbol.Symbol.symbol("s"), stringtemp, null),            inttemp));      // substring(s:string, first:int, n:int): string      venv.put(         Symbol.Symbol.symbol("substring"),         new FunEntry(            new Translate.Level(               lev,               Symbol.Symbol.symbol(substringLabel.toString()),               new Util.BoolList(false, new Util.BoolList(false, new Util.BoolList(false,null)))),            substringLabel,            new Types.RECORD(               Symbol.Symbol.symbol("s"),               stringtemp,               new Types.RECORD(                  Symbol.Symbol.symbol("first"),                  inttemp,                  new Types.RECORD(Symbol.Symbol.symbol("n"), inttemp, null))),            stringtemp));      // concat(s1: string, s2: string): string      venv.put(         Symbol.Symbol.symbol("concat"),         new FunEntry(            new Translate.Level(               lev,               Symbol.Symbol.symbol(concatLabel.toString()),               new Util.BoolList(false, new Util.BoolList(false,null))),            concatLabel,            new Types.RECORD(               Symbol.Symbol.symbol("s1"),               stringtemp,               new Types.RECORD(Symbol.Symbol.symbol("s2"), stringtemp, null)),            stringtemp));      // not(i: int) : int      venv.put(Symbol.Symbol.symbol("not"),         new FunEntry(new Translate.Level(lev, Symbol.Symbol.symbol(notLabel.toString()),         new Util.BoolList(false,null)),         notLabel,         new Types.RECORD(Symbol.Symbol.symbol("i"), inttemp, null),         inttemp));      // exit(i: int)      venv.put(Symbol.Symbol.symbol("exit"),         new FunEntry(new Translate.Level(lev, Symbol.Symbol.symbol(exitLabel.toString()),         new Util.BoolList(false,null)),         exitLabel,         new Types.RECORD(Symbol.Symbol.symbol("i"), inttemp, null),         null));      // INSERIMENTO NELLA HASHTABLE DELLE ROUTINE DI LIBRERIA (o esterne)      // routine esterne usate in Translate...      Temp.Label initArrayLabel = new Temp.Label("initArray");      Temp.Label allocRecordLabel = new Temp.Label("allocRecord");      Temp.Label stringEqualLabel = new Temp.Label("stringEqual");      // aggiunge la coppia (string, label) nella hashtable      (lev.frame).put_lib_f("print", printLabel);      (lev.frame).put_lib_f("exit", exitLabel);      (lev.frame).put_lib_f("flush", flushLabel);      (lev.frame).put_lib_f("getchar", getcharLabel);      (lev.frame).put_lib_f("ord", ordLabel);      (lev.frame).put_lib_f("chr", chrLabel);      (lev.frame).put_lib_f("size", sizeLabel);      (lev.frame).put_lib_f("substring", substringLabel);      (lev.frame).put_lib_f("concat", concatLabel);      (lev.frame).put_lib_f("not", notLabel);      (lev.frame).put_lib_f("initArray", initArrayLabel );      (lev.frame).put_lib_f("allocRecord", allocRecordLabel);      (lev.frame).put_lib_f("stringEqual", stringEqualLabel);    }}

⌨️ 快捷键说明

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