コード例 #1
0
 public override void Compile(ICompileContext context)
 {
     if (_prefix != null)
     {
         context.Child(_prefix, "(Prefix)", null, null, context.Failure);
     }
     context.Child(_inner, null, context.Result, null, context.Failure);
     if (_suffix != null)
     {
         context.Child(_suffix, "(Suffix)", null, null, context.Failure);
     }
     context.Succeed();
 }
コード例 #2
0
        public override void Compile(ICompileContext context)
        {
            var match = context.Cache(Default(typeof(string)));

            context.Child(regex, null, match, null, context.Failure);
            context.Succeed(Call(parseMethod, match, Constant(styles)));
            context.Release(match);
        }
コード例 #3
0
 public override void Compile(ICompileContext context)
 {
     if (context.Cut == null)
     {
         previous.Compile(context);
     }
     else
     {
         var success = Label();
         context.Child(previous, null, context.Result, success, context.Failure);
         context.Append(Label(success));
         context.Append(Assign(context.Cut, Constant(true)));
         context.Succeed();
     }
 }
コード例 #4
0
        public override void Compile(ICompileContext context)
        {
            var success = context.Success ?? Label();
            var cut     = context.Cache(Constant(false));

            foreach (var option in _options)
            {
                var savePoint = context.Save();
                context.Child(option, null, context.Result, success, savePoint, cut);
                context.Restore(savePoint);
                context.Append(IfThen(cut, Goto(context.Failure)));
                context.Release(savePoint);
            }
            context.Release(cut);
            context.Fail();
            if (context.Success == null)
            {
                context.Append(Label(success));
            }
            context.Succeed();
        }