Added JNI example, this is what usage hsould look like soon.

This commit is contained in:
aegis 2013-04-23 17:53:26 +02:00
parent f817211446
commit 1529c0641e
2 changed files with 89 additions and 41 deletions

49
jni/Example.java Normal file
View file

@ -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
}
}
}

View file

@ -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();
}