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); }
/// <summary> /// Visits the Keyword Message Argument node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitKeywordArgument(KeywordArgumentNode node) { if (node.Primary != null) { node.Primary.Accept(this); } if (node.Messages != null) { node.Messages.Accept(this); } return(default(TResult)); // The default naive implementation }
/// <summary> /// Visits the Keyword Message Argument node. /// </summary> /// <param name="node">The node to visit.</param> public override bool VisitKeywordArgument(KeywordArgumentNode node) { if (node.Parent == null) { return(false); } if ((node.Primary == null) || !node.Primary.Accept(this)) { return(false); } if ((node.Messages != null) && !node.Messages.Accept(this)) { return(false); } return(true); }
/// <summary> /// Visits the Keyword Message Argument node. /// </summary> /// <param name="node">The node to visit.</param> public virtual TResult VisitKeywordArgument(KeywordArgumentNode node) { throw new NotImplementedException(); }
private Expression EncodeInlinedLoop(BasicExpressionNode node) { if (node.CascadeMessages != null) { return(null); } if (node.Messages == null) { return(null); } BlockNode conditionBlock = node.Primary as BlockNode; if (conditionBlock == null) { return(null); } if (conditionBlock.Arguments.Count != 0) { return(null); } UnaryBinaryKeywordMessageSequenceNode unarySeq = node.Messages as UnaryBinaryKeywordMessageSequenceNode; if (unarySeq != null) { string selector = unarySeq.Message.SelectorToken.Value; if ((selector != "whileTrue") && (selector != "whileFalse")) { return(null); } return(this.EncodeInlineWhile(conditionBlock, null, (selector == "whileFalse"))); } KeywordMessageSequenceNode keywordSeq = node.Messages as KeywordMessageSequenceNode; if (keywordSeq != null) { if (keywordSeq.Message.SelectorTokens.Count != 1) { return(null); } string selector = keywordSeq.Message.SelectorTokens[0].Value; if ((selector != "whileTrue:") && (selector != "whileFalse:")) { return(null); } if (keywordSeq.Message.Arguments.Count != 1) { return(null); } KeywordArgumentNode arg = keywordSeq.Message.Arguments[0]; if (arg.Messages != null) { return(null); } BlockNode valueBlock = arg.Primary as BlockNode; if (valueBlock == null) { return(null); } if (valueBlock.Arguments.Count != 0) { return(null); } return(this.EncodeInlineWhile(conditionBlock, valueBlock, (selector == "whileFalse:"))); } return(null); }