Table des matières

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);
             }
          ;