antlr3 - ANTLR: match tokens with whitespace -
i want match expression white space single token. following lexer rules:
hour : (integer) ('hour'|'hours') ; minute : (integer) ('min'|'minute'|'minutes') ; integer : '0' 'x' (hexdigit)+ | (digit)+ ; fragment digit : '0'..'9'; fragment hexdigit : 'a'..'f' | 'a'..'f' | digit; ws : ( '\t' | ' ' | '\r' | '\n'| '\u000c' )+ {skip()}; if use '12hour', hour token. use '12 hour', integer , 'hour'. can make lexer return whole '12 hour' single hour token?
if use '12hour', hour token. use '12 hour', integer , 'hour'.
yes, expected behavior. because ws skipped parser rules.
what can make lexer return whole '12 hour' single hour token?
either include space-chars in hour rule:
// don't use `ws` in token, or `skip()` // invoked , token skipped! hour : (integer) space* ('hour'|'hours') ; ws : space+ {skip();}; fragment space : '\t' | ' ' | '\r' | '\n'| '\u000c'; or, imo preferred way, create parse rule such thing:
hour : integer hour; hour : 'hour' | 'hours' ; integer : '0' 'x' (hexdigit)+ | (digit)+;
Comments
Post a Comment