protected virtual void ParseNode(ParserContext context) { var token = context.PeekNextToken(); if (token.Type == VRML97TokenType.EOF) { return; } switch (token.Text) { case "Script": ParseScriptNode(context); break; default: var nodeTypeId = ParseNodeTypeId(context); var node = context.CreateNode(nodeTypeId, context.NodeName); context.NodeName = null; context.PushFieldContainer(node); if (context.ReadNextToken().Type != VRML97TokenType.OpenBrace) { throw new InvalidVRMLSyntaxException("Open brace expected"); } ParseNodeBody(context); if (context.ReadNextToken().Type != VRML97TokenType.CloseBrace) { throw new InvalidVRMLSyntaxException(); } context.PopFieldContainer(); context.AcceptChild(node); break; } }
protected virtual void ParseProto(ParserContext context) { context.ReadKeyword("PROTO"); var proto = new ProtoNode { name = ParseNodeNameId(context) }; context.PushNodeContainer(proto.children); context.PushFieldContainer(proto); ParseInterfaceDeclarations(context); if (context.ReadNextToken().Type != VRML97TokenType.OpenBrace) { throw new InvalidVRMLSyntaxException(); } ParseProtoBody(context); if (context.ReadNextToken().Type != VRML97TokenType.CloseBrace) { throw new InvalidVRMLSyntaxException(); } context.PopFieldContainer(); context.PopNodeContainer(); context.RegisterPtototype(proto); }
protected virtual void ParseNode(ParserContext context) { var token = context.PeekNextToken(); if (token.Type == VRML97TokenType.EOF) return; switch (token.Text) { case "Script": ParseScriptNode(context); break; default: var nodeTypeId = ParseNodeTypeId(context); var node = context.CreateNode(nodeTypeId, context.NodeName); context.NodeName = null; context.PushFieldContainer(node); if (context.ReadNextToken().Type != VRML97TokenType.OpenBrace) { throw new InvalidVRMLSyntaxException("Open brace expected"); } ParseNodeBody(context); if (context.ReadNextToken().Type != VRML97TokenType.CloseBrace) { throw new InvalidVRMLSyntaxException(); } context.PopFieldContainer(); context.AcceptChild(node); break; } }