Ejemplo n.º 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);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Create a new cascade message sequence.
 /// </summary>
 /// <param name="parent">Parent node that defines this cascade message node.</param>
 /// <param name="token">Token representing the semicolon used to delimit cascase message sequences.</param>
 protected internal CascadeMessageSequenceNode(ICascadeMessageSequenceParentNode parent, SpecialCharacterToken token)
 {
     #if DEBUG
     if (parent == null)
         throw new ArgumentNullException("parent");
     if (token == null)
         throw new ArgumentNullException("token");
     #endif
     this.Parent = parent;
     this.Semicolon = token;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Create a new cascade message sequence.
        /// </summary>
        /// <param name="parent">Parent node that defines this cascade message node.</param>
        /// <param name="token">Token representing the semicolon used to delimit cascade message sequences.</param>
        protected internal CascadeMessageSequenceNode(ICascadeMessageSequenceParentNode parent, SpecialCharacterToken token)
        {
#if DEBUG
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }
            if (token == null)
            {
                throw new ArgumentNullException("token");
            }
#endif
            this.Parent    = parent;
            this.Semicolon = token;
        }
Ejemplo n.º 4
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;
        }