Ejemplo n.º 1
0
        // Parse:
        //      namespace-qualified-type-name --> NAMESPACE-NAME namespace-qualifier-tail . TYPE-NAME
        //                                    --> NAMESPACE-NAME . TYPE-NAME
        //                                    --> TYPE-NAME
        //
        //      namespace-qualifier-tail --> . NAMESPACE-NAME namespace-qualifier-tail
        internal CodeExpression ParseRootNamespaceIdentifier(ParserContext parserContext, NamespaceSymbol nsSym, bool assignIsEquality)
        {
            // Loop through all the namespace qualifiers until we find something that's not a namespace.
            Symbol nestedSym = null;
            while (nsSym != null)
            {
                Token token = parserContext.NextToken();
                if (token.TokenID != TokenID.Dot)
                    throw new RuleSyntaxException(ErrorNumbers.Error_MissingDotAfterNamespace, Messages.Parser_MissingDotAfterNamespace, token.StartPosition);

                token = parserContext.NextToken();
                if (token.TokenID != TokenID.Identifier)
                {
                    if (parserContext.provideIntellisense && token.TokenID == TokenID.EndOfInput)
                    {
                        parserContext.SetNamespaceCompletions(nsSym);
                        return null;
                    }
                    else
                    {
                        throw new RuleSyntaxException(ErrorNumbers.Error_MissingIdentifierAfterDot, Messages.Parser_MissingIdentifierAfterDot, token.StartPosition);
                    }
                }

                string name = (string)token.Value;
                nestedSym = nsSym.FindMember(name);
                if (nestedSym == null)
                {
                    string message = string.Format(CultureInfo.CurrentCulture, Messages.Parser_UnknownNamespaceMember, name, nsSym.GetQualifiedName());
                    throw new RuleSyntaxException(ErrorNumbers.Error_UnknownNamespaceMember, message, token.StartPosition);
                }

                nsSym = nestedSym as NamespaceSymbol;
            }

            // We are sitting at a type (or overloaded type).
            return nestedSym.ParseRootIdentifier(this, parserContext, assignIsEquality);
        }
 internal CodeExpression ParseRootNamespaceIdentifier(ParserContext parserContext, NamespaceSymbol nsSym, bool assignIsEquality)
 {
     Symbol symbol = null;
     while (nsSym != null)
     {
         Token token = parserContext.NextToken();
         if (token.TokenID != TokenID.Dot)
         {
             throw new RuleSyntaxException(0x189, Messages.Parser_MissingDotAfterNamespace, token.StartPosition);
         }
         token = parserContext.NextToken();
         if (token.TokenID != TokenID.Identifier)
         {
             if (!parserContext.provideIntellisense || (token.TokenID != TokenID.EndOfInput))
             {
                 throw new RuleSyntaxException(0x185, Messages.Parser_MissingIdentifierAfterDot, token.StartPosition);
             }
             parserContext.SetNamespaceCompletions(nsSym);
             return null;
         }
         string memberName = (string) token.Value;
         symbol = nsSym.FindMember(memberName);
         if (symbol == null)
         {
             string message = string.Format(CultureInfo.CurrentCulture, Messages.Parser_UnknownNamespaceMember, new object[] { memberName, nsSym.GetQualifiedName() });
             throw new RuleSyntaxException(0x18a, message, token.StartPosition);
         }
         nsSym = symbol as NamespaceSymbol;
     }
     return symbol.ParseRootIdentifier(this, parserContext, assignIsEquality);
 }