Как отличить зарезервированные слова от переменных с помощью ANTLR?

Я использую ANTLR для токенизации простой грамматики, и мне нужно различать ID:

ID              : LETTER (LETTER | DIGIT)* ;

fragment DIGIT  : '0'..'9' ;
fragment LETTER : 'a'..'z' | 'A'..'Z' ;

и RESERVED_WORD:

RESERVED_WORD : 'class' | 'public' | 'static' | 'extends' | 'void' | 'int' | 'boolean' | 'if' | 'else' | 'while' | 'return' | 'null' | 'true' | 'false' | 'this' | 'new' | 'String' ;

Скажем, я запускаю лексер на ввод:

class abc

Я получаю два маркера идентификатора для «класса» и «абв», в то время как я хочу, чтобы «класс» распознавался как RESERVED_WORD. Как мне это сделать?

6
задан Chris Covert 15 March 2012 в 19:18
поделиться