1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- ** $Id: lptree.h,v 1.2 2013/03/24 13:51:12 roberto Exp $
- */
-
- #if !defined(lptree_h)
- #define lptree_h
-
-
- #include "lptypes.h"
-
-
- /*
- ** types of trees
- */
- typedef enum TTag {
- TChar = 0, TSet, TAny, /* standard PEG elements */
- TTrue, TFalse,
- TRep,
- TSeq, TChoice,
- TNot, TAnd,
- TCall,
- TOpenCall,
- TRule, /* sib1 is rule's pattern, sib2 is 'next' rule */
- TGrammar, /* sib1 is initial (and first) rule */
- TBehind, /* match behind */
- TCapture, /* regular capture */
- TRunTime /* run-time capture */
- } TTag;
-
- /* number of siblings for each tree */
- extern const byte numsiblings[];
-
-
- /*
- ** Tree trees
- ** The first sibling of a tree (if there is one) is immediately after
- ** the tree. A reference to a second sibling (ps) is its position
- ** relative to the position of the tree itself. A key in ktable
- ** uses the (unique) address of the original tree that created that
- ** entry. NULL means no data.
- */
- typedef struct TTree {
- byte tag;
- byte cap; /* kind of capture (if it is a capture) */
- unsigned short key; /* key in ktable for Lua data (0 if no key) */
- union {
- int ps; /* occasional second sibling */
- int n; /* occasional counter */
- } u;
- } TTree;
-
-
- /*
- ** A complete pattern has its tree plus, if already compiled,
- ** its corresponding code
- */
- typedef struct Pattern {
- union Instruction *code;
- int codesize;
- TTree tree[1];
- } Pattern;
-
-
- /* number of siblings for each tree */
- extern const byte numsiblings[];
-
- /* access to siblings */
- #define sib1(t) ((t) + 1)
- #define sib2(t) ((t) + (t)->u.ps)
-
-
- int luaopen_lpeg (lua_State *L);
-
-
-
- #endif
|