From b71515071d1310bbf9cd34f8997aa736ebd30099 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 19 Jun 2023 11:56:46 +0200 Subject: frontend: separate compiler & lexer --- lex.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'lex.c') diff --git a/lex.c b/lex.c index f172c30..b63666d 100644 --- a/lex.c +++ b/lex.c @@ -1,5 +1,4 @@ -#include "common.h" -#include "parse.h" +#include "lex.h" #include const char * @@ -332,7 +331,7 @@ readstrchrlit(struct parser *pr, struct token *tk, char delim) } else { tk->litlit = 0; vpush(&b, 0); - tk->s = alloc(&pr->exarena, b.n, 1); + tk->s = alloc(pr->tmparena, b.n, 1); memcpy((char *)tk->s, b.p, b.n); } } else { @@ -350,7 +349,7 @@ readstrchrlit(struct parser *pr, struct token *tk, char delim) tk->s = (char *)&pr->dat[beginoff]; } else { tk->litlit = 0; - tk->s = alloc(&pr->exarena, tk->len, 1); + tk->s = alloc(pr->tmparena, tk->len, 1); memcpy((char *)tk->s, b.p, tk->len); } } @@ -473,7 +472,7 @@ Begin: tk->len = n; if (n == pr->chridx - idx) tk->s = (char *)&pr->dat[idx]; else { - tk->s = alloc(&pr->exarena, n, 1); + tk->s = alloc(pr->tmparena, n, 1); memcpy((char *)tk->s, tmp, n); } RET(TKNUMLIT); @@ -1101,4 +1100,20 @@ lexpeek(struct parser *pr, struct token *tk_) return t; } +void +initparser(struct parser *pr, const char *file, struct arena **tmparena) +{ + const char *error; + struct memfile *f; + + memset(pr, 0, sizeof *pr); + pr->fileid = openfile(&error, &f, file); + if (pr->fileid < 0) + fatal(NULL, "Cannot open %'s: %s", file, error); + pr->dat = f->p; + pr->ndat = f->n; + pr->tmparena = tmparena; +} + + /* vim:set ts=3 sw=3 expandtab: */ -- cgit v1.2.3