7 static int saw_non_hash;
32 ident [a-zA-Z\x80-\xff_][a-zA-Z0-9\x80-\xff_]*
36 <suffix>{ident} { BEGIN(INITIAL); }
37 <suffix>(.|\n) { yyless(0); BEGIN(INITIAL); }
42 // UTF-8 byte order mark (BOM), ignore if in line 1, error otherwise
43 if (yyget_lineno() != 1) {
48 \/\/(\/|\!) { BEGIN(doc_line); yymore(); }
49 <doc_line>\n { BEGIN(INITIAL);
52 return ((yytext[2] == '!') ? INNER_DOC_COMMENT : OUTER_DOC_COMMENT);
54 <doc_line>[^\n]* { yymore(); }
56 \/\/|\/\/\/\/ { BEGIN(linecomment); }
57 <linecomment>\n { BEGIN(INITIAL); }
58 <linecomment>[^\n]* { }
60 \/\*(\*|\!)[^*] { yy_push_state(INITIAL); yy_push_state(doc_block); yymore(); }
61 <doc_block>\/\* { yy_push_state(doc_block); yymore(); }
64 if (yy_top_state() == doc_block) {
67 return ((yytext[2] == '!') ? INNER_DOC_COMMENT : OUTER_DOC_COMMENT);
70 <doc_block>(.|\n) { yymore(); }
72 \/\* { yy_push_state(blockcomment); }
73 <blockcomment>\/\* { yy_push_state(blockcomment); }
74 <blockcomment>\*\/ { yy_pop_state(); }
75 <blockcomment>(.|\n) { }
77 _ { return UNDERSCORE; }
78 abstract { return ABSTRACT; }
79 alignof { return ALIGNOF; }
81 become { return BECOME; }
83 break { return BREAK; }
84 catch { return CATCH; }
85 const { return CONST; }
86 continue { return CONTINUE; }
87 crate { return CRATE; }
88 default { return DEFAULT; }
92 extern { return EXTERN; }
93 false { return FALSE; }
94 final { return FINAL; }
101 loop { return LOOP; }
102 macro { return MACRO; }
103 match { return MATCH; }
105 move { return MOVE; }
107 offsetof { return OFFSETOF; }
108 override { return OVERRIDE; }
109 priv { return PRIV; }
110 proc { return PROC; }
111 pure { return PURE; }
114 return { return RETURN; }
115 self { return SELF; }
116 sizeof { return SIZEOF; }
117 static { return STATIC; }
118 struct { return STRUCT; }
119 super { return SUPER; }
120 trait { return TRAIT; }
121 true { return TRUE; }
122 type { return TYPE; }
123 typeof { return TYPEOF; }
124 union { return UNION; }
125 unsafe { return UNSAFE; }
126 unsized { return UNSIZED; }
128 virtual { return VIRTUAL; }
129 where { return WHERE; }
130 while { return WHILE; }
131 yield { return YIELD; }
133 {ident} { return IDENT; }
135 0x[0-9a-fA-F_]+ { BEGIN(suffix); return LIT_INTEGER; }
136 0o[0-7_]+ { BEGIN(suffix); return LIT_INTEGER; }
137 0b[01_]+ { BEGIN(suffix); return LIT_INTEGER; }
138 [0-9][0-9_]* { BEGIN(suffix); return LIT_INTEGER; }
139 [0-9][0-9_]*\.(\.|[a-zA-Z]) { yyless(yyleng - 2); BEGIN(suffix); return LIT_INTEGER; }
141 [0-9][0-9_]*\.[0-9_]*([eE][-\+]?[0-9_]+)? { BEGIN(suffix); return LIT_FLOAT; }
142 [0-9][0-9_]*(\.[0-9_]*)?[eE][-\+]?[0-9_]+ { BEGIN(suffix); return LIT_FLOAT; }
146 \.\.\. { return DOTDOTDOT; }
147 \.\. { return DOTDOT; }
156 # { BEGIN(pound); yymore(); }
157 <pound>\! { BEGIN(shebang_or_attr); yymore(); }
158 <shebang_or_attr>\[ {
163 <shebang_or_attr>[^\[\n]*\n {
164 // Since the \n was eaten as part of the token, yylineno will have
165 // been incremented to the value 2 if the shebang was on the first
166 // line. This yyless undoes that, setting yylineno back to 1.
168 if (yyget_lineno() == 1) {
177 <pound>. { BEGIN(INITIAL); yyless(1); return '#'; }
180 :: { return MOD_SEP; }
186 => { return FAT_ARROW; }
192 \<\<= { return SHLEQ; }
196 \>\>= { return SHREQ; }
199 \x27 { BEGIN(ltorchar); yymore(); }
200 <ltorchar>static { BEGIN(INITIAL); return STATIC_LIFETIME; }
201 <ltorchar>{ident} { BEGIN(INITIAL); return LIFETIME; }
202 <ltorchar>\\[nrt\\\x27\x220]\x27 { BEGIN(suffix); return LIT_CHAR; }
203 <ltorchar>\\x[0-9a-fA-F]{2}\x27 { BEGIN(suffix); return LIT_CHAR; }
204 <ltorchar>\\u\{([0-9a-fA-F]_*){1,6}\}\x27 { BEGIN(suffix); return LIT_CHAR; }
205 <ltorchar>.\x27 { BEGIN(suffix); return LIT_CHAR; }
206 <ltorchar>[\x80-\xff]{2,4}\x27 { BEGIN(suffix); return LIT_CHAR; }
207 <ltorchar><<EOF>> { BEGIN(INITIAL); return -1; }
209 b\x22 { BEGIN(bytestr); yymore(); }
210 <bytestr>\x22 { BEGIN(suffix); return LIT_BYTE_STR; }
212 <bytestr><<EOF>> { return -1; }
213 <bytestr>\\[n\nrt\\\x27\x220] { yymore(); }
214 <bytestr>\\x[0-9a-fA-F]{2} { yymore(); }
215 <bytestr>\\u\{([0-9a-fA-F]_*){1,6}\} { yymore(); }
216 <bytestr>\\[^n\nrt\\\x27\x220] { return -1; }
217 <bytestr>(.|\n) { yymore(); }
219 br\x22 { BEGIN(rawbytestr_nohash); yymore(); }
220 <rawbytestr_nohash>\x22 { BEGIN(suffix); return LIT_BYTE_STR_RAW; }
221 <rawbytestr_nohash>(.|\n) { yymore(); }
222 <rawbytestr_nohash><<EOF>> { return -1; }
234 } else if (end_hashes != 0) {
236 if (end_hashes == num_hashes) {
238 return LIT_BYTE_STR_RAW;
245 if (end_hashes == num_hashes) {
247 return LIT_BYTE_STR_RAW;
255 if (end_hashes != 0) {
260 <rawbytestr><<EOF>> { return -1; }
262 b\x27 { BEGIN(byte); yymore(); }
263 <byte>\\[nrt\\\x27\x220]\x27 { BEGIN(INITIAL); return LIT_BYTE; }
264 <byte>\\x[0-9a-fA-F]{2}\x27 { BEGIN(INITIAL); return LIT_BYTE; }
265 <byte>\\u([0-9a-fA-F]_*){4}\x27 { BEGIN(INITIAL); return LIT_BYTE; }
266 <byte>\\U([0-9a-fA-F]_*){8}\x27 { BEGIN(INITIAL); return LIT_BYTE; }
267 <byte>.\x27 { BEGIN(INITIAL); return LIT_BYTE; }
268 <byte><<EOF>> { BEGIN(INITIAL); return -1; }
270 r\x22 { BEGIN(rawstr); yymore(); }
271 <rawstr>\x22 { BEGIN(suffix); return LIT_STR_RAW; }
272 <rawstr>(.|\n) { yymore(); }
273 <rawstr><<EOF>> { return -1; }
276 BEGIN(rawstr_esc_begin);
283 <rawstr_esc_begin># {
287 <rawstr_esc_begin>\x22 {
288 BEGIN(rawstr_esc_body);
291 <rawstr_esc_begin>(.|\n) { return -1; }
293 <rawstr_esc_body>\x22/# {
294 BEGIN(rawstr_esc_end);
297 <rawstr_esc_body>(.|\n) {
303 if (end_hashes == num_hashes) {
309 <rawstr_esc_end>[^#] {
311 BEGIN(rawstr_esc_body);
315 <rawstr_esc_begin,rawstr_esc_body,rawstr_esc_end><<EOF>> { return -1; }
317 \x22 { BEGIN(str); yymore(); }
318 <str>\x22 { BEGIN(suffix); return LIT_STR; }
320 <str><<EOF>> { return -1; }
321 <str>\\[n\nr\rt\\\x27\x220] { yymore(); }
322 <str>\\x[0-9a-fA-F]{2} { yymore(); }
323 <str>\\u\{([0-9a-fA-F]_*){1,6}\} { yymore(); }
324 <str>\\[^n\nrt\\\x27\x220] { return -1; }
325 <str>(.|\n) { yymore(); }
327 \<- { return LARROW; }
328 -\> { return RARROW; }
330 -= { return MINUSEQ; }
331 && { return ANDAND; }
334 \|\| { return OROR; }
338 \+= { return PLUSEQ; }
340 \*= { return STAREQ; }
342 \/= { return SLASHEQ; }
344 \^= { return CARETEQ; }
346 %= { return PERCENTEQ; }
348 <<EOF>> { return 0; }