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)); } }