/// <summary> /// Constrói uma representação textual da lista. /// </summary> /// <param name="type">O delimitador.</param> /// <returns>A representação textual da lista.</returns> public string ToString(LispDelimiterType type) { var openType = string.Empty; var closeType = string.Empty; switch (type) { case LispDelimiterType.BAR_GREATER: openType = "|"; closeType = ">"; break; case LispDelimiterType.BRACES: openType = "{"; closeType = "}"; break; case LispDelimiterType.BRACKETS: openType = "["; closeType = "]"; break; case LispDelimiterType.LESSER_GREATER: openType = "<"; closeType = ">"; break; case LispDelimiterType.PARENTHESIS: openType = "("; closeType = ")"; break; default: throw new CollectionsException("Delimiter types not yet implemented."); } string result = openType; if (this.values.Count > 0) { result += this.PrintElement(this.values[0], openType, closeType); for (int i = 1; i < this.values.Count; ++i) { result += ","; result += this.PrintElement(this.values[i], openType, closeType); } } result += closeType; return(result); }
/// <summary> /// Instancia um novo objecto do tipo <see cref="LispStyleParser{R}"/>.. /// </summary> /// <param name="parserForT">O leitor de elementos.</param> /// <param name="type">O tipo de delimitador.</param> /// <exception cref="CollectionsException">Se o delimitador não for suportado.</exception> public LispStyleParser(IParse <R, string, string> parserForT, LispDelimiterType type) { string openType = string.Empty; string closeType = string.Empty; switch (type) { case LispDelimiterType.BAR_GREATER: openType = "bitwise_or"; closeType = "great_than"; break; case LispDelimiterType.BRACES: openType = "left_brace"; closeType = "right_brace"; break; case LispDelimiterType.BRACKETS: openType = "left_bracket"; closeType = "right_bracket"; break; case LispDelimiterType.LESSER_GREATER: openType = "less_than"; closeType = "great_than"; break; case LispDelimiterType.PARENTHESIS: openType = "left_parenthesis"; closeType = "right_parenthesis"; break; default: throw new CollectionsException("Delimiter types not yet implemented."); } this.expressionReader = new ExpressionReader <LispStyleList <R> .ElementList <R>, string, string>( new ElementParser <R>(parserForT)); this.expressionReader.RegisterExpressionDelimiterTypes(openType, closeType, this.Parenthesis); this.expressionReader.RegisterBinaryOperator("comma", this.Concatenate, 0); this.delimiters = type; }
/// <summary> /// Gets a <see cref="ILispStyleListParser{T}"/> parser for list style list using /// the specified delimiters types. /// </summary> /// <param name="parserForT">The parser for list objects.</param> /// <param name="type">The type of delimiters to be used during the parsing.</param> /// <returns>The parser.</returns> public static ILispStyleListParser <T> GetParser( IParse <T, string, string> parserForT, LispDelimiterType type) { return(new LispStyleParser <T>(parserForT, type)); }