Pytocs.Syntax.Parser.atom C# (CSharp) Method

atom() public method

public atom ( ) : Exp
return Exp
        public Exp atom()
        {
            Exp e;
            Token t;
            while (PeekAndDiscard(TokenType.COMMENT))
                ;
            switch (lexer.Peek().Type)
            {
            case TokenType.LPAREN:
                lexer.Get();
                if (Peek(TokenType.Yield))
                {
                    e = yield_expr();
                }
                else
                {
                    e = testlist_comp(true);
                }
                Expect(TokenType.RPAREN);
                return e;
            case TokenType.LBRACKET:
                lexer.Get();
                e = testlist_comp(false);
                Expect(TokenType.RBRACKET);
                return e;
            case TokenType.LBRACE:
                t = lexer.Get();
                e = dictorsetmaker(t.Start);
                Expect(TokenType.RBRACE);
                return e;
            case TokenType.ID:
                t = lexer.Get();
                return new Identifier((string)t.Value, filename, t.Start, t.End);
            case TokenType.STRING:
                t = lexer.Get();
                var start = t.Start;
                var str = (Str) t.Value;
                while (Peek(TokenType.STRING))
                {
                    t = lexer.Get();
                    str = new Str(str.s + t.Value, filename, start, t.End);
                }
                return str;
            case TokenType.INTEGER:
                t = lexer.Get();
                return new IntLiteral((int) t.Value, filename, t.Start, t.End);
            case TokenType.LONGINTEGER:
                t = lexer.Get();
                return new LongLiteral((long) t.Value, filename, t.Start, t.End);
            case TokenType.REAL:
                t = lexer.Get();
                return new RealLiteral((double) t.Value, filename, t.Start, t.End);
            case TokenType.IMAG:
                t = lexer.Get();
                return new ImaginaryLiteral((double) t.Value, filename, t.Start, t.End);
            case TokenType.ELLIPSIS:
                t = lexer.Get();
                return new Ellipsis(filename, t.Start, t.End);
            case TokenType.None:
                t = lexer.Get();
                return new NoneExp(filename, t.Start, t.End);
            case TokenType.False:
                t = lexer.Get();
                return new BooleanLiteral(false, filename, t.Start, t.End);
            case TokenType.True:
                t = lexer.Get();
                return new BooleanLiteral(true, filename, t.Start, t.End);
            default:
                return null;
            }
        }