Exemplo n.º 1
0
        //------------------------------------------------------------
        // CNameManager.AddKeywords
        //
        /// <summary>
        /// <para>Add all the keywords to the name table.
        /// To enable fast determination of whether a particular NAME is a keyword,
        /// a seperate keyword hash table is used that is indexed by the hash value of the name.
        /// At most one keyword has the same index,
        /// so we don't need a collision resolution scheme.</para>
        /// <para>
        /// <list type="bullet">
        /// <item>Get keywords form CParser,
        /// and Register them to namesDictionary and keywordsDictionary.</item>
        /// <item>Register keywords of preprocessor to namesDictionary.</item>
        /// <item>Register predefined names to namesDictionary.</item>
        /// </list>
        /// </para>
        /// </summary>
        //------------------------------------------------------------
        private void AddKeywords()
        {
            TOKINFO tok = null;

            // TOKENID.ARGS = 1 (TOKENID == 0 means UNDEFINED.)
            for (TOKENID id = TOKENID.ARGS; id < TOKENID.IDENTIFIER; ++id)
            {
                tok = CParser.GetTokenInfo(id);
                DebugUtil.Assert(tok != null);

                AddString(tok.Text);
                keywordsDictionary.Add(tok.Text, id);
            }

            for (int i = 1; i < preprocessourKeywords.Length; ++i)
            {
                string kw = preprocessourKeywords[i];
                AddString(kw);
                this.preprocessorKeyWordDictionary.Add(kw, i);
            }

            for (int i = 1; i < attributeTargets.Length; ++i)
            {
                string target = attributeTargets[i];
                AddString(target);
                attributeTargetDictionary.Add(target, (ATTRTARGET)i);
            }
        }
Exemplo n.º 2
0
        //------------------------------------------------------------
        // CNameManager.GetTokenText
        //
        /// <summary>
        /// Return the string of the token.
        /// </summary>
        /// <param name="tokenId"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        virtual internal string GetTokenText(TOKENID tokenId)
        {
            TOKINFO tok = CParser.GetTokenInfo(tokenId);

            if (tok != null)
            {
                return(tok.Text);
            }
            return(null);
        }
Exemplo n.º 3
0
        internal bool RightAssociativity;   // Associativity

        //------------------------------------------------------------
        // OPINFO Constructor
        //------------------------------------------------------------
        internal OPINFO(TOKENID id, int prec, bool rassoc)
        {
            this.TokenID            = id;
            this.Precedence         = prec;
            this.RightAssociativity = rassoc;
        }
Exemplo n.º 4
0
        //------------------------------------------------------------
        // CParser.ParseObjectInitializer
        //
        /// <summary></summary>
        /// <param name="newNode"></param>
        //------------------------------------------------------------
        internal void ParseObjectInitializer(NEWNODE newNode)
        {
            DebugUtil.Assert(CurrentTokenID() == TOKENID.OPENCURLY);
            NextToken();

            DECLSTMTNODE stmtNode = AllocNode(NODEKIND.DECLSTMT, newNode) as DECLSTMTNODE;

            CListMaker list  = new CListMaker(this);
            int        comma = -1;

            while (
                CurrentTokenID() != TOKENID.CLOSECURLY &&
                CurrentTokenID() != TOKENID.ENDFILE)
            {
                if (CurrentTokenID() == TOKENID.IDENTIFIER &&
                    PeekToken(1) == TOKENID.EQUAL)
                {
                    list.Add(
                        ParseVariableDeclarator(
                            stmtNode,
                            stmtNode,
                            (uint)PARSEDECLFLAGS.LOCAL,
                            false,  // isFirst,
                            -1),
                        comma);
                }
                else
                {
                    Error(CSCERRID.ERR_InvalidInitializerDeclarator);

                    TOKENID tid = CurrentTokenID();
                    while (
                        tid != TOKENID.COMMA &&
                        tid != TOKENID.CLOSECURLY &&
                        tid != TOKENID.ENDFILE)
                    {
                        NextToken();
                        tid = CurrentTokenID();
                    }
                }

                if (CurrentTokenID() != TOKENID.COMMA)
                {
                    break;
                }
                comma = CurrentTokenIndex();
                NextToken();
            }
            Eat(TOKENID.CLOSECURLY);

            stmtNode.VariablesNode = list.GetList(stmtNode);
            newNode.InitialNode    = stmtNode;
            newNode.Flags         |= NODEFLAGS.NEW_HAS_OBJECT_INITIALIZER;

            if (newNode.ParentNode != null &&
                newNode.ParentNode.Kind == NODEKIND.VARDECL)
            {
                VARDECLNODE vdNode = newNode.ParentNode as VARDECLNODE;
                if (vdNode != null)
                {
                    newNode.Flags   |= NODEFLAGS.NEW_IN_VARDECL;
                    vdNode.NewFlags |= NODEFLAGS.NEW_HAS_OBJECT_INITIALIZER;
                }
            }
            else if (newNode.ParentNode != null &&
                     newNode.ParentNode.Kind == NODEKIND.BINOP &&
                     newNode.Operator == OPERATOR.ASSIGN)
            {
                VARDECLNODE vdNode = newNode.ParentNode.ParentNode as VARDECLNODE;
                if (vdNode != null)
                {
                    newNode.Flags   |= NODEFLAGS.NEW_IN_VARDECL;
                    vdNode.NewFlags |= NODEFLAGS.NEW_HAS_OBJECT_INITIALIZER;
                }
            }

            BASENODE node = newNode.ParentNode;

            while (node != null && !node.IsStatement)
            {
                node = node.ParentNode;
            }
            if (node != null)
            {
                (node as STATEMENTNODE).NewFlags |= NODEFLAGS.NEW_HAS_OBJECT_INITIALIZER;
            }
        }
Exemplo n.º 5
0
        //------------------------------------------------------------
        // CNameManager.KeywordName
        //
        /// <summary>
        /// Return the string of the keyword corresponding to the specified index.
        /// </summary>
        /// <param name="keyword"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal string KeywordName(TOKENID keyword)
        {
            TOKINFO tok = CParser.GetTokenInfo(keyword);

            return(tok != null ? tok.Text : null);
        }