complexsymbolfactory.java

来自「java语法解释器生成器」· Java 代码 · 共 120 行

JAVA
120
字号
package java_cup.runtime;/** * Default Implementation for SymbolFactory, creates * plain old Symbols * * @version last updated 27-03-2006 * @author Michael Petter *//* *************************************************  class DefaultSymbolFactory  interface for creating new symbols   ***************************************************/public class ComplexSymbolFactory implements SymbolFactory{    public static class Location {        private String unit="unknown";        private int line, column;        public Location(String unit, int line, int column){            this.unit=unit;            this.line=line;            this.column=column;        }        public Location(int line, int column){            this.line=line;            this.column=column;        }        public String toString(){            return unit+":"+line+"/"+column;        }        public int getColumn(){            return column;        }        public int getLine(){            return line;        }        public String getUnit(){            return unit;        }    }    /**     * ComplexSymbol with detailed Location Informations and a Name     */    public static class ComplexSymbol extends Symbol {        protected String name;        protected Location xleft,xright;        public ComplexSymbol(String name, int id) {            super(id);            this.name=name;        }        public ComplexSymbol(String name, int id, Object value) {            super(id,value);            this.name=name;        }        public String toString(){            if (xleft==null || xright==null) return "Symbol: "+name;            return "Symbol: "+name+" ("+xleft+" - "+xright+")";        }        public ComplexSymbol(String name, int id, int state) {            super(id,state);            this.name=name;        }        public ComplexSymbol(String name, int id, Symbol left, Symbol right) {            super(id,left,right);            this.name=name;            if (left!=null)  this.xleft = ((ComplexSymbol)left).xleft;            if (right!=null) this.xright= ((ComplexSymbol)right).xright;        }        public ComplexSymbol(String name, int id, Location left, Location right) {            super(id);            this.name=name;            this.xleft=left;            this.xright=right;        }        public ComplexSymbol(String name, int id, Symbol left, Symbol right, Object value) {            super(id,value);            this.name=name;            if (left!=null)  this.xleft = ((ComplexSymbol)left).xleft;            if (right!=null) this.xright= ((ComplexSymbol)right).xright;        }        public ComplexSymbol(String name, int id, Location left, Location right, Object value) {            super(id,value);            this.name=name;            this.xleft=left;            this.xright=right;        }        public Location getLeft(){            return xleft;        }        public Location getRight(){            return xright;        }    }    // Factory methods    public Symbol newSymbol(String name, int id, Location left, Location right, Object value){        return new ComplexSymbol(name,id,left,right,value);    }    public Symbol newSymbol(String name, int id, Location left, Location right){        return new ComplexSymbol(name,id,left,right);    }    public Symbol newSymbol(String name, int id, Symbol left, Symbol right, Object value){        return new ComplexSymbol(name,id,left,right,value);    }    public Symbol newSymbol(String name, int id, Symbol left, Symbol right){        return new ComplexSymbol(name,id,left,right);    }    public Symbol newSymbol(String name, int id){        return new ComplexSymbol(name,id);    }    public Symbol newSymbol(String name, int id, Object value){        return new ComplexSymbol(name,id,value);    }    public Symbol startSymbol(String name, int id, int state){        return new ComplexSymbol(name,id,state);    }}

⌨️ 快捷键说明

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