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

Popular posts from this blog

node.js - Bad Request - node js ajax post -

Why does Ruby on Rails generate add a blank line to the end of a file? -

keyboard - Smiles and long press feature in Android -