📄 lexparse.java
字号:
} 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 + -