simple-lisp/src/parse.h

61 lines
1.2 KiB
C
Raw Normal View History

2024-08-15 02:11:26 -07:00
#include <stdio.h>
#include <stdbool.h>
#include "lisp.h"
typedef struct {
size_t line;
size_t col;
char *context;
char *desc;
void *next;
} ParseError;
typedef struct {
FILE *src;
size_t line;
size_t col;
ParseError *error_head;
ParseError *error_tail;
size_t error_count;
} TokenStream;
typedef enum {
TOKEN_TYPE_EOF,
TOKEN_TYPE_UNKNOWN,
TOKEN_TYPE_COMMENT,
TOKEN_TYPE_PAREN,
TOKEN_TYPE_BRACKET,
TOKEN_TYPE_SYMBOL,
TOKEN_TYPE_PROPERTY,
TOKEN_TYPE_QUOTE,
TOKEN_TYPE_CHAR,
TOKEN_TYPE_NUMBER,
TOKEN_TYPE_STRING,
} TokenType;
typedef struct {
TokenType type;
char *text;
size_t buf_len;
size_t len;
size_t line;
size_t col;
} Token;
// src is taken by this function
TokenStream *make_token_stream(FILE *src);
void destroy_token_stream(TokenStream *stream);
// return the number of errors after parsing
size_t token_stream_next(TokenStream *stream, Token *token);
void token_free(Token *token);
// return the number of errors left
ParseError *token_stream_error(TokenStream *stream);
void parse_error_free(ParseError *error);
void read_native(FILE *src, LispObject ***result, size_t *result_len,
ParseError *errors, size_t *error_count);