From 5dc6889265cb5f0c385778f075279ed8012023a0 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 15 Aug 2021 16:05:11 +0000 Subject: added NULL and EOF (-1 as emum initialized in c4) --- miniany/c4.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'miniany/c4.c') diff --git a/miniany/c4.c b/miniany/c4.c index a6d24d3..a36fb4a 100644 --- a/miniany/c4.c +++ b/miniany/c4.c @@ -357,7 +357,7 @@ int main(int argc, char **argv) { int fd, bt, ty, poolsz, *idmain; int *pc, *sp, *bp, a, cycle; // vm registers - int i, *t; // temps + int i, *t, neg; // temps --argc; ++argv; if (argc > 0 && **argv == '-' && (*argv)[1] == 's') { src = 1; --argc; ++argv; } @@ -377,13 +377,14 @@ int main(int argc, char **argv) memset(data, 0, poolsz); p = "char else enum if int return sizeof do while " - "EOF EXIT_SUCCESS EXIT_FAILURE " + "EOF EXIT_SUCCESS EXIT_FAILURE NULL " "open read close printf malloc free memset memcmp getchar putstring putnl putchar putint isspace isdigit isalnum isalpha strcmp exit void main"; i = Char; while (i <= While) { next(); id[Tk] = i++; } // add keywords to symbol table // add library constants next(); id[Class] = Num; id[Type] = INT; id[Val] = -1; next(); id[Class] = Num; id[Type] = INT; id[Val] = 0; next(); id[Class] = Num; id[Type] = INT; id[Val] = 1; + next(); id[Class] = Num; id[Type] = INT; id[Val] = (int)NULL; i = OPEN; while (i <= EXIT) { next(); id[Class] = Sys; id[Type] = INT; id[Val] = i++; } // add library to symbol table next(); id[Tk] = Char; // handle void type next(); idmain = id; // keep track of main @@ -411,8 +412,13 @@ int main(int argc, char **argv) next(); if (tk == Assign) { next(); + neg = 0; + if (tk == Sub) { next(); neg =1; } if (tk != Num) { printf("%d: bad enum initializer\n", line); return -1; } i = ival; + if (neg) { + i = -ival; + } next(); } id[Class] = Num; id[Type] = INT; id[Val] = i++; -- cgit v1.2.3-54-g00ecf