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

📄 lexparse.java

📁 java语法解释器生成器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
  }    void syntaxError(ErrorMessages message, int line) {    Out.error(scanner.file, message, line, -1);  }  void syntaxError(ErrorMessages message, int line, int col) {    Out.error(scanner.file, message, line, col);  }  private boolean check(int type, char c) {    switch (type) {      case sym.JLETTERCLASS:        return Character.isJavaIdentifierStart(c);              case sym.JLETTERDIGITCLASS:        return Character.isJavaIdentifierPart(c);              case sym.LETTERCLASS:        return Character.isLetter(c);              case sym.DIGITCLASS:        return Character.isDigit(c);              case sym.UPPERCLASS:         return Character.isUpperCase(c);              case sym.LOWERCLASS:         return Character.isLowerCase(c);              default: return false;    }  }    private Vector makePreClass(int type) {        Vector result = new Vector();        char c = 0;    char start = 0;    char last = charClasses.getMaxCharCode();        boolean prev, current;        prev = check(type,'\u0000');        for (c = 1; c < last; c++) {            current = check(type,c);            if (!prev && current) start = c;      if (prev && !current) {        result.addElement(new Interval(start, (char)(c-1)));      }            prev = current;    }        // the last iteration is moved out of the loop to    // avoid an endless loop if last == maxCharCode and    // last+1 == 0    current = check(type,c);        if (!prev && current) result.addElement(new Interval(c,c));    if (prev && current)  result.addElement(new Interval(start, c));        if (prev && !current) result.addElement(new Interval(start, (char)(c-1)));    return result;  }    private RegExp makeRepeat(RegExp r, int n1, int n2, int line, int col) {    if (n1 <= 0 && n2 <= 0) {      syntaxError(ErrorMessages.REPEAT_ZERO, line, col);      return null;    }    if (n1 > n2) {      syntaxError(ErrorMessages.REPEAT_GREATER, line, col);      return null;    }        int i;    RegExp result;        if (n1 > 0) {      result = r;      n1--; n2--; // we need one concatenation less than the number of expressions to match    }    else {      result = new RegExp1(sym.QUESTION,r);      n2--;    }    for (i = 0; i < n1; i++)       result = new RegExp2(sym.CONCAT, result, r);          n2-= n1;      for (i = 0; i < n2; i++)      result = new RegExp2(sym.CONCAT, result, new RegExp1(sym.QUESTION,r));        return result;  }  private RegExp makeNL() {    Vector list = new Vector();    list.addElement(new Interval('\n','\r'));    list.addElement(new Interval('\u0085','\u0085'));    list.addElement(new Interval('\u2028','\u2029'));	// assumption: line feeds are caseless    charClasses.makeClass(list, false);    charClasses.makeClass('\n', false);    charClasses.makeClass('\r', false);    RegExp1   c = new RegExp1(sym.CCLASS, list);    Character n = new Character('\n');    Character r = new Character('\r');    return new RegExp2(sym.BAR,                        c,                        new RegExp2(sym.CONCAT,                                    new RegExp1(sym.CHAR, r),                                    new RegExp1(sym.CHAR, n)));  }    private final LexParse parser;  /** Constructor */  CUP$LexParse$actions(LexParse parser) {    this.parser = parser;  }  /** Method with the actual generated action code. */  public final java_cup.runtime.Symbol CUP$LexParse$do_action(    int                        CUP$LexParse$act_num,    java_cup.runtime.lr_parser CUP$LexParse$parser,    java.util.Stack            CUP$LexParse$stack,    int                        CUP$LexParse$top)    throws java.lang.Exception    {      /* Symbol object for return from actions */      java_cup.runtime.Symbol CUP$LexParse$result;      /* select the action based on the action number */      switch (CUP$LexParse$act_num)        {          /*. . . . . . . . . . . . . . . . . . . .*/          case 74: // preclass ::= LOWERCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.LOWERCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 73: // preclass ::= UPPERCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.UPPERCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 72: // preclass ::= DIGITCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.DIGITCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 71: // preclass ::= LETTERCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.LETTERCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 70: // preclass ::= JLETTERDIGITCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.JLETTERDIGITCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 69: // preclass ::= JLETTERCLASS             {              Vector RESULT =null;		 RESULT = makePreClass(sym.JLETTERCLASS);               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("preclass",14, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 68: // classcontentelem ::= CHAR             {              Interval RESULT =null;		int cleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;		int cright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;		Character c = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;		 RESULT = new Interval(c.charValue(), c.charValue());               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 67: // classcontentelem ::= CHAR DASH CHAR             {              Interval RESULT =null;		int c1left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).left;		int c1right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).right;		Character c1 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)).value;		int c2left = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;		int c2right = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;		Character c2 = (Character)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;		 RESULT = new Interval(c1.charValue(), c2.charValue());               CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontentelem",10, ((java_cup.runtime.Symbol)CUP$LexParse$stack.elementAt(CUP$LexParse$top-2)), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 66: // classcontent ::= MACROUSE             {              Vector RESULT =null;		int identleft = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).left;		int identright = ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()).right;		String ident = (String)((java_cup.runtime.Symbol) CUP$LexParse$stack.peek()).value;		                      syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);                                 CUP$LexParse$result = parser.getSymbolFactory().newSymbol("classcontent",13, ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), ((java_cup.runtime.Symbol)CUP$LexParse$stack.peek()), RESULT);            }          return CUP$LexParse$result;          /*. . . . . . . . . . . . . . . . . . . .*/          case 65: // classcontent ::= classcontent MACROUSE 

⌨️ 快捷键说明

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