218
219<Body,Suite>{
220 "def"{BB} {
224 BEGIN( FunctionDec );
225 }
226 "async"{BB}"def"{BB} {
230 BEGIN( FunctionDec );
231 }
232
233 "class"{BB} {
237 BEGIN( ClassDec );
238 }
239 "None" {
243 }
244 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
245 codify(yyscanner,"self.");
247 }
248 "self."{IDENTIFIER}/"(" {
249 codify(yyscanner,"self.");
251 }
252 "self."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
253 codify(yyscanner,"self.");
255 }
256 "self."{IDENTIFIER} {
257 codify(yyscanner,"self.");
259 }
260 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER}"(" {
263 }
264 "cls."{IDENTIFIER}/"(" {
267 }
268 "cls."{IDENTIFIER}/"."({IDENTIFIER}".")*{IDENTIFIER} {
271 }
272 "cls."{IDENTIFIER} {
275 }
276 "@"{SCOPE}{CALLANY}? {
280 }
281}
282
283<ClassDec>{IDENTIFIER} {
285
286 yyextra->curClassName = yytext;
287 yyextra->curClassBases.clear();
288 BEGIN( ClassInheritance );
289 }
290
291<ClassInheritance>{
292 ({BB}|[(,)]) {
294 }
295
296 ({IDENTIFIER}".")*{IDENTIFIER} {
297
298
299
300
301
302
303
304
305
306
307
308
309
310 yyextra->curClassBases.emplace_back(yytext);
311 yyextra->insideBody = true;
313 yyextra->insideBody = false;
314
315 }
316
317 ":" {
319
320
321
322
323
324
325
327 for (const auto &s : yyextra->curClassBases)
328 {
329 const ClassDef *baseDefToAdd = nullptr;
330
331 auto it = yyextra->codeClassMap.find(s);
332 if (it != yyextra->codeClassMap.end())
333 {
334 baseDefToAdd = toClassDef(it->second.globalDef());
335 }
336
337 if (baseDefToAdd==nullptr)
338 {
339 baseDefToAdd=yyextra->symbolResolver.resolveClass(yyextra->currentDefinition,s.c_str(),true);
340 }
341
342 if (baseDefToAdd && baseDefToAdd->name()!=yyextra->curClassName)
343 {
344 var.localDef()->insertBaseClass(baseDefToAdd->name());
345 }
346 }
347 yyextra->codeClassMap.emplace(yyextra->curClassName.str(),std::move(var));
348
349
350 yyextra->curClassName.clear();
351 yyextra->curClassBases.clear();
352
353 yyextra->noSuiteFound = TRUE;
354 BEGIN( SuiteStart );
355 }
356}
357
358
359<FunctionDec>{
360 {IDENTIFIER} {
362 }
363
364 {B}"(" {
366 BEGIN( FunctionParams );
367 }
368}
369
370<FunctionParams>{
371 ({BB}|",") {
372
374 }
375
376 ({IDENTIFIER}|{PARAMNONEMPTY}+) {
378 }
379
380 ")" {
382 }
383
384 "\n" {
386 }
387
388 ":" {
390
391
392
393
394
395 yyextra->noSuiteFound = TRUE;
396 BEGIN( SuiteStart );
397 }
398}
399
400<Body,Suite>{
401
402 {KEYWORD} {
403
404
405
406
407
411 }
412
413 {FLOWKW} {
418 }
419 ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
420 yyextra->insideBody = true;
422 yyextra->insideBody = false;
423 }
424 ({IDENTIFIER}".")+{IDENTIFIER} {
425 yyextra->insideBody = true;
427 yyextra->insideBody = false;
428 }
429 {IDENTIFIER} { codify(yyscanner,yytext); }
430
431}
432
433
434
435<SuiteStart>{
436
437 {BB} {
439 }
440 "pass" {
444 BEGIN(Body);
445 }
446 {KEYWORD} {
450
451
452 yyextra->noSuiteFound = FALSE;
453 }
454
455 {FLOWKW} {
460
461
462 yyextra->noSuiteFound = FALSE;
463 }
464 {IDENTIFIER} {
466 }
467
468
469 {POUNDCOMMENT} {
470 if (YY_START==SingleQuoteString ||
471 YY_START==DoubleQuoteString ||
472 YY_START==TripleString
473 )
474 {
475 REJECT;
476 }
477 yy_push_state(YY_START,yyscanner);
478 BEGIN(DocBlock);
479 yyextra->docBlock=yytext;
480 }
481
482 {NEWLINE} {
484 if ( yyextra->noSuiteFound )
485 {
486
487 BEGIN ( SuiteCaptureIndent );
488 }
489 }
490}
491
492<SuiteCaptureIndent>{
493 "\n"|({BB}"\n") {
494
496 }
497
498 {BB} {
499
500
501
502
504 yyextra->indents.push(yyleng);
505
506 BEGIN( Suite );
507 }
508}
509
510<SuiteMaintain>{
511
512 {BB}/({NONEMPTY}|{EXPCHAR}) {
513
514
515
516
519 }
520
521 "\n"|({BB}"\n") {
522
523
524
525
527 }
528
529 ""/({NONEMPTY}|{EXPCHAR}) {
530
531
532
533
535 }
536}
537
538
539<Suite>{NEWLINE} {
541 BEGIN( SuiteMaintain );
542 }
543<Body>{IDENTIFIER} {
545 }
546<Body>{NEWLINE} {
548 }
549
550<SingleQuoteString>{
551 \\{B}\n {
553 }
554 \\. {
556 }
557 {STRINGPREFIX}?{TRIDOUBLEQUOTE} {
559 }
560 "'" {
563 BEGIN(yyextra->stringContext);
564 }
565 [^"'\n\\]+ {
567 }
568 . {
570 }
571}
572
573<DoubleQuoteString>{
574 \\{B}\n {
576 }
577 \\. {
579 }
580 {STRINGPREFIX}?{TRISINGLEQUOTE} {
582 }
583 "\"" {
586 BEGIN(yyextra->stringContext);
587 }
588 [^"'\n\\]+ {
590 }
591 . {
593 }
594}
595
596<TripleString>{
597 {TRIDOUBLEQUOTE} |
598 {TRISINGLEQUOTE} {
600 if (yyextra->doubleQuote==(yytext[0]=='"'))
601 {
603 BEGIN(yyextra->stringContext);
604 }
605 }
606 {LONGSTRINGBLOCK} {
608 }
609 \n {
611 }
612 [ \t]+ {
614 }
615 . {
617 }
618}
619
620
621<*>{STRINGPREFIX}?{TRISINGLEQUOTE} {
622 if (YY_START==SingleQuoteString) REJECT;
624 yyextra->stringContext=YY_START;
625 yyextra->doubleQuote=yytext[yyleng-1]=='"';
627 BEGIN(TripleString);
628 }
629<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
630 if (YY_START==DoubleQuoteString) REJECT;
632 yyextra->stringContext=YY_START;
633 yyextra->doubleQuote=yytext[yyleng-1]=='"';
635 BEGIN(TripleString);
636 }
637<*>{STRINGPREFIX}?"'" {
638 if (YY_START==SingleQuoteString ||
639 YY_START==DoubleQuoteString ||
640 YY_START==TripleString)
641 {
642 REJECT;
643 }
645 yyextra->stringContext=YY_START;
647 BEGIN(SingleQuoteString);
648 }
649<*>{STRINGPREFIX}?"\"" {
650 if (YY_START==SingleQuoteString ||
651 YY_START==DoubleQuoteString ||
652 YY_START==TripleString)
653 {
654 REJECT;
655 }
657 yyextra->stringContext=YY_START;
659 BEGIN(DoubleQuoteString);
660 }
661<DocBlock>.* {
662 yyextra->docBlock+=yytext;
663 }
664<DocBlock>"\n"{B}("#") {
665 yyextra->docBlock+=yytext;
666 }
667<DocBlock>{NEWLINE} {
668
672 unput(*yytext);
674 }
675<*>{POUNDCOMMENT}.* {
676 if (YY_START==SingleQuoteString ||
677 YY_START==DoubleQuoteString ||
678 YY_START==TripleString)
679 {
680 REJECT;
681 }
682 yy_push_state(YY_START,yyscanner);
683 BEGIN(DocBlock);
684 yyextra->docBlock=yytext;
685 }
686<*>"#".* {
687 if (YY_START==SingleQuoteString ||
688 YY_START==DoubleQuoteString ||
689 YY_START==TripleString)
690 {
691 REJECT;
692 }
696 }
697<*>{NEWLINE} {
698 if (yyextra->endComment)
699 {
700 yyextra->endComment=FALSE;
701 }
702 else
703 {
705 }
706
707
708
709 BEGIN(Body);
710 }
711
712<*>[ \t]+ {
714 BEGIN(Body);
715 }
716<*>. {
718
719
720
721 BEGIN(Body);
722 }
723
724<*><<EOF>> {
725 if (YY_START==DocBlock)
726 {
730 }
732 }
733%%