Exemple #1
0
        protected virtual CascadeMessageSequenceNode ParseCascadeMessageSequenceNode(ICascadeMessageSequenceParentNode parent, Token semicolon)
        {
            // PARSE: <cascaded messages> ::= (';' <messages>)*
            if (!Parser.IsCascadeDelimiter(semicolon))
            {
                this.ResidueToken = semicolon;
                return(null); // Not a cascade message ... return null.
            }
            CascadeMessageSequenceNode result = new CascadeMessageSequenceNode(parent, (SpecialCharacterToken)semicolon);

            Token token = this.GetNextTokenxx(Preference.Default);
            MessageSequenceNode messages = this.ParseMessages(result, token);

            if (messages == null)
            {
                this.ReportParserError(result, SemanticErrors.MissingMessagePattern, token);
                return(result);
            }

            token = this.GetNextTokenxx(Preference.Default);

            CascadeMessageSequenceNode nextCascade = null;

            if (Parser.IsCascadeDelimiter(token))
            {
                nextCascade = this.ParseCascadeMessageSequenceNode(result, (SpecialCharacterToken)token);
            }
            else
            {
                this.ResidueToken = token;
            }

            result.SetContents(messages, nextCascade);
            return(result);
        }