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); }
/// <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 }
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); }
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); }
/// <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); }
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); }
/// <summary> /// Visits the Binary Message node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitBinaryMessage(BinaryMessageNode node) { throw new NotImplementedException(); }