コード例 #1
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);
        }
コード例 #2
0
 public static void Succeed(this ICompileContext context, Expression value)
 {
     if (context.Result?.CanWrite() == true)
     {
         context.Append(Assign(context.Result, Convert(value, context.Result.Type)));
     }
     context.Succeed();
 }
コード例 #3
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();
 }
コード例 #4
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();
     }
 }
コード例 #5
0
        public override void Compile(ICompileContext context)
        {
            var breakTarget = Label();
            var fail        = Goto(context.Failure);
            var succeed     = Goto(breakTarget);

            context.Append(IfThen(GreaterThanOrEqual(context.Position, context.Length), succeed));
            context.Append(Switch(context.Peek(0), fail,
                                  SwitchCase(Block(AddAssign(context.Position, Constant(1)), succeed), Constant('\n')),
                                  SwitchCase(IfThenElse(And(
                                                            LessThan(Add(Constant(1), context.Position), context.Length),
                                                            Equal(context.Peek(1), Constant('\n'))
                                                            ),
                                                        Block(AddAssign(context.Position, Constant(2)), succeed),
                                                        fail), Constant('\r'))
                                  ));
            context.Append(Label(breakTarget));
            context.Succeed(Empty());
        }
コード例 #6
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();
        }
コード例 #7
0
ファイル: Location.cs プロジェクト: hamish-milne/Lexico
 public override void Compile(ICompileContext context) => context.Succeed(context.Position);
コード例 #8
0
 public override void Compile(ICompileContext context) => context.Succeed();
コード例 #9
0
 public override void Compile(ICompileContext context)
 {
     context.Append(IfThen(GreaterThanOrEqual(context.Position, context.Length), Goto(context.Failure)));
     context.Advance(1);
     context.Succeed(context.Peek(-1));
 }
コード例 #10
0
ファイル: UserObject.cs プロジェクト: hamish-milne/Lexico
 public override void Compile(ICompileContext context) => context.Succeed(context.UserObject);
コード例 #11
0
ファイル: EOF.cs プロジェクト: hamish-milne/Lexico
 public override void Compile(ICompileContext context)
 {
     context.Append(IfThen(GreaterThan(context.Position, Constant(0)), Goto(context.Failure)));
     context.Succeed(Empty());
 }
コード例 #12
0
ファイル: EOF.cs プロジェクト: hamish-milne/Lexico
 public override void Compile(ICompileContext context)
 {
     context.Append(IfThen(LessThan(context.Position, context.Length), Goto(context.Failure)));
     context.Succeed(Empty());
 }