aboutsummaryrefslogtreecommitdiff
path: root/vm.h
diff options
context:
space:
mode:
Diffstat (limited to 'vm.h')
-rw-r--r--vm.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/vm.h b/vm.h
new file mode 100644
index 0000000..2123c35
--- /dev/null
+++ b/vm.h
@@ -0,0 +1,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;
+