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

📄 lexparse.cup

📁 java语法解释器生成器
💻 CUP
📖 第 1 页 / 共 2 页
字号:
                ;                rules         ::=  rules:rlist rule:r                   {: rlist.addElement(r); RESULT = rlist; :}                |  rules:rlist1 LESSTHAN states:states MORETHAN LBRACE rules:rlist2 RBRACE                   {:                      Enumeration rs = rlist2.elements();                     while ( rs.hasMoreElements() ) {                       Integer elem = (Integer) rs.nextElement();                       // might be null for error case of "rule"                       if (elem != null) {                          regExps.addStates( elem.intValue(), states );                       }                       rlist1.addElement( elem );                     }                                            RESULT = rlist1;                   :}                |  LESSTHAN states:states MORETHAN LBRACE rules:rlist RBRACE                   {:                      Enumeration rs = rlist.elements();                     while ( rs.hasMoreElements() ) {                       Integer elem = (Integer) rs.nextElement();                       // might be null for error case of "rule"                       if (elem != null) {                          regExps.addStates( elem.intValue(), states );                       }                     }                                            RESULT = rlist;                   :}                |  rule:r                   {: RESULT = new Vector(); RESULT.addElement(r); :}                ;  rule          ::=  statesOPT:s hatOPT:bol series:r actions:a                   {: RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, null)); :}                |  statesOPT:s hatOPT:bol series:r lookahead:l act:a                   {: RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l)); :}                |  statesOPT:s hatOPT:bol series:r lookahead:l NOACTION:a                   {: syntaxError(ErrorMessages.LOOKAHEAD_NEEDS_ACTION, aleft, aright+1); :}                |  statesOPT:s EOFRULE ACTION:a                   {: RESULT = new Integer(regExps.insert(s, a)); :}                |  error                                ;lookahead     ::=  DOLLAR                   {: RESULT = makeNL(); :}                |  LOOKAHEAD series:r                   {: RESULT = r; :}                |  LOOKAHEAD series:s DOLLAR                   {: RESULT = new RegExp2(sym.CONCAT, s, makeNL()); :}                ;act           ::=  REGEXPEND ACTION:a                   {: RESULT = a; :}				;actions       ::=  act:a                   {: RESULT = a; :}                |  NOACTION                ;                statesOPT     ::=  LESSTHAN states:list MORETHAN                             {: RESULT = list; :}                |  /* empty */                   {: RESULT = new Vector(); :}                                   ;                states        ::=  IDENT:id COMMA states:list                   {:                     stateNumber = scanner.states.getNumber( id );                     if ( stateNumber != null )                       list.addElement( stateNumber );                      else {                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL,                                                   idleft, idright);                     }                     RESULT = list;                   :}                                |  IDENT:id                   {:                     Vector list = new Vector();                     stateNumber = scanner.states.getNumber( id );                     if ( stateNumber != null )                       list.addElement( stateNumber );                      else {                       throw new ScannerException(scanner.file, ErrorMessages.LEXSTATE_UNDECL,                                                   idleft, idright);                     }                     RESULT = list;                   :}                 | IDENT COMMA:c                   {: syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright+1); :}                ;                hatOPT        ::=  HAT                    {: // assumption: there is no upper case for \n                      charClasses.makeClass('\n', false);                       RESULT = new Boolean(true); :}                |  /* empty */                    {: RESULT = new Boolean(false); :}                ;                series        ::= series:r1 BAR concs:r2                  {: RESULT = new RegExp2(sym.BAR, r1, r2); :}                                 | concs:r                  {: RESULT = r; :}                 | BAR:b                  {: syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright); :}                ;               concs         ::= concs:r1 nregexp:r2                  {: RESULT = new RegExp2(sym.CONCAT, r1, r2); :}                 | nregexp:r                  {: RESULT = r; :}                ;nregexp       ::= regexp:r                  {: RESULT = r; :}                | BANG nregexp:r                  {: RESULT = new RegExp1(sym.BANG, r); :}                | TILDE nregexp:r                  {: RESULT = new RegExp1(sym.TILDE, r); :}                ;regexp        ::=  regexp:r STAR                   {: RESULT = new RegExp1(sym.STAR, r); :}                |  regexp:r PLUS                   {: RESULT = new RegExp1(sym.PLUS, r); :}                |  regexp:r QUESTION                   {: RESULT = new RegExp1(sym.QUESTION, r); :}                |  regexp:r REPEAT:n RBRACE:b                   {: RESULT = makeRepeat(r, n.intValue(), n.intValue(), bleft, bright); :}                |  regexp:r REPEAT:n1 REPEAT:n2 RBRACE                   {: RESULT = makeRepeat(r, n1.intValue(), n2.intValue(), n1left, n2right); :}                |  OPENBRACKET series:r CLOSEBRACKET                   {: RESULT = r; :}                |  MACROUSE:ident                   {:                       if ( !scanner.macroDefinition ) {                        if ( ! macros.markUsed(ident) )                           throw new ScannerException(scanner.file, ErrorMessages.MACRO_UNDECL,                                                      identleft, identright);                      }                      RESULT = new RegExp1(sym.MACROUSE, ident);                    :}                |  charclass:c                   {: RESULT = c; :}                |  preclass:list                   {:                     try {                       // assumption [correct?]: preclasses are already closed under case                       charClasses.makeClass(list, false);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, listleft);                     }                     RESULT = new RegExp1(sym.CCLASS, list);                   :}                |  STRING:str                   {:                      try {                       if ( scanner.caseless ) {                         charClasses.makeClass(str, true);                         RESULT = new RegExp1(sym.STRING_I, str);                       }                       else {                         charClasses.makeClass(str, false);                         RESULT = new RegExp1(sym.STRING, str);                        }                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CS2SMALL_STRING, strleft, strright);                     }                   :}                |  POINT                   {:                       Vector any = new Vector();                      any.addElement(new Interval('\n','\n'));                      // assumption: there is no upper case for \n                      charClasses.makeClass('\n', false);                      RESULT = new RegExp1(sym.CCLASSNOT, any);                    :}                |  CHAR:c                   {:                      try {                       if ( scanner.caseless ) {                         charClasses.makeClass(c.charValue(), true);                         RESULT = new RegExp1(sym.CHAR_I, c);                       }                       else {                         charClasses.makeClass(c.charValue(), false);                         RESULT = new RegExp1(sym.CHAR, c);                        }                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright);                     }                   :}                ;charclass     ::=  OPENCLASS CLOSECLASS                   {:                      RESULT = new RegExp1(sym.CCLASS,null);                   :}                |  OPENCLASS classcontent:list CLOSECLASS:close                   {:                      try {                       charClasses.makeClass(list, Options.jlex && scanner.caseless);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);                     }                     RESULT = new RegExp1(sym.CCLASS,list);                   :}                |  OPENCLASS HAT CLOSECLASS:close                   {:                      Vector list = new Vector();                     list.addElement(new Interval((char)0,CharClasses.maxChar));                     try {                       charClasses.makeClass(list, false);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);                     }                     RESULT = new RegExp1(sym.CCLASS,list);                   :}                |  OPENCLASS HAT classcontent:list CLOSECLASS:close                   {:                      try {                       charClasses.makeClassNot(list, Options.jlex && scanner.caseless);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);                     }                     RESULT = new RegExp1(sym.CCLASSNOT,list);                   :}                | OPENCLASS DASH classcontent:list CLOSECLASS:close                   {:                      try {                       list.addElement(new Interval('-','-'));                       charClasses.makeClass(list, Options.jlex && scanner.caseless);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);                     }                     RESULT = new RegExp1(sym.CCLASS,list);                   :}                |  OPENCLASS HAT DASH classcontent:list CLOSECLASS:close                   {:                      try {                       list.addElement(new Interval('-','-'));                       charClasses.makeClassNot(list, Options.jlex && scanner.caseless);                     }                     catch (CharClassException e) {                       syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);                     }                     RESULT = new RegExp1(sym.CCLASSNOT,list);                   :}                ;classcontent  ::=  classcontent:list classcontentelem:elem                   {:                     list.addElement(elem);                     RESULT = list;                   :}                |  classcontentelem:elem                   {:                     Vector list = new Vector();                     list.addElement(elem);                     RESULT = list;                   :}                |  classcontent:list preclass:plist                   {:                     for (Enumeration e = plist.elements(); e.hasMoreElements();)                       list.addElement(e.nextElement());                     RESULT = list;                   :}                |  preclass:list                    {: RESULT = list; :}                |  classcontent:list STRING:s                   {:                       for (int i = 0; i < s.length(); i++)                        list.addElement(new Interval(s.charAt(i),s.charAt(i)));                      RESULT = list;                   :}                |  STRING:s                   {:                       RESULT = new Vector();                      for (int i = 0; i < s.length(); i++)                        RESULT.addElement(new Interval(s.charAt(i),s.charAt(i)));                   :}                |  classcontent:list MACROUSE:ident                   {:                      syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);                   :}                |  MACROUSE:ident                   {:                      syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);                   :}                ;classcontentelem ::= CHAR:c1 DASH CHAR:c2                     {: RESULT = new Interval(c1.charValue(), c2.charValue()); :}                   | CHAR:c                     {: RESULT = new Interval(c.charValue(), c.charValue()); :}                   ;                   preclass ::= JLETTERCLASS             {: RESULT = makePreClass(sym.JLETTERCLASS); :}           | JLETTERDIGITCLASS              {: RESULT = makePreClass(sym.JLETTERDIGITCLASS); :}           | LETTERCLASS             {: RESULT = makePreClass(sym.LETTERCLASS); :}           | DIGITCLASS             {: RESULT = makePreClass(sym.DIGITCLASS); :}           | UPPERCLASS             {: RESULT = makePreClass(sym.UPPERCLASS); :}           | LOWERCLASS             {: RESULT = makePreClass(sym.LOWERCLASS); :}           ;

⌨️ 快捷键说明

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