Files
Chloride/src/parser/parser.h
2025-07-14 05:33:57 +01:00

81 lines
2.6 KiB
C

/*
* SPDX-FileCopyrightText: 2025 William Bell
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef PARSER_H
#define PARSER_H
#include "../dynamic_array/darray.h"
#include "../err.h"
#include <stdbool.h>
#include <stddef.h>
#define SWITCH_OPERATIONS \
case TOKEN_AND: \
case TOKEN_OR: \
case TOKEN_NOT_IN: \
case TOKEN_IN: \
case TOKEN_LE: \
case TOKEN_GE: \
case TOKEN_LT: \
case TOKEN_GT: \
case TOKEN_NE: \
case TOKEN_EQ: \
case TOKEN_PLUS: \
case TOKEN_MINUS: \
case TOKEN_MODULO: \
case TOKEN_STAR: \
case TOKEN_FLOORDIV: \
case TOKEN_SLASH: \
case TOKEN_CARET:
typedef struct LinkedList LinkedList;
typedef enum {
AST_STRING,
AST_ASSIGN,
AST_IDENTIFIER,
AST_NUMBER,
AST_IF,
AST_ACCESS,
AST_CALL,
AST_DECLARATION,
AST_NULL,
AST_BOOLEAN,
AST_DOWRAP,
AST_OPERATION,
AST_LIST,
AST_DICTIONARY,
AST_FUNCTION,
AST_RETURN
} ValueType;
extern const char *ValueTypeNames[];
typedef struct {
ValueType type;
void *data;
} ParsedValue;
typedef struct {
ArErr err;
ParsedValue *value;
} ParsedValueReturn;
ArErr parser(char *file, DArray *parsed, DArray *tokens, bool inline_flag);
ParsedValueReturn parse_token_full(char *file, DArray *tokens, size_t *index,
bool inline_flag, bool process_operations);
ParsedValueReturn parse_token(char *file, DArray *tokens, size_t *index,
bool inline_flag);
void free_parsed(void *ptr);
__attribute__((warn_unused_result)) ArErr error_if_finished(char *file, DArray *tokens, size_t *index);
size_t skip_newlines_and_indents(DArray *tokens, size_t *index);
#endif // PARSER_H