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

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

            //Matches = new TokenMatches(Name);
            //IsMatch = false;

            if (context.Fields.ContainsKey(Name) == false)
            {
                throw new InterpreterException("NonterminalExpression.Interpret() Error");
            }

            GeneratedExpression exp = context.Fields[Name];

            exp.Interpret(context);
            Result itemResult = context.PopResult();

            result.IsMatch = itemResult.IsMatch;
            result.Matches.ConcatTokens(itemResult.Matches);

            context.PushResult(result);
        }
Example #2
0
        /// <summary>
        /// 評価用メソッド.
        /// </summary>
        /// <param name="context">コンテキストオブジェクト.</param>
        public override void Interpret(GeneratorContext context)
        {
            // 一番深い要素を探す
            GeneratedExpression exp = GetDeepestExpression(context, this);

            if (exp == null)
            {
                ThrowParseException(
                    ErrorMessages.ExpressionNotFound
                    );
            }

            // 見つかった要素を実行する
            DebugLog("RootExpression: (" + exp.Name + ")");
            exp.Interpret(context);
            Result itemResult = context.PopResult();

            // 最後のトークンをチェックする
            Token <TokenType> token = context.Current;

            if (itemResult.IsMatch == false || token != null)
            {
                ThrowParseException(
                    ErrorMessages.UnexpectedToken, token
                    );
            }
        }