====== Alphabet and keywords ====== protected DIGIT : '0'..'9'; protected UNDER : '_'; protected LETTER : 'a'..'z' | 'A'..'Z'; protected BIDIRPIPE : "<|>"; NUMBER : DIGIT (DIGIT)*; WORD : LETTER (DIGIT | LETTER | UNDER)* ; protected GOTO : "GOTO" ; // ports SELF : "_SELF"; CALLER :"_CALLER"; LINKTYPE : "r-r"|"r-p"|"p-p"|"p-r"; PORT : UNDER (WORD | SELF | CALLER); //PRIMITIVE TYPES protected INTEGER_TYPE :"INT"; protected BOOL_TYPE:"BOOL"; protected STRING_TYPE:"STRING"; protected INTEGER : NUMBER; LT : '<'; GT : '>'; EQ : '='; DIFF : "<>"; LE : "<="; GE : ">="; PIPE : "|"; ARROW_START : "--"; ARROW_END : "-->" ; COMMA : ','; SEMICOLON : ';'; BLOCK_START : '{'; BLOCK_END : '}'; PAR_START : '('; PAR_END : ')'; BRACKET_START : '['; BRACKET_END : ']'; DB_EXCLAM_MARK : "!!"; DB_QUESTION_MARK : "??"; QUESTION_MARK : '?'; EXCLAM_MARK : '!'; AFFECTE : ":="; COLON : ':'; QUOT_MARK : '\"'; PERIOD : '.'; protected DOTDOT : PERIOD PERIOD; ====== Keywords and Operators (contd.) ====== PLUS : '+'; MINUS : '-'; MULT : '*'; DIV : '/'; //OP_COMP : '=' | "<" | '>' |"<>" | "<=" | ">="; protected BOOL_OPERATORS : LAND|LOR|OP_NOT|LNOT|BNOT|TRUE|FALSE; protected OP_COMP : LT | GT | EQ | DIFF | LE | GE; protected OP_CALC :PLUS|MINUS|MULT|DIV|INCR|ARROW_START; //OPERATORS : BOOL_OPERATORS|OP_COMP|OP_CALC; LAND : "&&"; LOR : "||" ; protected OP_NOT : "not"; LNOT : '!' ; BNOT : '~' ; TRUE : "true"; FALSE : "false"; FOR_ALL : "\\forall"; EXISTS : "\\exists"; INCR : "++"; ====== Identifiers and separators ====== WS : (' ' | '\t' | '\r' '\n' { newline(); } | '\n' { newline(); } ) { $setType(Token.SKIP); } ; SPECIAL_CHARS : '@'|'%'|'\\'|'\''|'^'|'&'|'|'; // Single-line comments protected AT_SL_COMMENT :("@") (~('\n'|'\r'))* ('\n'|'\r'('\n')?) ; IDENT options {testLiterals=true;} : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* ; // character literals protected CHAR_LITERAL : '\'' ( ESC | ~('\''|'\n'|'\r'|'\\') ) '\'' ; // string literals STRING_LITERAL : '"' (ESC|~('"'|'\\'|'\n'|'\r'))* '"' ; // escape sequence -- note that this is protected; it can only be called // from another lexer rule -- it will not ever directly return a token to // the parser protected ESC : '\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '"' | '\'' | '\\' ) ; IMP_ML_COMMENT : "/*" (~('*'))* "*/" ; ====== Identifiers and separators (contd.) ====== SL_COMMENT : ("//" or| "#") (~('\n'|'\r'))* ('\n'|'\r'('\n')?) {$setType(Token.SKIP); newline();} ; NEWLINE : ( "\r\n" // DOS | '\r' // MAC | '\n' // Unix ) { newline(); $setType(Token.SKIP); } ;