void ParseStatements(bool isProto) { // statement | statement statements | empty for (; ;) { object token = ConsumeNextToken(false, false, true); if (token == null) { return; // done } ReturnToken(token); if (isProto) { VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '}') { return; // done } } ParseStatement(); } }
internal List <X3DNode> ParseSFNodeOrMFNodeValue() { // nodeStatement | [ ] | [ nodeStatements ] try { object token = PeekNextToken(); List <X3DNode> ret = new List <X3DNode>(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '[') { char ts = GetNextTerminalSymbolToken(); for (; ;) { token = PeekNextToken(); tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { ts = GetNextTerminalSymbolToken(); break; } X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } else { VRMLTokenIdKeywordOrFieldType nullToken = token as VRMLTokenIdKeywordOrFieldType; if (nullToken != null && nullToken.id == "NULL") { GetNextIDToken(); // consume NULL ErrorParsing(VRMLReaderError.ImproperInitializationOfMFNode); } else { X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } return(ret); } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.MFNodeInvalid, ex); } return(null); }
internal char GetNextColonToken() { object token = ConsumeNextToken(false, true, false); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken == null || tsToken.symbol != ':') { ErrorParsingToken(":", token); } return(tsToken.symbol); }
internal char GetNextTerminalSymbolToken() { object token = ConsumeNextToken(false, false, false); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken == null) { ErrorParsingToken("terminal symbol", token); } return(tsToken.symbol); }
internal X3DFieldBase ParseUntypedFieldValue() { object token = PeekNextToken(); #region sfboolValue or sfnodeValue (NULL or Node(s)) VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken != null) { switch (idToken.id) { case "TRUE": GetNextIDToken(); return(new SFBool(true)); case "FALSE": GetNextIDToken(); return(new SFBool(false)); case "NULL": GetNextIDToken(); return(null); default: return(ParseNodeStatement()); } } #endregion #region mf*Values ([-Token) VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null) { if (tsToken.symbol != '[') { ErrorParsingToken("[", tsToken.symbol.ToString(), "unknown type value"); } return(ParseUntypedFieldValueArray()); } #endregion #region sfstringValue VRMLTokenString strToken = token as VRMLTokenString; if (strToken != null) { return(new SFString(GetNextStringToken())); } #endregion #region sfcolorValue, sffloatValue, sfimageValue, sfint32Value, sfrotationValue, sftimeValue, sfvec2fValue or sfvec3fValue VRMLTokenNumber numberToken = token as VRMLTokenNumber; if (numberToken != null) { return(new SFNumbers(ParseUntypedFieldValueNumbers())); } #endregion return(null); }
List <string> ParseUntypedFieldValueStringArray() { List <string> ret = new List <string>(); for (; ;) { object token = PeekNextToken(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { return(ret); // done } ret.Add(GetNextStringToken()); } }
internal List <bool> ParseSFBoolOrMFBoolValue() { // sfboolValue | [ ] | [ sfboolValues ] try { object token = PeekNextToken(); List <bool> ret = new List <bool>(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '[') { char ts = GetNextTerminalSymbolToken(); for (; ;) { token = PeekNextToken(); tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { ts = GetNextTerminalSymbolToken(); break; } ret.Add(ParseBoolValue()); } } else { ret.Add(ParseBoolValue()); } return(ret); } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.MFBoolInvalid, ex); } return(null); }
List <X3DNode> ParseUntypedFieldValueNodeArray() { List <X3DNode> ret = new List <X3DNode>(); for (; ;) { object token = PeekNextToken(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { return(ret); // done } X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } }
internal List <SFVec3f> ParseGeoCoordinatePointValue() { try { object token = PeekNextToken(); List <SFVec3f> ret = new List <SFVec3f>(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '[') { char ts = GetNextTerminalSymbolToken(); for (; ;) { token = PeekNextToken(); tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { ts = GetNextTerminalSymbolToken(); break; } ret.AddRange(ParseSFVec3fStringsValue()); } } else { ret.AddRange(ParseSFVec3fStringsValue()); } return(ret); } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.MFVec3fInvalid, ex); } return(null); }
List <InterfaceDeclaration> ParseExternInterfaceDeclarations() { // externInterfaceDeclaration | externInterfaceDeclaration externInterfaceDeclarations | empty List <InterfaceDeclaration> ret = new List <InterfaceDeclaration>(); for (; ;) { object token = PeekNextToken(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { return(ret); // done } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("interface declaration keyword", "", "EXTRENPROTO statement interface declarations"); } switch (idToken.id) { case "eventIn": case "inputOnly": case "eventOut": case "outputOnly": case "field": case "initializeOnly": case "exposedField": case "inputOutput": ret.Add(ParseExternInterfaceDeclaration()); break; default: ErrorParsingToken("interface declaration keyword", idToken.id, "EXTRENPROTO statement interface declarations"); return(null); } } }