1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #if !defined(lpvm_h)
- #define lpvm_h
- #include "lpcap.h"
- /*
- ** About Character sets in instructions: a set is a bit map with an
- ** initial offset, in bits, and a size, in number of instructions.
- ** aux1 has the default value for the bits outsize that range.
- */
- /* Virtual Machine's instructions */
- typedef enum Opcode {
- IAny, /* if no char, fail */
- IChar, /* if char != aux1, fail */
- ISet, /* if char not in set, fail */
- ITestAny, /* in no char, jump to 'offset' */
- ITestChar, /* if char != aux1, jump to 'offset' */
- ITestSet, /* if char not in set, jump to 'offset' */
- ISpan, /* read a span of chars in set */
- IUTFR, /* if codepoint not in range [offset, utf_to], fail */
- IBehind, /* walk back 'aux1' characters (fail if not possible) */
- IRet, /* return from a rule */
- IEnd, /* end of pattern */
- IChoice, /* stack a choice; next fail will jump to 'offset' */
- IJmp, /* jump to 'offset' */
- ICall, /* call rule at 'offset' */
- IOpenCall, /* call rule number 'key' (must be closed to a ICall) */
- ICommit, /* pop choice and jump to 'offset' */
- IPartialCommit, /* update top choice to current position and jump */
- IBackCommit, /* backtrack like "fail" but jump to its own 'offset' */
- IFailTwice, /* pop one choice and then fail */
- IFail, /* go back to saved state on choice and jump to saved offset */
- IGiveup, /* internal use */
- IFullCapture, /* complete capture of last 'off' chars */
- IOpenCapture, /* start a capture */
- ICloseCapture,
- ICloseRunTime,
- IEmpty /* to fill empty slots left by optimizations */
- } Opcode;
- /*
- ** All array of instructions has a 'codesize' as its first element
- ** and is referred by a pointer to its second element, which is the
- ** first actual opcode.
- */
- typedef union Instruction {
- struct Inst {
- byte code;
- byte aux1;
- union {
- short key;
- struct {
- byte offset;
- byte size;
- } set;
- } aux2;
- } i;
- int offset;
- uint codesize;
- byte buff[1];
- } Instruction;
- /* extract 24-bit value from an instruction */
- #define utf_to(inst) (((inst)->i.aux2.key << 8) | (inst)->i.aux1)
- int charinset (const Instruction *i, const byte *buff, uint c);
- const char *match (lua_State *L, const char *o, const char *s, const char *e,
- Instruction *op, Capture *capture, int ptop);
- #endif
|