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 ParseNodeStatement(ParserContext context) { var token = context.PeekNextToken(); switch (token.Text) { case "DEF": ParseDefNodeStatement(context); break; case "USE": var useStatement = UseStatement.Parse(context); var node = context.FindNode(useStatement.NodeName); context.AcceptChild(node); break; default: ParseNode(context); break; } }
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; } }