Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Scan()

Tokens System.Data.ExpressionParser.Scan ( )
inlinepackage

Definition at line 511 of file ExpressionParser.cs.

512 {
513 char[] text = _text;
514 _token = Tokens.None;
515 while (true)
516 {
517 _start = _pos;
518 _op = 0;
519 char c = text[_pos++];
520 switch (c)
521 {
522 case '\0':
523 _token = Tokens.EOS;
524 break;
525 case '\t':
526 case '\n':
527 case '\r':
528 case ' ':
529 goto IL_0111;
530 case '(':
531 _token = Tokens.LeftParen;
532 break;
533 case ')':
534 _token = Tokens.RightParen;
535 break;
536 case '#':
537 ScanDate();
538 CheckToken(Tokens.Date);
539 break;
540 case '\'':
541 ScanString('\'');
542 CheckToken(Tokens.StringConst);
543 break;
544 case '=':
545 _token = Tokens.BinaryOp;
546 _op = 7;
547 break;
548 case '>':
549 _token = Tokens.BinaryOp;
550 ScanWhite();
551 if (text[_pos] == '=')
552 {
553 _pos++;
554 _op = 10;
555 }
556 else
557 {
558 _op = 8;
559 }
560 break;
561 case '<':
562 _token = Tokens.BinaryOp;
563 ScanWhite();
564 if (text[_pos] == '=')
565 {
566 _pos++;
567 _op = 11;
568 }
569 else if (text[_pos] == '>')
570 {
571 _pos++;
572 _op = 12;
573 }
574 else
575 {
576 _op = 9;
577 }
578 break;
579 case '+':
580 _token = Tokens.BinaryOp;
581 _op = 15;
582 break;
583 case '-':
584 _token = Tokens.BinaryOp;
585 _op = 16;
586 break;
587 case '*':
588 _token = Tokens.BinaryOp;
589 _op = 17;
590 break;
591 case '/':
592 _token = Tokens.BinaryOp;
593 _op = 18;
594 break;
595 case '%':
596 _token = Tokens.BinaryOp;
597 _op = 20;
598 break;
599 case '&':
600 _token = Tokens.BinaryOp;
601 _op = 22;
602 break;
603 case '|':
604 _token = Tokens.BinaryOp;
605 _op = 23;
606 break;
607 case '^':
608 _token = Tokens.BinaryOp;
609 _op = 24;
610 break;
611 case '~':
612 _token = Tokens.BinaryOp;
613 _op = 25;
614 break;
615 case '[':
616 ScanName(']', _escape, "]\\");
617 CheckToken(Tokens.Name);
618 break;
619 case '`':
620 ScanName('`', '`', "`");
621 CheckToken(Tokens.Name);
622 break;
623 default:
624 if (c == _listSeparator)
625 {
626 _token = Tokens.ListSeparator;
627 break;
628 }
629 if (c == '.')
630 {
631 if (_prevOperand == 0)
632 {
633 ScanNumeric();
634 }
635 else
636 {
637 _token = Tokens.Dot;
638 }
639 break;
640 }
641 if (c == '0' && (text[_pos] == 'x' || text[_pos] == 'X'))
642 {
643 _token = Tokens.BinaryConst;
644 break;
645 }
646 if (IsDigit(c))
647 {
648 ScanNumeric();
649 break;
650 }
651 ScanReserved();
652 if (_token != 0)
653 {
654 break;
655 }
656 if (IsAlphaNumeric(c))
657 {
658 ScanName();
659 if (_token != 0)
660 {
661 CheckToken(Tokens.Name);
662 break;
663 }
664 }
665 _token = Tokens.Unknown;
666 throw ExprException.UnknownToken(new string(text, _start, _pos - _start), _start + 1);
667 }
668 break;
669 IL_0111:
670 ScanWhite();
671 }
672 return _token;
673 }

References System.Data.ExpressionParser._escape, System.Data.ExpressionParser._listSeparator, System.Data.ExpressionParser._op, System.Data.ExpressionParser._pos, System.Data.ExpressionParser._prevOperand, System.Data.ExpressionParser._start, System.Data.ExpressionParser._text, System.Data.ExpressionParser._token, System.Data.ExpressionParser.CheckToken(), System.Data.ExpressionParser.IsAlphaNumeric(), System.Data.ExpressionParser.IsDigit(), System.Data.ExpressionParser.ScanDate(), System.Data.ExpressionParser.ScanName(), System.Data.ExpressionParser.ScanNumeric(), System.Data.ExpressionParser.ScanReserved(), System.Data.ExpressionParser.ScanString(), System.Data.ExpressionParser.ScanWhite(), System.text, and System.Data.ExprException.UnknownToken().

Referenced by System.Data.ExpressionParser.Parse(), System.Data.ExpressionParser.ParseAggregateArgument(), and System.Data.ExpressionParser.ScanToken().