Пример #1
0
        private Syntax.InitializerList.Designation ParseDesignation()
        {
            Syntax.InitializerList.Designation designation = null, subdisignation = null;
            while (true)
            {
                if (scan.Peek().type == Token.Type.COMMA)
                {
                    CheckToken(scan.Peek(), Token.Type.IDENTIFICATOR);
                    subdisignation = new Syntax.InitializerList.Designation();
                    subdisignation.SetDesignator(new Syntax.Identifier(scan.Read()));
                }
                else if (scan.Peek().type == Token.Type.LBRACKET)
                {
                    scan.Read();
                    Syntax.Expression const_expr = ParseConstExpr();
                    Syntax.Object.CheckObject(const_expr);
                    subdisignation = new Syntax.InitializerList.Designation();
                    subdisignation.SetDesignator(const_expr);
                    CheckToken(scan.Peek(), Token.Type.RBRACKET, true);
                }

                if (subdisignation == null)
                {
                    break;
                }
                if (designation == null)
                {
                    designation = subdisignation;
                }
                else
                {
                    designation.SetDesignator(subdisignation);
                }
                subdisignation = null;
            }

            return(designation);
        }
Пример #2
0
        private Syntax.InitializerList ParseInitializerList()
        {
            Syntax.InitializerList res = null;
            while (true)
            {
                Syntax.InitializerList.Designation designation = ParseDesignation();
                Syntax.Expression const_val = null;
                if (designation != null)
                {
                    CheckToken(scan.Peek(), Token.Type.OP_ASSIGN, true);
                    const_val = ParseInitializer();
                    Syntax.Object.CheckObject(const_val);
                }
                else
                {
                    const_val = ParseConstExpr();
                }

                if (const_val != null)
                {
                    if (res == null)
                    {
                        res = new Syntax.InitializerList();
                    }
                    res.AddInitializer(const_val, designation);
                }

                if (scan.Peek().type != Token.Type.COMMA || const_val == null)
                {
                    break;
                }
                scan.Read();
            }

            return(res);
        }
Пример #3
0
        private Syntax.InitializerList.Designation ParseDesignation()
        {
            Syntax.InitializerList.Designation designation = null, subdisignation = null;
            while (true)
            {
                if (scan.Peek().type == Token.Type.COMMA)
                {
                    CheckToken(scan.Peek(), Token.Type.IDENTIFICATOR);
                    subdisignation = new Syntax.InitializerList.Designation();
                    subdisignation.SetDesignator(new Syntax.Identifier(scan.Read()));
                }
                else if (scan.Peek().type == Token.Type.LBRACKET)
                {
                    scan.Read();
                    Syntax.Expression const_expr = ParseConstExpr();
                    Syntax.Object.CheckObject(const_expr);
                    subdisignation = new Syntax.InitializerList.Designation();
                    subdisignation.SetDesignator(const_expr);
                    CheckToken(scan.Peek(), Token.Type.RBRACKET, true);
                }

                if (subdisignation == null)
                {
                    break;
                }
                if (designation == null)
                {
                    designation = subdisignation;
                }
                else
                {
                    designation.SetDesignator(subdisignation);
                }
                subdisignation = null;
            }

            return designation;
        }