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();
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        internal char GetNextColonToken()
        {
            object token = ConsumeNextToken(false, true, false);
            VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol;

            if (tsToken == null || tsToken.symbol != ':')
            {
                ErrorParsingToken(":", token);
            }

            return(tsToken.symbol);
        }
Exemplo n.º 4
0
        internal char GetNextTerminalSymbolToken()
        {
            object token = ConsumeNextToken(false, false, false);
            VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol;

            if (tsToken == null)
            {
                ErrorParsingToken("terminal symbol", token);
            }

            return(tsToken.symbol);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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());
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
                }
            }
        }