private bool IsPossibleExpression()
        {
            var tk = this.CurrentToken.Kind;

            switch (tk)
            {
            case SyntaxKind.DefaultKeyword:
            case SyntaxKind.ArgListKeyword:
            case SyntaxKind.SuperKeyword:
            case SyntaxKind.FalseKeyword:
            case SyntaxKind.ThisKeyword:
            case SyntaxKind.TrueKeyword:
            case SyntaxKind.NullKeyword:
            case SyntaxKind.OpenParenToken:
            case SyntaxKind.NumericLiteralToken:
            case SyntaxKind.StringLiteralToken:
            case SyntaxKind.CharacterLiteralToken:
            case SyntaxKind.NewKeyword:
            case SyntaxKind.ColonColonToken:                     // bad aliased name
            case SyntaxKind.AtToken:
            case SyntaxKind.OpenBraceToken:
                return(true);

            case SyntaxKind.IdentifierToken:
                // Specifically allow the from contextual keyword, because it can always be the start of an
                // expression (whether it is used as an identifier or a keyword).
                return(this.IsTrueIdentifier());

            default:
                return(IsExpectedPrefixUnaryOperator(tk) ||
                       (IsPredefinedType(tk) && tk != SyntaxKind.VoidKeyword) ||
                       SyntaxKindFacts.IsAnyUnaryExpression(tk) ||
                       SyntaxKindFacts.IsBinaryExpression(tk));
            }
        }