/// <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); }
/// <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 ); } }