|
1 | 1 | lexer grammar RustLexer;
|
2 | 2 |
|
| 3 | +tokens { |
| 4 | + EQ, LT, LE, EQEQ, NE, GE, GT, ANDAND, OROR, NOT, TILDE, PLUT, |
| 5 | + MINUS, STAR, SLASH, PERCENT, CARET, AND, OR, SHL, SHR, BINOP, |
| 6 | + BINOPEQ, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON, |
| 7 | + MOD_SEP, RARROW, FAT_ARROW, LPAREN, RPAREN, LBRACKET, RBRACKET, |
| 8 | + LBRACE, RBRACE, POUND, DOLLAR, UNDERSCORE, LIT_CHAR, |
| 9 | + LIT_INTEGER, LIT_FLOAT, LIT_STR, LIT_STR_RAW, LIT_BINARY, |
| 10 | + LIT_BINARY_RAW, IDENT, LIFETIME, WHITESPACE, DOC_COMMENT, |
| 11 | + COMMENT |
| 12 | +} |
| 13 | + |
3 | 14 | /* Note: due to antlr limitations, we can't represent XID_start and
|
4 | 15 | * XID_continue properly. ASCII-only substitute. */
|
5 | 16 |
|
6 | 17 | fragment XID_start : [_a-zA-Z] ;
|
7 | 18 | fragment XID_continue : [_a-zA-Z0-9] ;
|
8 | 19 |
|
| 20 | + |
9 | 21 | /* Expression-operator symbols */
|
10 | 22 |
|
11 | 23 | EQ : '=' ;
|
@@ -83,7 +95,7 @@ LIT_CHAR
|
83 | 95 | : '\'' ( '\\' CHAR_ESCAPE | ~[\\'\n\t\r] ) '\''
|
84 | 96 | ;
|
85 | 97 |
|
86 |
| -INT_SUFFIX |
| 98 | +fragment INT_SUFFIX |
87 | 99 | : 'i'
|
88 | 100 | | 'i8'
|
89 | 101 | | 'i16'
|
@@ -141,25 +153,28 @@ LIFETIME : '\'' IDENT ;
|
141 | 153 |
|
142 | 154 | WHITESPACE : [ \r\n\t]+ ;
|
143 | 155 |
|
144 |
| -COMMENT |
145 |
| - : '//' ~[\r\n]* |
146 |
| - | '////' ~[\r\n]* |
147 |
| - | BLOCK_COMMENT |
148 |
| - ; |
| 156 | +LINE_COMMENT_NOT_A_TOKEN : '//' -> more, pushMode(LINE_COMMENT) ; |
149 | 157 |
|
150 |
| -mode DOCCOMMENT; |
151 | 158 |
|
152 |
| -fragment DOC_BLOCK_COMMENT |
153 |
| - : ('/**' | '/*!') (DOC_BLOCK_COMMENT | .)*? '*/' |
| 159 | +DOC_BLOCK_COMMENT |
| 160 | + : ('/**' | '/*!') (DOC_BLOCK_COMMENT | .)*? '*/' -> type(DOC_COMMENT) |
154 | 161 | ;
|
155 | 162 |
|
156 |
| -DOC_COMMENT |
157 |
| - : '///' ~[\r\n]* |
158 |
| - | '//!' ~[\r\n]* |
159 |
| - | DOC_BLOCK_COMMENT |
| 163 | +BLOCK_COMMENT : '/*' (BLOCK_COMMENT | .)*? '*/' -> type(COMMENT) ; |
| 164 | + |
| 165 | +mode LINE_COMMENT; |
| 166 | + |
| 167 | +MAYBE_DOC_COMMENT |
| 168 | + : '/' -> more, pushMode(LINE_DOC_COMMENT) |
160 | 169 | ;
|
161 | 170 |
|
162 |
| -fragment BLOCK_COMMENT |
163 |
| - : '/*' (BLOCK_COMMENT | .)*? '*/' |
| 171 | +MAYBE_OUTER_DOC_COMMENT |
| 172 | + : '!' ~[\r\n]* -> type(LINE_DOC_COMMENT), popMode |
164 | 173 | ;
|
165 | 174 |
|
| 175 | +COMMENT : ~[\r\n]* -> popMode ; |
| 176 | + |
| 177 | +mode LINE_DOC_COMMENT; |
| 178 | + |
| 179 | +ACTUALLY_A_COMMENT : '/' ~[\r\n]* -> type(COMMENT), popMode ; |
| 180 | +REALLY_A_DOC_COMMENT : ~[\r\n]* -> type(DOC_COMMENT), popMode ; |
0 commit comments