1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/*
* vm.h - Source code for the BPEG virtual machine datatypes
*/
enum VMOpcode {
VM_EMPTY = 0,
VM_ANYCHAR = 1,
VM_STRING,
VM_RANGE,
VM_NOT,
VM_UPTO,
VM_UPTO_AND,
VM_REPEAT,
VM_BEFORE,
VM_AFTER,
VM_CAPTURE,
VM_OTHERWISE,
VM_CHAIN,
VM_REPLACE,
VM_REF,
};
typedef struct vm_op_s {
enum VMOpcode op;
const char *start, *end;
ssize_t len;
union {
const char *s;
struct {
char low, high;
} range;
struct {
ssize_t min, max;
struct vm_op_s *sep, *repeat_pat;
} repetitions;
struct {
struct vm_op_s *first, *second;
} multiple;
struct {
struct vm_op_s *replace_pat;
const char *replacement;
} replace;
struct {
struct vm_op_s *capture_pat;
char *name;
} capture;
struct vm_op_s *pat;
} args;
} vm_op_t;
|