Example #1
0
        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);
        }