peek() private method

private peek ( ) : char
return char
Beispiel #1
0
        // This code is pretty hairy - the problem is
        // distinguishing between:
        // 1. a floating point number, which may be
        // in scientific notification, and might simply begin
        // with "."
        // 2. A symbol with a dot in it
        // 3. Just a lone "." used for separating lists

        // It's doubtful that it's entirely correct - but if you find a bug,
        // add it as a test to ScannerTest and amend this logic.
        private static TokenType?matchNumber(Scanner s)
        {
            if (s.peek() == '.')
            {
                return(leadingFloat(s));
            }

            if (s.isOneOf("+-"))
            {
                s.readChar();
                if (s.peek() == '.')
                {
                    return(leadingFloat(s));
                }
                var num = unsignedNumber(s);
                if (num != null)
                {
                    return(num);
                }

                matchSymbol(s);
                return(TokenType.Symbol);
            }
            return(unsignedNumber(s));
        }
Beispiel #2
0
 // TODO:
 // WE should implement actual reader macros for this part of things.
 private static TokenType?matchHash(Scanner s)
 {
     if (s.peek() != '#')
     {
         return(null);
     }
     s.readChar();
     if (s.peek() == '(')
     {
         s.readChar();
         return(TokenType.VectorOpen);
     }
     if (s.isOneOf("tfTF"))
     {
         s.readChar();
         return(TokenType.Boolean);
     }
     throw s.fail("Unrecognized token");
 }
Beispiel #3
0
 // .Net method support.
 // Check if we received a "." or a ".symbol".
 // Given them different tokens so that the parser
 // can expand appropriately.
 private static TokenType?matchDot(Scanner s)
 {
     if (s.peek() != '.')
     {
         return(null);
     }
     s.readChar();
     matchSymbol(s);
     return(s.sb.Length > 1 ? TokenType.Symbol : TokenType.Dot);
 }
Beispiel #4
0
 private static TokenType?unsignedNumber(Scanner s)
 {
     if (!s.isDigit())
     {
         return(null);
     }
     while (s.isDigit())
     {
         s.readChar();
     }
     if (s.isExponent())
     {
         return(readExponent(s));
     }
     if (s.peek() != '.')
     {
         return(TokenType.Integer);
     }
     return(remainingFloat(s));
 }
Beispiel #5
0
 // .Net method support.
 // Check if we received a "." or a ".symbol".
 // Given them different tokens so that the parser
 // can expand appropriately.
 private static TokenType? matchDot(Scanner s)
 {
     if (s.peek() != '.')
         return null;
     s.readChar();
     matchSymbol(s);
     return s.sb.Length > 1 ? TokenType.Symbol : TokenType.Dot;
 }
Beispiel #6
0
 // TODO:
 // WE should implement actual reader macros for this part of things.
 private static TokenType? matchHash(Scanner s)
 {
     if (s.peek() != '#')
         return null;
     s.readChar();
     if(s.peek() == '(')
     {
         s.readChar();
         return TokenType.VectorOpen;
     }
     if(s.isOneOf("tfTF"))
     {
         s.readChar();
         return TokenType.Boolean;
     }
     throw s.fail("Unrecognized token");
 }
Beispiel #7
0
        // This code is pretty hairy - the problem is
        // distinguishing between:
        // 1. a floating point number, which may be
        // in scientific notification, and might simply begin
        // with "."
        // 2. A symbol with a dot in it
        // 3. Just a lone "." used for separating lists

        // It's doubtful that it's entirely correct - but if you find a bug,
        // add it as a test to ScannerTest and amend this logic.
        private static TokenType? matchNumber(Scanner s)
        {
            if(s.peek() == '.')
                return leadingFloat(s);

            if(s.isOneOf("+-"))
            {
                s.readChar();
                if(s.peek() == '.')
                    return leadingFloat(s);
                var num = unsignedNumber(s);
                if (num != null)
                    return num;

                matchSymbol(s);
                return TokenType.Symbol;
            }
            return unsignedNumber(s);
        }
Beispiel #8
0
 private static TokenType? unsignedNumber(Scanner s)
 {
     if (!s.isDigit())
         return null;
     while (s.isDigit())
         s.readChar();
     if (s.isExponent())
         return readExponent(s);
     if (s.peek() != '.')
         return TokenType.Integer;
     return remainingFloat(s);
 }