aboutsummaryrefslogtreecommitdiff
path: root/compiler.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2020-09-14 01:21:49 -0700
committerBruce Hill <bruce@bruce-hill.com>2020-09-14 01:21:49 -0700
commita82164505e89dc8257ef87844dfef1476e235a7f (patch)
treef545e4a76b0ff0472bf6046b951230672ad18ce4 /compiler.c
parent9f2d5464d6fd2c2aeb6dc234c64bd3aafe22d6e0 (diff)
Added nodent support (|)
Diffstat (limited to 'compiler.c')
-rw-r--r--compiler.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/compiler.c b/compiler.c
index 267ea27..8279285 100644
--- a/compiler.c
+++ b/compiler.c
@@ -211,6 +211,7 @@ vm_op_t *bpeg_simplepattern(const char *str)
str = sep->end;
set_range(op, min, max, pat, sep);
} else {
+ str = pat->end;
set_range(op, min, max, pat, NULL);
}
break;
@@ -233,6 +234,7 @@ vm_op_t *bpeg_simplepattern(const char *str)
str = sep->end;
set_range(op, min, max, pat, sep);
} else {
+ str = pat->end;
set_range(op, min, max, pat, NULL);
}
break;
@@ -345,8 +347,8 @@ vm_op_t *bpeg_simplepattern(const char *str)
}
// Empty choice (/) or {/}
case '/': {
- str = after_spaces(str);
- if (*str == ')' || *str == '}') {
+ const char *next = after_spaces(str);
+ if (*next == ')' || *next == '}') {
op->op = VM_EMPTY;
} else {
free(op);
@@ -354,6 +356,10 @@ vm_op_t *bpeg_simplepattern(const char *str)
}
break;
}
+ case '|': {
+ op->op = VM_NODENT;
+ break;
+ }
default: {
// Reference
if (isalpha(c)) {
@@ -373,9 +379,8 @@ vm_op_t *bpeg_simplepattern(const char *str)
// Postfix operators:
postfix:
- str = after_spaces(str);
- if (strncmp(str, "==", 2) == 0) {
- str += 2;
+ if (strncmp(after_spaces(str), "==", 2) == 0) {
+ str = after_spaces(str)+2;
vm_op_t *first = op;
vm_op_t *second = bpeg_simplepattern(str);
check(second, "Expected pattern after '=='");