Пример #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.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;
        }