aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c
new file mode 100644
index 0000000..35a4abb
--- /dev/null
+++ b/src/parser.c
@@ -0,0 +1,39 @@
+#include "../include/parser.h"
+#include <stdio.h>
+
+typedef struct {
+ TslTokenizer tokenizer;
+} TslParser;
+
+static void tsl_parser_init(TslParser *self, const char *code, size_t code_size) {
+ tsl_tokenizer_init(&self->tokenizer, code, code_size);
+}
+
+static int tsl_parser_parse_rhs(TslParser *self) {
+ return 0;
+}
+
+static int tsl_parser_parse(TslParser *self) {
+ for(;;) {
+ TslToken token = tsl_tokenizer_next(&self->tokenizer);
+ if(token == TSL_TOKEN_IDENTIFIER) {
+ TslStringView identifier = self->tokenizer.identifier;
+ if(!tsl_tokenizer_accept(&self->tokenizer, TSL_TOKEN_EQUAL)) {
+ return -1;
+ }
+ tsl_parser_parse_rhs(self);
+ } else if(token == TSL_TOKEN_END_OF_FILE) {
+ break;
+ } else {
+ fprintf(stderr, "Error: Expected identifier, got TODO\n");
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int tsl_parse(const char *code, size_t code_size) {
+ TslParser parser;
+ tsl_parser_init(&parser, code, code_size);
+ return tsl_parser_parse(&parser);
+}