#ifndef PARSER_H #define PARSER_H #include "lexer.h" #include #include #include typedef enum { ParsedNodeTypeError, ParsedNodeTypeInt, ParsedNodeTypeFloat, ParsedNodeTypeChar, ParsedNodeTypeString, ParsedNodeTypeBool, ParsedNodeTypeArray, ParsedNodeTypeDict, ParsedNodeTypeIf, ParsedNodeTypeWhile, ParsedNodeTypeLoop, ParsedNodeTypeFor, ParsedNodeTypeLambda, ParsedNodeTypeCall, ParsedNodeTypeAccess, ParsedNodeTypeIndex, ParsedNodeTypeUnary, ParsedNodeTypeBinary, ParsedNodeTypeAssign, } ParsedNodeType; typedef struct KeyValuePair KeyValuePair; typedef struct ParsedNode ParsedNode; struct ParsedNode { ParsedNodeType type; union { int64_t int_value; double float_value; char char_value; struct { char* value; size_t length; } string; bool bool_value; struct { ParsedNode* values; size_t length; } array; struct { KeyValuePair* pairs; size_t length; } dict; struct { ParsedNode* condition; ParsedNode* truthy; ParsedNode* falsy; } if_node; }; }; struct KeyValuePair { char* key; size_t key_length; ParsedNode* value; }; typedef struct { Lexer* lexer; Token current; } Parser; void parser_create(Parser* parser, Lexer* lexer); void parser_parse_expression(Parser* parser); #endif