Esempio n. 1
0
        protected virtual BinaryArgumentNode ParseBinaryArgument(BinaryMessageNode parent, Token token)
        {
            // PARSE: <binary argument> ::= <primary> <unary message>*
            BinaryArgumentNode result = new BinaryArgumentNode(parent);

            IPrimaryNode primary = this.ParsePrimary(result, token);

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

            token = this.GetNextTokenxx(Preference.Default);

            UnaryMessageSequenceNode messages = null;

            if (token is IdentifierToken)
            {
                // <unary message>*
                messages = this.ParseUnaryMessageSequence(result, (IdentifierToken)token);
            }
            else
            {
                this.ResidueToken = token;
            }

            result.SetContents(primary, messages);
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Visits the Binary Message node.
        /// </summary>
        /// <param name="node">The node to visit.</param>
        public virtual TResult VisitBinaryMessage(BinaryMessageNode node)
        {
            if (node.Argument != null)
            {
                node.Argument.Accept(this);
            }

            return(default(TResult));            // The default naive implementation
        }
Esempio n. 3
0
        protected virtual BinaryMessageNode ParseBinaryMessage(MessageSequenceBase parent, BinarySelectorToken selector)
        {
            // PARSE: <binary message> ::= binarySelector <binary argument>
            BinaryMessageNode result = new BinaryMessageNode(parent, selector);

            Token token = this.GetNextTokenxx(Preference.NegativeSign);
            // Parse the binary argument ... ParseBinaryArgument() does not fail and reports errors self.
            BinaryArgumentNode argument = this.ParseBinaryArgument(result, token);

            if (argument != null)
            {
                result.SetContents(argument);
            }
            return(result);
        }
Esempio n. 4
0
        protected virtual BinaryKeywordMessageSequenceNode ParseBinaryKeywordMessageSequence(IMessageSequenceParentNode parent, BinarySelectorToken selector)
        {
            // PARSE: <binary message>+ [<keyword message>]
            BinaryKeywordMessageSequenceNode result = new BinaryKeywordMessageSequenceNode(parent);

            // NB: ParseBinaryMessage() cannot fail, so we don't check result
            BinaryMessageNode message = this.ParseBinaryMessage(result, selector);

            Token token = this.GetNextTokenxx(Preference.Default);
            BinaryKeywordOrKeywordMessageSequenceNode nextMessage = (BinaryKeywordOrKeywordMessageSequenceNode)
                                                                    this.ParseMessages(result, token, MessageType.Binary | MessageType.Keyword);

            result.SetContents(message, nextMessage);
            return(result);
        }
Esempio n. 5
0
        /// <summary>
        /// Visits the Binary Message node.
        /// </summary>
        /// <param name="node">The node to visit.</param>
        public override bool VisitBinaryMessage(BinaryMessageNode node)
        {
            if (node.Parent == null)
            {
                return(false);
            }

            if (node.SelectorToken == null)
            {
                return(false);
            }
            if ((node.Argument == null) || !node.Argument.Accept(this))
            {
                return(false);
            }

            return(true);
        }
Esempio n. 6
0
        protected virtual BinaryMessageSequenceNode ParseBinaryMessageSequence(IMessageSequenceParentNode parent, BinarySelectorToken selector)
        {
            // PARSE: <binary message>*
            BinaryMessageSequenceNode result = new BinaryMessageSequenceNode(parent);

            // NB: ParseBinaryMessage() cannot fail, so we don't check result
            BinaryMessageNode message = this.ParseBinaryMessage(result, selector);

            Token token = this.GetNextTokenxx(Preference.Default);

            BinaryMessageSequenceNode nextMessage = null;

            if (token is BinarySelectorToken)
            {
                nextMessage = this.ParseBinaryMessageSequence(result, (BinarySelectorToken)token);
            }
            else
            {
                this.ResidueToken = token;
            }

            result.SetContents(message, nextMessage);
            return(result);
        }
Esempio n. 7
0
 /// <summary>
 /// Visits the Binary Message node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public virtual TResult VisitBinaryMessage(BinaryMessageNode node)
 {
     throw new NotImplementedException();
 }