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