void ProcessInput(List <string> inp) { float accumulatedP = 0; List <RandomIRule> percRules = new List <RandomIRule>(); for (int i = 0; i < inp.Count; i++) { IRule ir = GetRuleForInput(inp[i]); if (ir != null) { float per = ParsingHelper.ExtractProbavility(inp[i]); if (per == 1 && accumulatedP == 0) { ir.Execute(inp[i], ref context); } else { accumulatedP += per; percRules.Add(new RandomIRule { rule = ir, p = per, inputString = inp[i] }); if (accumulatedP >= 1.0f) // maybe errors? { float cp = Random.Range(0.0f, 1.0f); float acp = 0; bool selected = false; for (int j = 0; j < percRules.Count; j++) { RandomIRule irl = percRules[j]; acp += irl.p; if (acp > cp && !selected) { irl.rule.Execute(irl.inputString, ref context); selected = true;; } } accumulatedP = 0; percRules = new List <RandomIRule>(); } } } } }