private Dictionary <string, string> GetConstructionsHelp() { var answer = new Dictionary <string, string>(); string main = "После каждой команды нужно писать ;.\nЧтобы сделать команду асинхронной нужно добавить async перед ней. Конструкции так же считаются командами. Нераспознанные команды превращаются в строку. \nЧтобы создать строку, её нужно обернуть в двойные кавычки \". Чтобы написать кавычку внутри строки, нужно написать "."; answer.Add("Основное", main); foreach (ISyntacticConstruction sc in SyntacticConstructionsManager.GetSyntacticConstructs()) { answer.Add(sc.Name, sc.Description); } return(answer); }
public static object ExecuteCommand(string cmdString, InterpretationData data) { if (data.Stopper.IsStopped) { throw new StopException(); } CommandModel cmd = new CommandModel(cmdString.Trim()); Task <object> commandTask = null; if (Converter.CanConvertToSimpleType(cmd.Command))//берём простой тип { commandTask = Converter.ToSimpleType(cmd.Command); } if (commandTask == null) { SyntacticConstructionsManager.TryExecute(cmd, data, out commandTask); } if (commandTask == null) { //ищем функцию по имени во всей библиотеке, начинаем с функций этой интерпретации IInterpreterFunction func = data.InterpretationFuncs.FirstOrDefault(Func => Func.Name == cmd.KeyWord); if (func == null) { func = AdditionalLibrary.FirstOrDefault(Func => Func.Name == cmd.KeyWord); } if (func == null) { func = MainLibrary.FirstOrDefault(Func => Func.Name == cmd.KeyWord); } if (func != null) { var stringParameters = cmd.GetParameters(); object[] parameters = new object[stringParameters.Length]; for (int i = 0; i < parameters.Length; i++) { parameters[i] = ExecuteCommand(stringParameters[i], data); } commandTask = func.GetResult(parameters, data); } } if (commandTask == null)//если ничего не удалось, возвращаем входную команду, как строку { commandTask = Task.FromResult <object>(cmdString); } if (commandTask.Status == TaskStatus.Created)//если задача создана, но не запущена { commandTask.Start(); } if (cmd.IsAsync)//если асинхронно, на всё пофиг { return(null); } else { try { return(commandTask.Result); }//если что то не так, прокидываем исключение выше catch { throw commandTask.Exception.InnerException; }; } }