| 1 | /* | 
|---|
| 2 | ** $Id: lpvm.h,v 1.3 2014/02/21 13:06:41 roberto Exp $ | 
|---|
| 3 | */ | 
|---|
| 4 |  | 
|---|
| 5 | #if !defined(lpvm_h) | 
|---|
| 6 | #define lpvm_h | 
|---|
| 7 |  | 
|---|
| 8 | #include "lpcap.h" | 
|---|
| 9 |  | 
|---|
| 10 |  | 
|---|
| 11 | /* Virtual Machine's instructions */ | 
|---|
| 12 | typedef enum Opcode { | 
|---|
| 13 | IAny, /* if no char, fail */ | 
|---|
| 14 | IChar,  /* if char != aux, fail */ | 
|---|
| 15 | ISet,  /* if char not in buff, fail */ | 
|---|
| 16 | ITestAny,  /* in no char, jump to 'offset' */ | 
|---|
| 17 | ITestChar,  /* if char != aux, jump to 'offset' */ | 
|---|
| 18 | ITestSet,  /* if char not in buff, jump to 'offset' */ | 
|---|
| 19 | ISpan,  /* read a span of chars in buff */ | 
|---|
| 20 | IBehind,  /* walk back 'aux' characters (fail if not possible) */ | 
|---|
| 21 | IRet,  /* return from a rule */ | 
|---|
| 22 | IEnd,  /* end of pattern */ | 
|---|
| 23 | IChoice,  /* stack a choice; next fail will jump to 'offset' */ | 
|---|
| 24 | IJmp,  /* jump to 'offset' */ | 
|---|
| 25 | ICall,  /* call rule at 'offset' */ | 
|---|
| 26 | IOpenCall,  /* call rule number 'key' (must be closed to a ICall) */ | 
|---|
| 27 | ICommit,  /* pop choice and jump to 'offset' */ | 
|---|
| 28 | IPartialCommit,  /* update top choice to current position and jump */ | 
|---|
| 29 | IBackCommit,  /* "fails" but jump to its own 'offset' */ | 
|---|
| 30 | IFailTwice,  /* pop one choice and then fail */ | 
|---|
| 31 | IFail,  /* go back to saved state on choice and jump to saved offset */ | 
|---|
| 32 | IGiveup,  /* internal use */ | 
|---|
| 33 | IFullCapture,  /* complete capture of last 'off' chars */ | 
|---|
| 34 | IOpenCapture,  /* start a capture */ | 
|---|
| 35 | ICloseCapture, | 
|---|
| 36 | ICloseRunTime | 
|---|
| 37 | } Opcode; | 
|---|
| 38 |  | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 | typedef union Instruction { | 
|---|
| 42 | struct Inst { | 
|---|
| 43 | byte code; | 
|---|
| 44 | byte aux; | 
|---|
| 45 | short key; | 
|---|
| 46 | } i; | 
|---|
| 47 | int offset; | 
|---|
| 48 | byte buff[1]; | 
|---|
| 49 | } Instruction; | 
|---|
| 50 |  | 
|---|
| 51 |  | 
|---|
| 52 | void printpatt (Instruction *p, int n); | 
|---|
| 53 | const char *match (lua_State *L, const char *o, const char *s, const char *e, | 
|---|
| 54 | Instruction *op, Capture *capture, int ptop); | 
|---|
| 55 |  | 
|---|
| 56 |  | 
|---|
| 57 | #endif | 
|---|
| 58 |  | 
|---|
| 59 |  | 
|---|