/// <summary> /// </summary> /// <returns></returns> /// <remarks> /// /// See http://www.dmtf.org/sites/default/files/standards/documents/DSP0221_3.0.0a.pdf /// A.1 Value definitions /// /// literalValueArray = "{" [ literalValue *( "," literalValue ) ] "}" /// /// </remarks> internal new static LiteralValueArrayAst Parse(ParserStream stream) { var node = new LiteralValueArrayAst(); // "{" stream.Read <BlockOpenToken>(); // [ literalValue *( "," literalValue) ] if (stream.Peek <BlockCloseToken>() == null) { while (!stream.Eof) { if (node.Values.Count > 0) { stream.Read <CommaToken>(); } node.Values.Add(LiteralValueAst.Parse(stream)); if (stream.Peek <BlockCloseToken>() != null) { break; } } } // "}" stream.Read <BlockCloseToken>(); // return the result return(node); }
internal new static QualifierDeclarationAst Parse(ParserStream stream) { var ast = new QualifierDeclarationAst(); ast.Name = stream.Read <IdentifierToken>(); if (stream.Peek <ParenthesesOpenToken>() != null) { stream.Read <ParenthesesOpenToken>(); ast.Initializer = LiteralValueAst.Parse(stream); stream.Read <ParenthesesCloseToken>(); } else if (stream.Peek <BlockOpenToken>() != null) { ast.Initializer = LiteralValueArrayAst.Parse(stream); } if (stream.Peek <ColonToken>() != null) { stream.Read <ColonToken>(); while (stream.Peek <IdentifierToken>() != null) { ast.Flavors.Add(stream.Read <IdentifierToken>().Name); } } return(ast); }
/// <summary> /// /// </summary> /// <param name="stream"></param> /// <returns></returns> /// <remarks> /// /// See http://www.dmtf.org/sites/default/files/standards/documents/DSP0221_3.0.0a.pdf /// A.17 Primitive type values /// /// primitiveTypeValue = literalValue / literalValueArray /// /// </remarks> internal static PrimitiveTypeValueAst Parse(ParserStream stream) { var peek = stream.Peek(); if (LiteralValueAst.IsLiteralValueToken(peek)) { // literalValue return(LiteralValueAst.Parse(stream)); } else if (peek is BlockOpenToken) { // literalValueArray return(LiteralValueArrayAst.Parse(stream)); } else { throw new UnexpectedTokenException(peek); } }