From 82952fa5e955885baa1632b0b0ba2ab040a30f14 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 16 Sep 2020 22:36:38 -0700 Subject: Removed the requirement for semicolons, changed '=' -> ':' for definitions, added better error reporting for failed BPEG grammars --- compiler.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'compiler.c') diff --git a/compiler.c b/compiler.c index f5bcd90..c3c6fba 100644 --- a/compiler.c +++ b/compiler.c @@ -86,9 +86,8 @@ static vm_op_t *chain_together(vm_op_t *first, vm_op_t *second) */ vm_op_t *bpeg_simplepattern(file_t *f, const char *str) { - if (!*str) return NULL; str = after_spaces(str); - check(*str, "Expected a pattern"); + if (!*str) return NULL; vm_op_t *op = calloc(sizeof(vm_op_t), 1); op->start = str; op->len = -1; @@ -320,6 +319,11 @@ vm_op_t *bpeg_simplepattern(file_t *f, const char *str) } else { op->args.s = strndup(&c, 1); } + if (*after_spaces(str) == ':') { + free((char*)op->args.s); + free(op); + return NULL; + } op->op = VM_REF; break; } @@ -333,6 +337,10 @@ vm_op_t *bpeg_simplepattern(file_t *f, const char *str) --str; const char *refname = str; str = after_name(str); + if (*after_spaces(str) == ':') { + free(op); + return NULL; + } op->op = VM_REF; op->args.s = strndup(refname, (size_t)(str - refname)); break; -- cgit v1.2.3