private (RacketExpression?, string) ParseLine(string str) { RacketExpression?expression = null; RacketValueType? retValue; string retValueString; try { expression = RacketExpression.Parse(str); retValue = expression?.Evaluate(); retValueString = retValue?.ToString() ?? ""; } catch (Exception ex) { retValueString = $"; {ex.Message}"; } if (!string.IsNullOrEmpty(retValueString)) { retValueString += Environment.NewLine; } return(expression, retValueString); }
public static List <IRacketObject>?ParseAny(string str) { string[] args = str.Split(" "); List <IRacketObject> arguments = new List <IRacketObject>(); string predicate = ""; for (int i = 0; i < args.Length; i++) { string currentToken = predicate + args[i]; IRacketObject?newRacketObject = RacketBoolean.Parse(currentToken) ?? RacketNumber.Parse(currentToken) ?? RacketString.Parse(currentToken) ?? (IRacketObject?)RacketExpression.Parse(currentToken); if (newRacketObject != null) { arguments.Add(newRacketObject); predicate = ""; continue; } predicate += $"{args[i]} "; } if (predicate != "") { return(null); } return(arguments); }