private void MoveNextOnLine()

in Iris/IrisCompiler/FrontEnd/Lexer.cs [229:351]


        private void MoveNextOnLine()
        {
            AcceptMany(IsWhitespace);

            _col += _tokenLen;

            if (_col >= _lineLen)
            {
                _tokenLen = 0;
                CurrentToken = Token.Eol;
                return;
            }

            _tokenLen = 1; // Assume token is one character

            char c = _lineText[_col];
            if (IsAlpha(c))
            {
                ProcessWord();
                return;
            }

            if (IsDigit(c))
            {
                CurrentToken = Token.Number;
                AcceptMany(IsDigit);
                return;
            }

            switch (c)
            {
                case '(':
                    CurrentToken = Token.ChrOpenParen;
                    break;
                case ')':
                    CurrentToken = Token.ChrCloseParen;
                    break;
                case '[':
                    CurrentToken = Token.ChrOpenBracket;
                    break;
                case ']':
                    CurrentToken = Token.ChrCloseBracket;
                    break;
                case ':':
                    if (Accept('='))
                        CurrentToken = Token.ChrAssign;
                    else
                        CurrentToken = Token.ChrColon;
                    break;
                case ';':
                    CurrentToken = Token.ChrSemicolon;
                    break;
                case '=':
                    CurrentToken = Token.ChrEqual;
                    break;
                case '+':
                    CurrentToken = Token.ChrPlus;
                    break;
                case '-':
                    CurrentToken = Token.ChrMinus;
                    break;
                case '*':
                    CurrentToken = Token.ChrStar;
                    break;
                case '/':
                    if (Accept('/'))
                    {
                        // Comment - treat as EOL
                        _tokenLen = 0;
                        CurrentToken = Token.Eol;
                    }
                    else
                    {
                        CurrentToken = Token.ChrSlash;
                    }
                    break;
                case '%':
                    CurrentToken = Token.ChrPercent;
                    break;
                case ',':
                    CurrentToken = Token.ChrComma;
                    break;
                case '>':
                    if (Accept('='))
                        CurrentToken = Token.ChrGreaterThanEqual;
                    else
                        CurrentToken = Token.ChrGreaterThan;
                    break;
                case '<':
                    if (Accept('='))
                        CurrentToken = Token.ChrLessThanEqual;
                    else if (Accept('>'))
                        CurrentToken = Token.ChrNotEqual;
                    else
                        CurrentToken = Token.ChrLessThan;
                    break;
                case '_':
                case '$': // Used for special identifiers in the debugger
                    ProcessWord();
                    break;
                case '#':
                    CurrentToken = Token.Number;
                    AcceptMany(IsHexDigit);
                    break;
                case '\'':
                    CurrentToken = Token.String;
                    ProcessString();
                    break;
                case '.':
                    if (Accept('.'))
                        CurrentToken = Token.ChrDotDot;
                    else
                        CurrentToken = Token.ChrPeriod;
                    break;
                case '{':
                    ProcessMultilineComment();
                    break;
                default:
                    AddError("Unexpected character.");
                    CurrentToken = Token.Skip;
                    break;
            }
        }