aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
blob: 35a4abb1501f03808f6bdccc04769b01dfd9cacd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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);
}