예제 #1
0
    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>();
                    }
                }
            }
        }
    }