posts - 18,  comments - 0,  trackbacks - 0

          class L extends Lexer;

          options {
           k=5;
           charVocabulary = '\u0000' .. '\uFFFE';
           testLiterals=false;
           caseSensitive = false;
           caseSensitiveLiterals = true;
          }

          ONE_ARG_OP
           : '~';
          TWO_ARG_OP
           : '&' | '|' | '^' | '+' | '-' | '/' | '%'; 
          STAR
           : '*';
          COMPARE_OP
           : '>' | '<' | ">=" | "<=" | "!=" | "<>" | "=";
          NOT_EXIST:
           "not exist";
          EXIST:
           "exist";
          COMMA
           : ',';
          SEMI: ';';
          POINT
           : '.';
          LPAREN
           : '(';
          RPAREN
           : ')';

          PARAM_LPAREN
           : '{';

          PARAM_RPAREN
           : '}';


          COLUMN
           : "column";
          WHERE
           : "where";

          WS : (' '|'\n'|'\r'|'\t')+ {$setType(Token.SKIP);}
              ;

          QUOTED_STRING
           : ('"'|'\'') (ESC|~('\''|'"'|'\\'|'\n'|'\r'))* ('"'|'\'')
           ;
          protected
          ESC
           : '\\'
            ( 'n'
            | 'r'
            | 't'
            | 'b'
            | 'f'
            | '"'
            | '\''
            | '\\'
            | '0'..'3'
             (
              options {
               warnWhenFollowAmbig = false;
              }
             : '0'..'7'
              (
               options {
                warnWhenFollowAmbig = false;
               }
              : '0'..'7'
              )?
             )?
            | '4'..'7'
             (
              options {
               warnWhenFollowAmbig = false;
              }
             : '0'..'7'
             )?
            )
           ;

          PARAM_ID
           : PARAM_LPAREN ID PARAM_RPAREN
           ;

          ID options {testLiterals=true;}
           : ID_START_LETTER ( ID_LETTER )*;

          protected
          ID_START_LETTER
              :    'a'..'z'
              | '_'
              |    '\u0080'..'\ufffe'
              ;
          protected
          ID_LETTER
              : ID_START_LETTER
              | '0'..'9'
              | '/'
              ;

          REAL_NUM
           : NUM (POINT DOT_NUM)?
           ;
          protected
          NUM : '0'
           | NUM_START (NUM_LETTER)*
           ;
          protected
          DOT_NUM
           : (NUM_LETTER)+
           ;
          protected
          NUM_START
           : '1'..'9'
           ;
          protected
          NUM_LETTER
           : '0'..'9'
           ;

          ML_COMMENT
           : "/*"
            ( /* '\r' '\n' can be matched in one alternative or by matching
              '\r' in one iteration and '\n' in another.  I am trying to
              handle any flavor of newline that comes in, but the language
              that allows both "\r\n" and "\r" and "\n" to all be valid
              newline is ambiguous.  Consequently, the resulting grammar
              must be ambiguous.  I'm shutting this warning off.
              */
             options {
              generateAmbigWarnings=false;
             }
            :
             { LA(2)!='/' }? '*'
            | '\r' '\n'  {newline();}
            | '\r'   {newline();}
            | '\n'   {newline();}
            | ~('*'|'\n'|'\r')
            )*
            "*/"
            {$setType(Token.SKIP);}
           ;

          posted on 2007-04-03 17:59 LORD BLOG 閱讀(412) 評論(0)  編輯  收藏 所屬分類: 項目筆記
          主站蜘蛛池模板: 新巴尔虎右旗| 乐陵市| 静安区| 普宁市| 兴山县| 青岛市| 英吉沙县| 改则县| 广丰县| 汉源县| 长子县| 新乡市| 中江县| 迭部县| 沙湾县| 柏乡县| 衡水市| 安多县| 宜黄县| 神池县| 红桥区| 华阴市| 渭南市| 滨州市| 抚顺县| 织金县| 岳西县| 怀柔区| 会东县| 承德县| 新乐市| 平阴县| 云林县| 丰城市| 镇康县| 永吉县| 新安县| 临武县| 镇原县| 平谷区| 保德县|