aboutsummaryrefslogtreecommitdiff
path: root/definitions.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2021-08-01 12:40:27 -0700
committerBruce Hill <bruce@bruce-hill.com>2021-08-01 12:40:27 -0700
commit994c9c973e0fd771699c3a5c76bee11f9b744c84 (patch)
tree8257c1abe2d18a50a46a1d712eadbd25fd7e4f8b /definitions.c
parentcb9b4c40d87480bc794b90c2a36ed0f4c3240d8a (diff)
Changed how definitions work
Diffstat (limited to 'definitions.c')
-rw-r--r--definitions.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/definitions.c b/definitions.c
index c85e227..8216e1d 100644
--- a/definitions.c
+++ b/definitions.c
@@ -33,26 +33,16 @@ def_t *with_def(def_t *defs, size_t namelen, const char *name, pat_t *pat)
//
def_t *load_grammar(def_t *defs, file_t *f)
{
- const char *src = f->start;
- src = after_spaces(src);
- while (src < f->end) {
- const char *name = src;
- src = after_name(name);
- if (src <= name)
- file_err(f, name, src, "Invalid name for definition: %s", name);
- size_t namelen = (size_t)(src - name);
- if (!matchchar(&src, ':'))
- errx(EXIT_FAILURE, "Expected ':' in definition");
- pat_t *pat = bp_pattern(f, src);
- if (pat == NULL) break;
- defs = with_def(defs, namelen, name, pat);
- src = pat->end;
- src = after_spaces(src);
- if (matchchar(&src, ';'))
- src = after_spaces(src);
+ const char *str = after_spaces(f->start);
+ while (*str == '\r' || *str == '\n') str = after_spaces(++str);
+ pat_t *pat = bp_pattern(f, str);
+ if (!pat) file_err(f, str, f->end, "Could not parse this file");
+ if (pat->end < f->end) file_err(f, pat->end, f->end, "Could not parse this part of the file");
+ for (pat_t *p = pat; p && p->type == BP_DEFINITION; p = p->args.def.pat) {
+ // printf("Def '%.*s': %.*s\n", (int)p->args.def.namelen, p->args.def.name,
+ // (int)(p->args.def.def->end - p->args.def.def->start), p->args.def.def->start);
+ defs = with_def(defs, p->args.def.namelen, p->args.def.name, p->args.def.def);
}
- if (src < f->end)
- file_err(f, src, NULL, "Invalid BP pattern");
return defs;
}