From e4004807fcfeee743fbf0ff25aa0f369a5f873ee Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Thu, 4 May 2023 01:28:58 +0400 Subject: [PATCH] enums.h --- Makefile | 2 +- enums.c | 16 ++++++++++++++++ enums.h | 22 ++++++++++++++++++++++ main.c | 34 +++------------------------------- 4 files changed, 42 insertions(+), 32 deletions(-) create mode 100644 enums.c create mode 100644 enums.h diff --git a/Makefile b/Makefile index ee3e1f3..c146684 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ all: lisp CC = gcc CFLAGS = -Wall -Wextra -OBJS = main.c.o +OBJS = main.c.o enums.c.o lisp: $(OBJS) $(CC) -o $@ $^ $(CFLAGS) diff --git a/enums.c b/enums.c new file mode 100644 index 0000000..5bb2da3 --- /dev/null +++ b/enums.c @@ -0,0 +1,16 @@ +#include "enums.h" + +#include + +const char *State_to_str(enum State state) +{ + switch (state) { + case STATE_INIT: return "STATE_INIT"; + case STATE_WHITESPACE: return "STATE_WHITESPACE"; + case STATE_OPEN: return "STATE_OPEN"; + case STATE_CLOSE: return "STATE_CLOSE"; + case STATE_ID: return "STATE_ID"; + case STATE_NUM: return "STATE_NUM"; + } + return NULL; +} diff --git a/enums.h b/enums.h new file mode 100644 index 0000000..f58b216 --- /dev/null +++ b/enums.h @@ -0,0 +1,22 @@ +#ifndef __ENUMS_H__ +#define __ENUMS_H__ + +enum State { + STATE_INIT, + STATE_WHITESPACE, + STATE_OPEN, + STATE_CLOSE, + STATE_ID, + STATE_NUM, +}; + +enum Type { + TYPE_PAIR, + TYPE_ATOM, + TYPE_STRING, + TYPE_NUMBER, +}; + +const char *State_to_str(enum State state); + +#endif diff --git a/main.c b/main.c index d39256a..714e68c 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,5 @@ +#include "enums.h" + #include #include #include @@ -6,28 +8,12 @@ #include #include -enum State { - STATE_INIT, - STATE_WHITESPACE, - STATE_OPEN, - STATE_CLOSE, - STATE_ID, - STATE_NUM, -}; - struct Token { struct Token *next; enum State type; char *val; }; -enum Type { - TYPE_PAIR, - TYPE_ATOM, - TYPE_STRING, - TYPE_NUMBER, -}; - struct Object { enum Type type; union { @@ -52,7 +38,6 @@ static void error(const char *msg); * Lexer * *********/ -static const char *state_str(enum State state); static void buffer_add(char chr); static void buffer_clean(); static void token_add(enum State type, char *val); @@ -93,7 +78,7 @@ int main() printf("Tokens:\n"); for (const struct Token *token = tokens; token; token = token->next) { - printf("%s:%s;\n", state_str(token->type), token->val); + printf("%s:%s;\n", State_to_str(token->type), token->val); } struct Object *const program = parse(); @@ -112,19 +97,6 @@ void error(const char *msg) * Lexer * *********/ -const char *state_str(enum State state) -{ - switch (state) { - case STATE_INIT: return "STATE_INIT"; - case STATE_WHITESPACE: return "STATE_WHITESPACE"; - case STATE_OPEN: return "STATE_OPEN"; - case STATE_CLOSE: return "STATE_CLOSE"; - case STATE_ID: return "STATE_ID"; - case STATE_NUM: return "STATE_NUM"; - } - return NULL; -} - void buffer_add(char chr) { if (buffer_index >= 1000) error("token too long");