protected void CheckParseOK(Parser p, string probe, Object expected) { Object ret = p.Parse(ToBytes(probe)); Assert.That(ret, Is.Not.Null); //System.Console.WriteLine(ToString(ret)); //System.Console.WriteLine(ToString(expected)); if (!DeepEquals(ret, expected)) Assert.Fail(); else Assert.Pass(); }
public static Parser Action(Parser p, HAction action) { ulong actionNo = Hammer.RegisterAction(action); return new Parser(hammer.h_tag(p.wrapped, actionNo)).Pin(p).Pin(action); }
public void Bind(Parser p) { hammer.h_bind_indirect(this.wrapped, p.wrapped); }
internal static Parser CharParser(Parser p) { return new Parser(hammer.h_tag(p.wrapped, charify_action)).Pin(p); }
internal static IntPtr[] BuildParserArray(Parser[] parsers) { IntPtr[] rlist = new IntPtr[parsers.Length+1]; for (int i = 0; i < parsers.Length; i++) { rlist[i] = HParser.getCPtr(parsers[i].wrapped).Handle; } rlist[parsers.Length] = IntPtr.Zero; return rlist; }
public static Parser Int_range(Parser p, System.Int64 i1, System.Int64 i2) { return new Parser(hammer.h_int_range(p.wrapped, i1, i2)); }
protected void CheckParseFail(Parser p, string probe) { Object ret = p.Parse(ToBytes(probe)); Assert.That(ret, Is.Null); }
public static Parser Butnot(Parser p1, Parser p2) { return new Parser(hammer.h_butnot(p1.wrapped, p2.wrapped)); }
public static Parser Right(Parser p1, Parser p2) { return new Parser(hammer.h_right(p1.wrapped, p2.wrapped)); }
public static Parser Repeat_n(Parser p, uint count) { return new Parser(hammer.h_repeat_n(p.wrapped, count)); }
public static Parser Optional(Parser p) { return new Parser(hammer.h_optional(p.wrapped)).Pin(p); }
public static Parser Not(Parser p) { return new Parser(hammer.h_not(p.wrapped)).Pin(p); }
// Multi-arg parsers public static Parser Middle(Parser p1, Parser p2, Parser p3) { return new Parser(hammer.h_middle(p1.wrapped, p2.wrapped, p3.wrapped)); }
public static Parser Many1(Parser p) { return new Parser(hammer.h_many1(p.wrapped)).Pin(p); }
// 2-arg parsers public static Parser Left(Parser p1, Parser p2) { return new Parser(hammer.h_left(p1.wrapped, p2.wrapped)).Pin(p1).Pin(p2); }
public static Parser And(Parser p) { return new Parser(hammer.h_and(p.wrapped)).Pin(p); }
public static Parser AttrBool(Parser p, HPredicate predicate) { ulong predNo = Hammer.RegisterPredicate(predicate); return new Parser(hammer.h_tag(p.wrapped, predNo)).Pin(p).Pin(predicate); }
public static Parser SepBy1(Parser p, Parser sep) { return new Parser(hammer.h_sepBy1(p.wrapped, sep.wrapped)).Pin(p); }
public static Parser Difference(Parser p1, Parser p2) { return new Parser(hammer.h_difference(p1.wrapped, p2.wrapped)); }
public static Parser Whitespace(Parser p) { return new Parser(hammer.h_whitespace(p.wrapped)).Pin(p); }
public static Parser Xor(Parser p1, Parser p2) { return new Parser(hammer.h_xor(p1.wrapped, p2.wrapped)); }
// 1-arg parsers public static Parser Ignore(Parser p) { return new Parser(hammer.h_ignore(p.wrapped)).Pin(p); }