blob: 4755a6160440e6644b00c0ea099885558329dce3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Lexer file for Pig Parser
*/
lexer grammar QueryLexer;
@header {
package org.apache.pig.parser;
}
@members {
@Override
public void reportError(RecognitionException e) {
super.reportError( e );
// The method of this signature doesn't permit checked exception. Here we have to
// throw a unchecked execption in order to stop at the first error.
// For more information, visit http://www.antlr.org/wiki/pages/viewpage.action?pageId=5341217.
StringBuilder sb = new StringBuilder();
sb.append( getErrorHeader( e ) ).append( " " );
sb.append( getErrorMessage( e, getTokenNames() ) );
throw new RuntimeException( sb.toString() );
}
@Override
public String getErrorMessage(RecognitionException e, String[] tokenNames ) {
if( e instanceof NoViableAltException ) {
return "Unexpected character " + getCharErrorDisplay( e.c );
} else {
return super.getErrorMessage( e, tokenNames );
}
}
@Override
public String getErrorHeader(RecognitionException ex) {
return QueryParserUtils.generateErrorHeader( ex, this.getSourceName() );
}
} // End of members.
VOID : 'VOID'
;
NULL : 'NULL'
;
IMPORT : 'IMPORT'
;
REGISTER : 'REGISTER'
;
RETURNS : 'RETURNS'
;
DEFINE : 'DEFINE'
;
LOAD : 'LOAD'
;
FILTER : 'FILTER'
;
FOREACH : 'FOREACH'
;
ORDER : 'ORDER'
;
RANK : 'RANK'
;
DENSE : 'DENSE'
;
CUBE : 'CUBE'
;
ROLLUP : 'ROLLUP'
;
INVOKE : 'INVOKE'
;
DISTINCT : 'DISTINCT'
;
COGROUP : 'COGROUP'
;
JOIN : 'JOIN'
;
CROSS : 'CROSS'
;
UNION : 'UNION'
;
SPLIT : 'SPLIT'
;
INTO : 'INTO'
;
IF : 'IF'
;
OTHERWISE : 'OTHERWISE'
;
ALL : 'ALL'
;
AS : 'AS'
;
BY : 'BY'
;
USING : 'USING'
;
INNER : 'INNER'
;
OUTER : 'OUTER'
;
ONSCHEMA : 'ONSCHEMA'
;
PARALLEL : 'PARALLEL'
;
PARTITION : 'PARTITION'
;
GROUP : 'GROUP'
;
AND : 'AND'
;
OR : 'OR'
;
NOT : 'NOT'
;
GENERATE : 'GENERATE'
;
FLATTEN : 'FLATTEN'
;
ASC : 'ASC'
;
DESC : 'DESC'
;
BOOLEAN : 'BOOLEAN'
;
INT : 'INT'
;
LONG : 'LONG'
;
FLOAT : 'FLOAT'
;
BIGDECIMAL : 'BIGDECIMAL'
;
BIGINTEGER : 'BIGINTEGER'
;
DOUBLE : 'DOUBLE'
;
DATETIME : 'DATETIME'
;
CHARARRAY : 'CHARARRAY'
;
BYTEARRAY : 'BYTEARRAY'
;
BAG : 'BAG'
;
TUPLE : 'TUPLE'
;
MAP : 'MAP'
;
IS : 'IS'
;
STREAM : 'STREAM'
;
THROUGH : 'THROUGH'
;
STORE : 'STORE'
;
ASSERT : 'ASSERT'
;
MAPREDUCE : 'MAPREDUCE' | 'NATIVE'
;
SHIP : 'SHIP'
;
CACHE : 'CACHE'
;
INPUT : 'INPUT'
;
OUTPUT : 'OUTPUT'
;
STDERROR : 'STDERR'
;
STDIN : 'STDIN'
;
STDOUT : 'STDOUT'
;
LIMIT : 'LIMIT'
;
SAMPLE : 'SAMPLE'
;
LEFT : 'LEFT'
;
RIGHT : 'RIGHT'
;
FULL : 'FULL'
;
CASE : 'CASE'
;
WHEN : 'WHEN'
;
THEN : 'THEN'
;
ELSE : 'ELSE'
;
END : 'END'
;
STR_OP_EQ : 'EQ'
;
STR_OP_GT : 'GT'
;
STR_OP_LT : 'LT'
;
STR_OP_GTE : 'GTE'
;
STR_OP_LTE : 'LTE'
;
STR_OP_NE : 'NEQ'
;
STR_OP_MATCHES : 'MATCHES'
;
IN : 'IN'
;
TRUE : 'TRUE'
;
FALSE : 'FALSE'
;
NUM_OP_EQ : '=='
;
NUM_OP_LT : '<'
;
NUM_OP_LTE : '<='
;
NUM_OP_GT : '>'
;
NUM_OP_GTE : '>='
;
NUM_OP_NE : '!='
;
fragment DIGIT : '0'..'9'
;
fragment LETTER : 'A'..'Z'
;
fragment SPECIALCHAR : '_'
;
fragment ID: LETTER ( DIGIT | LETTER | SPECIALCHAR )*
;
DCOLON : '::'
;
IDENTIFIER
@after {
if("null".equalsIgnoreCase(getText())){
state.type = NULL;
}
} : ( ID DCOLON ) => ( ID DCOLON IDENTIFIER ) | ID
;
fragment FLOATINGPOINT : INTEGER ( PERIOD INTEGER )? | PERIOD INTEGER
;
INTEGER: ( DIGIT )+
;
LONGINTEGER: INTEGER 'L'
;
DOLLARVAR : DOLLAR INTEGER
;
DOUBLENUMBER : FLOATINGPOINT ( 'E' ( MINUS | PLUS )? INTEGER )?
;
BIGDECIMALNUMBER : DOUBLENUMBER 'BD'
;
BIGINTEGERNUMBER : INTEGER 'BI'
;
FLOATNUMBER : DOUBLENUMBER 'F'
;
QUOTEDSTRING : '\'' ( ( ~ ( '\'' | '\\' | '\n' | '\r' ) )
| ( '\\' ( ( 'N' | 'T' | 'B' | 'R' | 'F' | '\\' | '\'' ) ) )
| ( '\\U' ( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' ) )
)*
'\''
;
MULTILINE_QUOTEDSTRING : '\'' ( ( ~ ( '\'' | '\\' ) )
| ( '\\' ( ( 'N' | 'T' | 'B' | 'R' | 'F' | '\\' | '\'' | 'n' | 'r' ) ) )
| ( '\\U' ( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' )
( '0'..'9' | 'A'..'F' ) )
)*
'\''
;
EXECCOMMAND : '`' ( ~( '`' ) )* '`'
;
STAR : '*'
;
COLON : ':'
;
DOLLAR : '$'
;
WS : ( ' ' | '\r' | '\t' | '\u000C' | '\n' ) { $channel = HIDDEN; }
;
SL_COMMENT : '--' ( ~( '\r' | '\n' ) )* { $channel = HIDDEN; }
;
ML_COMMENT : '/*' ( options { greedy=false; } : . )* '*/' { $channel = HIDDEN; }
;
SEMI_COLON : ';'
;
LEFT_PAREN : '('
;
RIGHT_PAREN : ')'
;
LEFT_CURLY : '{'
;
RIGHT_CURLY : '}'
;
LEFT_BRACKET : '['
;
RIGHT_BRACKET : ']'
;
POUND : '#'
;
EQUAL : '='
;
COMMA : ','
;
PERIOD : '.'
;
DOUBLE_PERIOD : '..'
;
DIV : '/'
;
PERCENT : '%'
;
PLUS : '+'
;
MINUS : '-'
;
QMARK : '?'
;
ARROBA : '@'
;
AMPERSAND : '&'
;
FAT_ARROW : '=>'
;