/// <summary> /// Traduit le jeton en code lisible. /// </summary> /// <returns></returns> public string ToReadableCode() { Func <string, string> getChildrenCode = delegate(string separator) { StringBuilder b = new StringBuilder(); for (int i = 0; i < SubTokens.Count; i++) { b.Append(SubTokens[i].ToReadableCode()); if (i != SubTokens.Count - 1) { b.Append(separator); } } return(b.ToString()); }; Func <string, string> getChildrenCode2 = delegate(string ending) { StringBuilder b = new StringBuilder(); for (int i = 0; i < SubTokens.Count; i++) { b.Append(SubTokens[i].ToReadableCode()); b.Append(ending); } return(b.ToString()); }; switch (TkType) { case ExpressionTokenType.BracketList: return("[" + getChildrenCode(",") + "]"); case ExpressionTokenType.FunctionCall: return(FunctionCallIdentifier.ToReadableCode() + "(" + FunctionCallArgs.ToReadableCode() + ")"); case ExpressionTokenType.GenericType: return(GenericTypeIdentifier.ToReadableCode() + "<" + GenericTypeArgs.ToReadableCode() + ">"); case ExpressionTokenType.ArrayType: return(ArrayTypeIdentifier.ToReadableCode() + "[" + ArrayTypeArgs.ToReadableCode() + "]"); case ExpressionTokenType.List: return(getChildrenCode(" ")); case ExpressionTokenType.ArgList: return(getChildrenCode(",")); case ExpressionTokenType.GenericParametersList: return("<" + getChildrenCode(",") + ">"); case ExpressionTokenType.Name: return(this.Content); case ExpressionTokenType.CodeBlock: return("{ " + getChildrenCode(",") + " }"); case ExpressionTokenType.NamedCodeBlock: return(SubTokens[0].ToReadableCode() + "\n{\n" + Tools.StringUtils.Indent(SubTokens[1].ToReadableCode(), 1) + "\n}"); case ExpressionTokenType.FunctionDeclaration: return(SubTokens[0].ToReadableCode() + "\n{\n" + Tools.StringUtils.Indent(SubTokens[1].ToReadableCode(), 1) + "\n}"); case ExpressionTokenType.NamedGenericCodeBlock: return(NamedGenericCodeBlockIdentifier.ToReadableCode() + "{\n" + Tools.StringUtils.Indent(NamedGenericCodeBlockInstructions.ToReadableCode(), 1) + "\n}"); case ExpressionTokenType.EndOfInstruction: return(this.Content + "\n"); case ExpressionTokenType.InstructionList: return(getChildrenCode2(";\n")); case ExpressionTokenType.ExpressionGroup: if (Operator.IsBinaryOperator) { if (Operator.Content == "=") { return(Operands1.ToReadableCode() + Operator.ToReadableCode() + Operands2.ToReadableCode()); } else { return("(" + Operands1.ToReadableCode() + Operator.ToReadableCode() + Operands2.ToReadableCode() + ")"); } } else { return(Operator.ToReadableCode() + Operands1.ToReadableCode()); } case ExpressionTokenType.NumberLiteral: return(this.Content); case ExpressionTokenType.Operator: return(this.Content); case ExpressionTokenType.Separator: return(this.Content); case ExpressionTokenType.BoolLiteral: return(this.Content); case ExpressionTokenType.StringLiteral: return("\"" + this.Content + "\""); case ExpressionTokenType.Modifier: return(this.Content); default: return("??"); } }