예제 #1
0
        /// <summary>
        /// 評価用メソッド.
        /// </summary>
        /// <param name="context">コンテキストオブジェクト.</param>
        public override void Interpret(GeneratorContext context)
        {
            DebugLog("FieldExpression.Interpret(): " + Name);

            // 戻り値の準備
            Result result = new Result(Name);

            // 子要素を巡回する
            foreach (GeneratedExpression exp in Expressions)
            {
                DebugLog("-\tFieldExpression.Expressions : (" + exp.Name + ")");
                exp.Interpret(context);
                Result itemResult = context.PopResult();

                result.Matches.ConcatTokens(itemResult.Matches);
                if (itemResult.IsMatch == false)
                {
                    DebugLog("-\texp.IsMatch == false : (" + exp.Name + ")");
                    if (exp.Type == ExpressionType.Option)
                    {
                        continue;
                    }
                    result.IsMatch = false;
                    //throw new InterpreterException("FieldExpression.Interpret() Error");
                    break;
                }
                else
                {
                    result.IsMatch = true;
                }
            }

            // マッチしたらイベントを発生させる
            if (result.IsMatch)
            {
                context.OnMatchField(Name, result.Matches);
            }

            context.PushResult(result);
        }