public inbox for ~johnnyrichard/olang-devel@lists.sr.ht
 help / color / mirror / code / Atom feed
beb54866d6b7374c4a165bfa096007ba1ab28760 blob 2573 bytes (raw)

  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
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 
/*
 * Copyright (C) 2024 olang maintainers
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#ifndef LEXER_H
#define LEXER_H

#include "string_view.h"
#include <stdint.h>
#include <stdio.h>

typedef struct source_code {
    char *filepath;
    string_view_t code;
} source_code_t;

typedef struct lexer_cursor {
    size_t offset;
    size_t row;
    size_t bol;
} lexer_cursor_t;

typedef struct lexer {
    source_code_t src;
    lexer_cursor_t cur;
} lexer_t;

typedef enum token_kind {
    TOKEN_UNKNOWN,
    TOKEN_ID,
    TOKEN_NUMBER,

    // Keywords
    TOKEN_FN,
    TOKEN_RETURN,
    TOKEN_IF,
    TOKEN_ELSE,
    TOKEN_WHILE,
    TOKEN_VAR,

    // Equality operators
    TOKEN_CMP_EQ,
    TOKEN_CMP_NEQ,
    TOKEN_CMP_LEQ,
    TOKEN_CMP_GEQ,

    // Logical Operators
    TOKEN_LOGICAL_OR,
    TOKEN_LOGICAL_AND,

    // Bitwise Operators
    TOKEN_BITWISE_LSHIFT,
    TOKEN_BITWISE_RSHIFT,

    // Single char
    TOKEN_BANG,
    TOKEN_GT,
    TOKEN_LT,
    TOKEN_PERCENT,
    TOKEN_AND,
    TOKEN_PIPE,
    TOKEN_CIRCUMFLEX,
    TOKEN_EQ,
    TOKEN_PLUS,
    TOKEN_DASH,
    TOKEN_SLASH,
    TOKEN_STAR,
    TOKEN_TILDE,
    TOKEN_LF,
    TOKEN_OPAREN,
    TOKEN_CPAREN,
    TOKEN_COLON,
    TOKEN_COMMA,
    TOKEN_OCURLY,
    TOKEN_CCURLY,
    TOKEN_EOF
} token_kind_t;

typedef struct token_loc {
    source_code_t src;
    lexer_cursor_t cur;
} token_loc_t;

typedef struct token {
    token_kind_t kind;
    string_view_t value;
    token_loc_t loc;
} token_t;

size_t
token_loc_to_lineno(token_loc_t loc);

size_t
token_loc_to_colno(token_loc_t loc);

void
lexer_init(lexer_t *lexer, source_code_t src);

void
lexer_next_token(lexer_t *lexer, token_t *token);

void
lexer_peek_next(lexer_t *lexer, token_t *token);

void
lexer_lookahead(lexer_t *lexer, token_t *token, size_t n);

char *
token_kind_to_cstr(token_kind_t kind);

bool
token_kind_is_binary_op(token_kind_t kind);

string_view_t
token_loc_to_line(token_loc_t loc);

#endif /* LEXER_H */
debug log:

solving beb5486 ...
found beb5486 in http://lists.johnnyrichard.com/olang/20241010013318.222905-3-carlos@maniero.me/
found 774f619 in https://git.johnnyrichard.com/olang.git
preparing index
index prepared:
100644 774f619e7cda5a8caa9adad60441ed660b08498f	src/lexer.h

applying [1/1] http://lists.johnnyrichard.com/olang/20241010013318.222905-3-carlos@maniero.me/
diff --git a/src/lexer.h b/src/lexer.h
index 774f619..beb5486 100644

Checking patch src/lexer.h...
Applied patch src/lexer.h cleanly.

index at:
100644 beb54866d6b7374c4a165bfa096007ba1ab28760	src/lexer.h

Code repositories for project(s) associated with this public inbox

	https://git.johnnyrichard.com/olang.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox