1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
options
{
language = "CSharp";
}
class L extends Lexer;
options {
// Allow any char but \uFFFF (16 bit -1)
charVocabulary='\u0000'..'\uFFFE';
}
{
private static bool done = false;
public override void uponEOF() {
done=true;
}
public static void Main(string[] args) {
L lexer = new L(new CharBuffer(Console.In));
while ( !done ) {
IToken t = lexer.nextToken();
Console.Out.WriteLine("Token: "+t);
}
}
}
ID : ID_START_LETTER ( ID_LETTER )*
;
// Whitespace
WS : ( ' '
| '\t'
| '\f'
// handle newlines
| ( "\r\n" // Evil DOS
| '\r' // Macintosh
| '\n' // Unix (the right way)
)
{ newline(); }
)
{ $setType(Token.SKIP); }
;
protected
ID_START_LETTER
: '$'
| '_'
| 'a'..'z'
| '\u0080'..'\ufffe'
;
protected
ID_LETTER
: ID_START_LETTER
| '0'..'9'
;
|