lexer grammar RutaLexer;
options {
	language = Java;
}


tokens {
	DocComment;
	Annotation;
	ListIdentifier;
}

@lexer::header {
/*
 * 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.
*/

package org.apache.uima.ruta.ide.core.parser;
}
@lexer::members {
  public int implicitLineJoiningLevel = 0;
  public int startPos=-1;
  public void emitErrorMessage(String msg) {
  }
}


TRIE
  : 'TRIE'
  ;

CONTAINS
  : 'CONTAINS'
  ;

DECLARE
  : 'DECLARE'
  ;

WORDLIST
  : 'WORDLIST'
  ;

WORDTABLE
  : 'WORDTABLE'
  ;

RESOURCE
  : 'RESOURCE'
  ;

AND
  : 'AND'
  ;

CONTEXTCOUNT
  : 'CONTEXTCOUNT'
  ;

COUNT
  : 'COUNT'
  ;

TOTALCOUNT
  : 'TOTALCOUNT'
  ;

CURRENTCOUNT
  : 'CURRENTCOUNT'
  ;

INLIST
  : 'INLIST'
  ;


LAST
  : 'LAST'
  ;

MOFN
  : 'MOFN'
  ;

NEAR
  : 'NEAR'
  ;

OR
  : 'OR'
  ;

PARTOF
  : 'PARTOF'
  ;
  
PARTOFNEQ
  : 'PARTOFNEQ'
  ;

POSITION
  : 'POSITION'
  ;

REGEXP
  : 'REGEXP'
  ;

SCORE
  : 'SCORE'
  ;

VOTE
  : 'VOTE'
  ;

IF
  : 'IF'
  ;

FEATURE
  : 'FEATURE'
  ;

PARSE
  : 'PARSE'
  ;

CREATE
  : 'CREATE'
  ;

GATHER
  : 'GATHER'
  ;

FILL
  : 'FILL'
  ;

ATTRIBUTE
  : 'ATTRIBUTE'
  ;

COLOR
  : 'COLOR'
  ;

DEL
  : 'DEL'
  ;

LOG
  : 'LOG'
  ;

MARK
  : 'MARK'
  ;

MARKSCORE
  : 'MARKSCORE'
  ;

MARKONCE
  : 'MARKONCE'
  ;

MARKFAST
  : 'MARKFAST'
  ;
  
MARKTABLE
  : 'MARKTABLE'
  ;
  
MARKLAST
  : 'MARKLAST'
  ;
  
MARKFIRST
  : 'MARKFIRST'
  ;

REPLACE
  : 'REPLACE'
  ;

RETAINTYPE
  : 'RETAINTYPE'
  ;

FILTERTYPE
  : 'FILTERTYPE'
  ;

CALL
  : 'CALL'
  ;


EXEC
  : 'EXEC'
  ;

CONFIGURE
  : 'CONFIGURE'
  ;

ASSIGN
  : 'ASSIGN'
  ;

SETFEATURE
  : 'SETFEATURE'
  ;

GETFEATURE
  : 'GETFEATURE'
  ;

UNMARK
  : 'UNMARK'
  ;

UNMARKALL
  : 'UNMARKALL'
  ;

TRANSFER
  : 'TRANSFER'
  ;


SHIFT   
  : 'SHIFT'  
  ;

SPLIT   
  : 'SPLIT'  
  ;

DYNAMICANCHORING  
  : 'DYNAMICANCHORING'   
  ;

GREEDYANCHORING   
  : 'GREEDYANCHORING'  
  ;

TRIM
  : 'TRIM'
  ;

BEFORE
  : 'BEFORE'
  ;

AFTER
  : 'AFTER'
  ;

IS  
  : 'IS'   
  ;


STARTSWITH  
  : 'STARTSWITH'   
  ;

ENDSWITH  
  : 'ENDSWITH'   
  ;

ADDRETAINTYPE
  : 'ADDRETAINTYPE'
  ;

REMOVERETAINTYPE
  : 'REMOVERETAINTYPE'
  ;

ADDFILTERTYPE
  : 'ADDFILTERTYPE'
  ;

REMOVEFILTERTYPE
  : 'REMOVEFILTERTYPE'
  ;

NOT
  : 'NOT'
  ;

ADD : 'ADD';
REMOVE  : 'REMOVE';
REMOVEDUPLICATE : 'REMOVEDUPLICATE';
MERGE   : 'MERGE';
GET : 'GET';
GETLIST : 'GETLIST';
SIZE  : 'SIZE';
MATCHEDTEXT : 'MATCHEDTEXT';
REMOVESTRING  : 'REMOVESTRING';
CLEAR   :  'CLEAR';

THEN 
  :   '->'
  ;
THEN2 
  :   '<-'
  ;
  
LogLevel:
  'finest' | 'finer' | 'fine' | 'config' | 'info' | 'warning' | 'severe'
  ; 

OldColor 
  : 'black' | 'maroon' | 'green' | 'olive' | 'navy' | 'purple' | 'teal' | 'gray' | 'silver' | 'red' | 'lime' | 'yellow' | 'blue' | 'fuchsia' | 'aqua'
  ;

PackageString   : 'PACKAGE';
ScriptString  : 'SCRIPT';
EngineString  : 'ENGINE';
UimafitString : 'UIMAFIT';
BlockString   : 'BLOCK';
ForEachString   : 'FOREACH';
TypeString  : 'TYPE';
IntString : 'INT';
DoubleString  : 'DOUBLE';
FloatString : 'FLOAT';
StringString  : 'STRING';
BooleanString : 'BOOLEAN';
TypeSystemString: 'TYPESYSTEM';
ImportString    :   'IMPORT';
FromString      :   'FROM';
AsString        :   'AS';
SymbolString  : 'SYMBOL';
CONDITION : 'CONDITION';  
ACTION    : 'ACTION';
VAR    : 'VAR';
BOOLEANLIST 
  :  'BOOLEANLIST';
INTLIST : 'INTLIST';
DOUBLELIST
  :  'DOUBLELIST';
FLOATLIST
  :  'FLOATLIST';
STRINGLIST
  : 'STRINGLIST'; 
TYPELIST: 'TYPELIST';

ANNOTATION 
	:	 'ANNOTATION';
ANNOTATIONLIST
	:	'ANNOTATIONLIST';


EXP   : 'EXP';
LOGN  : 'LOGN';
SIN : 'SIN';
COS : 'COS';
TAN : 'TAN';
POW : 'POW';
XOR :   'XOR';
TRUE  : 'true';
FALSE   : 'false';
NULL : 'null';


ADDRESS_PREFIX 
	:	 '$';

STARTANCHOR 
  :  '@';

HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;

DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;

OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ;

fragment
HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;

fragment
IntegerTypeSuffix : ('l'|'L') ;

FloatingPointLiteral
    :   ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix?
    |   '.' ('0'..'9')+ Exponent? FloatTypeSuffix?
    //|   ('0'..'9')+ Exponent FloatTypeSuffix?
    //|   ('0'..'9')+ Exponent? FloatTypeSuffix
  ;
  
fragment
Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;

fragment
FloatTypeSuffix : ('f'|'F'|'d'|'D') ;

CharacterLiteral
    :   '\'' ( EscapeSequence | ~('\''|'\\') ) '\''
    ;

StringLiteral
    :  '"' ( EscapeSequence | ~('\\'|'"') )* '"'
    ;

RessourceLiteral
    :  '\'' ( EscapeSequence | ~('\\'|'\'') )* '\''
    ;

fragment
EscapeSequence
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   UnicodeEscape
    |   OctalEscape
    ;

fragment
OctalEscape
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

fragment
UnicodeEscape
    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
    ;

  
Identifier 
    :   Letter (Letter|JavaIDDigit)*
    ;


fragment
Letter
    :  
       '\u0041'..'\u005a' |
       '\u005f' |
       '\u0061'..'\u007a' |
       '\u00c0'..'\u00d6' |
       '\u00d8'..'\u00f6' |
       '\u00f8'..'\u00ff' |
       '\u0100'..'\u1fff' |
       '\u3040'..'\u318f' |
       '\u3300'..'\u337f' |
       '\u3400'..'\u3d2d' |
       '\u4e00'..'\u9fff' |
       '\uf900'..'\ufaff'
    ;

fragment
JavaIDDigit
    :  '\u0030'..'\u0039' |
       '\u0660'..'\u0669' |
       '\u06f0'..'\u06f9' |
       '\u0966'..'\u096f' |
       '\u09e6'..'\u09ef' |
       '\u0a66'..'\u0a6f' |
       '\u0ae6'..'\u0aef' |
       '\u0b66'..'\u0b6f' |
       '\u0be7'..'\u0bef' |
       '\u0c66'..'\u0c6f' |
       '\u0ce6'..'\u0cef' |
       '\u0d66'..'\u0d6f' |
       '\u0e50'..'\u0e59' |
       '\u0ed0'..'\u0ed9' |
       '\u1040'..'\u1049'
   ;



LPAREN  : '(' {implicitLineJoiningLevel++;} ;

RPAREN  : ')' {implicitLineJoiningLevel--;} ;

LBRACK  : '[' {implicitLineJoiningLevel++;} ;

RBRACK  : ']' {implicitLineJoiningLevel--;} ;

LCURLY  : '{' {implicitLineJoiningLevel++;} ;

RCURLY  : '}' {implicitLineJoiningLevel--;} ;

CIRCUMFLEX  : '^' ;

DOT : '.' ;

COLON   : ':' ;

COMMA : ',' ;

SEMI  : ';' ;

PLUS  : '+' ;

MINUS : '-' ;

STAR  : '*' ;

SLASH : '/' ;

VBAR  : '|' ;

AMPER : '&' ;

LESS  : '<' ;

GREATER : '>' ;

ASSIGN_EQUAL  : '=' ;

PERCENT : '%' ;

QUESTION  : '?' ;

EQUAL : '==' ;

NOTEQUAL  : '!=' ;

ALT_NOTEQUAL: '<>' ;

LESSEQUAL : '<=' ;


GREATEREQUAL  : '>=' ;


WILDCARD  : '#' ;

WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
    ;







COMMENT
    :   '/*'{if (input.LA(1)=='*') $type=DocComment; else $channel=HIDDEN;} ( options {greedy=false;} : . )* '*/' 
    ;

LINE_COMMENT
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    ;



    
