Added JNI example, this is what usage hsould look like soon.
This commit is contained in:
parent
f817211446
commit
1529c0641e
2 changed files with 89 additions and 41 deletions
49
jni/Example.java
Normal file
49
jni/Example.java
Normal 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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue