diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2020-09-14 01:21:49 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2020-09-14 01:21:49 -0700 |
| commit | a82164505e89dc8257ef87844dfef1476e235a7f (patch) | |
| tree | f545e4a76b0ff0472bf6046b951230672ad18ce4 /compiler.c | |
| parent | 9f2d5464d6fd2c2aeb6dc234c64bd3aafe22d6e0 (diff) | |
Added nodent support (|)
Diffstat (limited to 'compiler.c')
| -rw-r--r-- | compiler.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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 '=='"); |
