/// <summary> /// Visits the Keyword Message node. /// </summary> /// <param name="node">The node to visit.</param> public override bool VisitKeywordMessage(KeywordMessageNode node) { if (node.Parent == null) { return(false); } if (node.Arguments.Count < 1) { return(false); } if (node.Arguments.Count != node.SelectorTokens.Count) { return(false); } foreach (KeywordArgumentNode arg in node.Arguments) { if (!arg.Accept(this)) { return(false); } } return(true); }
protected virtual KeywordArgumentNode ParseKeywordArgument(KeywordMessageNode parent, Token token) { // PARSE: <keyword argument> ::= <primary> <unary message>* <binary message>* KeywordArgumentNode result = new KeywordArgumentNode(parent); IPrimaryNode primary = this.ParsePrimary(result, token); if (primary == null) { this.ReportParserError(result, SemanticErrors.MissingPrimary, token); return(result); } token = this.GetNextTokenxx(Preference.Default); BinaryOrBinaryUnaryMessageSequenceNode messages = null; if (token is IdentifierToken) { // <unary message>* messages = this.ParseUnaryBinaryMessageSequence(result, (IdentifierToken)token); } else if (token is BinarySelectorToken) { messages = this.ParseBinaryMessageSequence(result, (BinarySelectorToken)token); } else { this.ResidueToken = token; } result.SetContents(primary, messages); return(result); }
protected virtual KeywordMessageNode ParseKeywordMessage(MessageSequenceNode parent, KeywordToken selector) { // PARSE: <keyword message> ::= (keyword <keyword argument> )+ KeywordMessageNode result = new KeywordMessageNode(parent); List <KeywordToken> selectorTokens = new List <KeywordToken>(); List <KeywordArgumentNode> arguments = new List <KeywordArgumentNode>(); Token token = this.GetNextTokenxx(Preference.NegativeSign); selectorTokens.Add(selector); arguments.Add(this.ParseKeywordArgument(result, token)); // NB: ParseKeywordArgument() may not fail. token = this.GetNextTokenxx(Preference.Default); while (token is KeywordToken) { selectorTokens.Add((KeywordToken)token); token = this.GetNextTokenxx(Preference.NegativeSign); arguments.Add(this.ParseKeywordArgument(result, token)); // NB: ParseKeywordArgument() may not fail. token = this.GetNextTokenxx(Preference.Default); } result.SetContents(selectorTokens, arguments); this.ResidueToken = token; return(result); }
/// <summary> /// Visits the Keyword Message node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitKeywordMessage(KeywordMessageNode node) { foreach (KeywordArgumentNode arg in node.Arguments) { arg.Accept(this); } return(default(TResult)); // The default naive implementation }
protected virtual KeywordMessageSequenceNode ParseKeywordMessageSequence(IMessageSequenceParentNode parent, KeywordToken token) { // PARSE: <keyword message> KeywordMessageSequenceNode result = new KeywordMessageSequenceNode(parent); // NB: ParseKeywordMessage() cannot fail, so we don't check result KeywordMessageNode message = this.ParseKeywordMessage(result, token); result.SetContents(message); return(result); }
/// <summary> /// Visits the Keyword Message node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitKeywordMessage(KeywordMessageNode node) { throw new NotImplementedException(); }