From f79290084948f3cf140395c270c07cf29ca58e8d Mon Sep 17 00:00:00 2001 From: A404M Date: Sun, 22 Sep 2024 19:34:43 +0330 Subject: Better errors Added variables --- src/compiler/parser/parser.h | 92 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 72 insertions(+), 20 deletions(-) (limited to 'src/compiler/parser/parser.h') diff --git a/src/compiler/parser/parser.h b/src/compiler/parser/parser.h index 520c5d1..24c6c5d 100644 --- a/src/compiler/parser/parser.h +++ b/src/compiler/parser/parser.h @@ -8,7 +8,15 @@ typedef enum ParsedToken { PARSED_TOKEN_PARENTHESIS, PARSED_TOKEN_FUNCTION_CALL, PARSED_TOKEN_VALUE_STRING, + PARSED_TOKEN_IDENTIFIER, + PARSED_TOKEN_DEFINE_VARIABLE, + PARSED_TOKEN_DEFINE_CONSTANT, PARSED_TOKEN_EOL, + PARSED_TOKEN_COMMA, + PARSED_TOKEN_STRUCT, + PARSED_TOKEN_FUNCTION, + PARSED_TOKEN_FUNCTION_PARAMS, + PARSED_TOKEN_CODE_BODY, } ParsedToken; extern const char *PARSED_TOKEN_STRINGS[]; @@ -27,17 +35,32 @@ typedef struct ParsedNode { struct ParsedNode *parent; } ParsedNode; -typedef struct ScopeMetadata { - struct ParsedNode **operands; +typedef struct ParserScopeMetadata { + ParsedNode **operands; size_t operands_size; -} ScopeMetadata; -typedef struct FunctionCallMetadata { +} ParserScopeMetadata; +typedef ParsedNode ParserParenthesisMetadata; +typedef struct ParserFunctionCallMetadata { char const *functionNameBegin; char const *functionNameEnd; - ScopeMetadata *scope; -} FunctionCallMetadata ; -typedef ParsedNode PrintMetadata; -typedef ParsedNode EOLMetadata; + ParserScopeMetadata *scope; +} ParserFunctionCallMetadata; +typedef ParsedNode ParserPrintMetadata; +typedef struct ParserVariableDefine { + ParsedNode *name; + ParsedNode *type; + ParsedNode *value; +} ParserVariableDefineMetadata; +typedef ParsedNode ParserEOLMetadata; +typedef ParsedNode ParserCommaMetadata; +typedef struct ParserStructMetadata { + ParsedNode *body; +} ParserStructMetadata; +typedef struct ParserFunctionMetadata { + ParsedNode *params; + ParsedNode *type; + ParsedNode *body; +} ParserFunctionMetadata; extern ParsedNode *newParsedNode(char const *strBegin, char const *strEnd, ParsedToken token, void *metadata, @@ -48,21 +71,50 @@ extern ParsedNode *getUntilCommonFather(ParsedNode *parsedNode, ParsedNode *parent); extern void deleteParsedNode(ParsedNode *parsedNode); -extern ParsedNode *parser(Nodes lexedNodes); +extern ParsedNode *parser(SourceCode code); +extern ParsedNode *_parser(Nodes lexedNodes, SourceCode code); -extern ScopeMetadata *parserScope(Node *nodesBegin, Node *nodesEnd, - ParsedNode *parent, - bool (*isAllowed)(ParsedToken)); -extern ScopeMetadata *parserScopeCode(Node *nodesBegin, Node *nodesEnd, - ParsedNode *parent); -extern ScopeMetadata *parserScopeParenthesis(Node *nodesBegin, Node *nodesEnd, - ParsedNode *parent); +extern ParserScopeMetadata *parserScope( + Node *nodesBegin, Node *nodesEnd, ParsedNode *parent, + bool (*isAllowed)(ParsedToken token, bool isLast), SourceCode code); +extern ParserScopeMetadata *parserScopeCode(Node *nodesBegin, Node *nodesEnd, + ParsedNode *parent, + SourceCode code); +extern ParserScopeMetadata *parserScopeParenthesis(Node *nodesBegin, + Node *nodesEnd, + ParsedNode *parent, + SourceCode code); +extern ParserScopeMetadata *parserScopeFunctionCall(Node *nodesBegin, + Node *nodesEnd, + ParsedNode *parent, + SourceCode code); +extern ParserScopeMetadata *parserScopeFunctionParam(Node *nodesBegin, + Node *nodesEnd, + ParsedNode *parent, + SourceCode code); +extern ParserScopeMetadata *parserScopeStruct(Node *nodesBegin, Node *nodesEnd, + ParsedNode *parent, + SourceCode code); extern ParsedNode *parseNode(Node *nodesBegin, Node *nodesEnd, Node *node, - ParsedNode *parent); + ParsedNode *parent, SourceCode code); extern ParsedNode *parseParenthesis(Node *nodesBegin, Node *nodesEnd, - Node *node, ParsedNode *parent); + Node *node, ParsedNode *parent, + SourceCode code); +extern ParsedNode *parseCurly(Node *nodesBegin, Node *node, ParsedNode *parent, + SourceCode code); extern ParsedNode *parseString(Node *node, ParsedNode *parent); -extern ParsedNode *parseEOL(Node *nodesBegin, Node *nodesEnd, Node *node, - ParsedNode *parent); +extern ParsedNode *parseIdentifier(Node *node, ParsedNode *parent); +extern ParsedNode *parseEOL(Node *nodesBegin, Node *node, ParsedNode *parent, + SourceCode code); +extern ParsedNode *parseVariable(Node *nodesBegin, Node *nodesEnd, Node *node, + ParsedNode *parent, SourceCode code); +extern ParsedNode *parseComma(Node *nodesBegin, Node *nodesEnd, Node *node, + ParsedNode *parent, SourceCode code); +extern ParsedNode *parseStruct(Node *nodesEnd, Node *node, ParsedNode *parent, + SourceCode code); +extern ParsedNode *parseFunction(Node *nodesBegin, Node *nodesEnd, Node *node, + ParsedNode *parent, SourceCode code); +extern ParsedNode *parseImport(Node *nodesEnd, Node *node, ParsedNode *parent, + SourceCode code); -- cgit v1.2.3