diff --git a/jni/Example.java b/jni/Example.java new file mode 100644 index 0000000000000000000000000000000000000000..5871d798248eff8beb40c07a3dd1d5a4072b1486 --- /dev/null +++ b/jni/Example.java @@ -0,0 +1,49 @@ +/** +* Example JHammer usage +*/ +public class Example +{ + +private HParser initParser() +{ + HParser digit = Hammer.chRange(0x30, 0x39); + HParser alpha = Hammer.choice({Hammer.chRange(0x41, 0x5a), Hammer.chRange(0x61, 0x7a)}); + + HParser plus = Hammer.ch('+'); + HParser slash = Hammer.ch('/'); + HParser equals = Hammer.ch('='); + HParser bsfdig = Hammer.choice({alpha, digit, plus, slash}); + + byte[] AEIMQUYcgkosw048 = "AEIMQUYcgkosw048".getBytes(); + HParser bsfdig_4bit = Hammer.in(AEIMQUYcgkosw048, AEIMQUYcgkosw048.length); + byte[] AQgw = "AQgw".getBytes(); + HParser bsfdig_2bit = Hammer.in(AQgw, AQgw.length); + HParser base64_3 = Hammer.repeatN(bsfdig, 4); + HParser base64_2 = Hammer.sequence({bsfdig, bsfdig, bsfdig_4bit, equals}); + HParser base64_1 = Hammer.sequence({bsfdig, bsfdig_2bit, equals, equals}); + HParser base64 = Hammer.sequence({ Hammer.many(base64_3), + Hammer.optional(Hammer.choice({base64_2, base64_1})) + }); + + return Hammer.sequence({Hammer.whitespace(base64), Hammer.whitespace(Hammer.endP()}}); +} + +public static void main(String args[]) +{ + byte[] input = "RXMgaXN0IFNwYXJnZWx6ZWl0IQo=".getBytes(); + int length = input.length; + HParsedResult result = Hammer.parse(initParser(), input, length); + if(result == null) + { + System.out.println("FAIL"); + } + else + { + System.out.println("PASS"); + //TODO: Pretty print + } +} + + + +} diff --git a/jni/com/upstandinghackers/hammer/Hammer.java b/jni/com/upstandinghackers/hammer/Hammer.java index 08b75b1efcab93d945a20ebdb8bbb5c82c58a143..e7ad571b9b19d9a26aab1dba26d28a79b7e79792 100644 --- a/jni/com/upstandinghackers/hammer/Hammer.java +++ b/jni/com/upstandinghackers/hammer/Hammer.java @@ -16,51 +16,50 @@ public class Hammer TT_SEQUENCE(16), TT_ERR(32), TT_USER(64), - TT_MAX(128); private int value; public int getValue() { return this.value; } private HTokenType(int value) { this.value = value; } } - public static native HParseResult hParse(HParser parser, byte[] input, int length); - public static native HParser hToken(byte[] str, int length); - public static native HParser hCh(byte c); - public static native HParser hChRange(byte from, byte to); - public static native HParser hIntRange(HParser p, int lower, int upper); - public static native HParser hBits(int len, boolean sign); - public static native HParser hInt64(); - public static native HParser hInt32(); - public static native HParser hInt16(); - public static native HParser hInt8(); - public static native HParser hUInt64(); - public static native HParser hUInt32(); - public static native HParser hUInt16(); - public static native HParser hUInt8(); - public static native HParser hWhitespace(HParser p); - public static native HParser hLeft(HParser p, HParser q); - public static native HParser hRight(HParser p, HParser q); - public static native HParser hMiddle(HParser p, HParser x, HParser q); - public static native HParser hAction(HParser p, HAction a); - public static native HParser hIn(byte[] charset, int length); - public static native HParser hEndP(); - public static native HParser hNothingP(); - public static native HParser hSequence(HParser[] parsers); - public static native HParser hChoice(HParser[] parsers); - public static native HParser hButNot(HParser p1, HParser p2); - public static native HParser hDifference(HParser p1, HParser p2); - public static native HParser hXor(HParser p1, HParser p2); - public static native HParser hMany(HParser p); - public static native HParser hMany1(HParser p); - public static native HParser hRepeatN(HParser p, int n); - public static native HParser hOptional(HParser p); - public static native HParser hIgnore(HParser p); - public static native HParser hSepBy(HParser p, HParser sep); - public static native HParser hSepBy1(HParser p, HParser sep); - public static native HParser hEpsilonP(); - public static native HParser hLengthValue(HParser length, HParser value); - public static native HParser hAttrBool(HParser p, HPredicate pred); - public static native HParser hAnd(HParser p); - public static native HParser hNot(HParser p); - public static native HParser hIndirect(); + public static native HParseResult parse(HParser parser, byte[] input, int length); + public static native HParser token(byte[] str, int length); + public static native HParser ch(byte c); + public static native HParser chRange(byte from, byte to); + public static native HParser intRange(HParser p, int lower, int upper); + public static native HParser bits(int len, boolean sign); + public static native HParser int64(); + public static native HParser int32(); + public static native HParser int16(); + public static native HParser int8(); + public static native HParser uInt64(); + public static native HParser uInt32(); + public static native HParser uInt16(); + public static native HParser uInt8(); + public static native HParser whitespace(HParser p); + public static native HParser left(HParser p, HParser q); + public static native HParser right(HParser p, HParser q); + public static native HParser middle(HParser p, HParser x, HParser q); + public static native HParser action(HParser p, HAction a); + public static native HParser in(byte[] charset, int length); + public static native HParser endP(); + public static native HParser nothingP(); + public static native HParser sequence(HParser[] parsers); + public static native HParser choice(HParser[] parsers); + public static native HParser butNot(HParser p1, HParser p2); + public static native HParser difference(HParser p1, HParser p2); + public static native HParser xor(HParser p1, HParser p2); + public static native HParser many(HParser p); + public static native HParser many1(HParser p); + public static native HParser repeatN(HParser p, int n); + public static native HParser optional(HParser p); + public static native HParser ignore(HParser p); + public static native HParser sepBy(HParser p, HParser sep); + public static native HParser sepBy1(HParser p, HParser sep); + public static native HParser epsilonP(); + public static native HParser lengthValue(HParser length, HParser value); + public static native HParser attrBool(HParser p, HPredicate pred); + public static native HParser and(HParser p); + public static native HParser not(HParser p); + public static native HParser indirect(); }