From d6ba30b94a24607bce5db5e706eb20cc051a98f0 Mon Sep 17 00:00:00 2001 From: A404M Date: Wed, 18 Sep 2024 19:46:38 +0330 Subject: initial commit --- src/compiler/parser/parser.h | 62 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/compiler/parser/parser.h (limited to 'src/compiler/parser/parser.h') diff --git a/src/compiler/parser/parser.h b/src/compiler/parser/parser.h new file mode 100644 index 0000000..510e4e9 --- /dev/null +++ b/src/compiler/parser/parser.h @@ -0,0 +1,62 @@ +#pragma once + +#include + +typedef enum ParsedToken { + PARSED_TOKEN_NONE = 0, + PARSED_TOKEN_ROOT, + PARSED_TOKEN_PRINT, + PARSED_TOKEN_PARENTHESIS, + PARSED_TOKEN_VALUE_STRING, + PARSED_TOKEN_EOL, +} ParsedToken; + +extern const char *PARSED_TOKEN_STRINGS[]; + +typedef struct ParseOrder { + bool ltr; + size_t size; + Token tokens[10]; +} ParseOrder; + +typedef struct ScopeMetadata { + struct ParsedNode **operands; + size_t operands_size; +} ScopeMetadata; + +typedef struct ParsedNode { + char const *strBegin; + char const *strEnd; + ParsedToken token; + void *metadata; + struct ParsedNode *parent; +} ParsedNode; + +typedef ParsedNode PrintMetadata; +typedef ParsedNode EOLMetadata; + +extern ParsedNode *newParsedNode(char const *strBegin, char const *strEnd, + ParsedToken token, void *metadata, + ParsedNode *parent); +extern void _printParsedNode(const ParsedNode *parsedNode,int indent); +extern void printParsedNode(const ParsedNode *parsedNode); +extern ParsedNode *getUntilCommonFather(ParsedNode *parsedNode,ParsedNode *parent); +extern void deleteParsedNode(ParsedNode *parsedNode); + +extern ParsedNode *parser(Nodes lexedNodes); + +extern ScopeMetadata *parserScope(Node *nodesBegin, Node *nodesEnd, + ParsedNode *parent); + +extern ParsedNode *parseNode(Node *nodesBegin, Node *nodesEnd, Node *node, + ParsedNode *parent); + +extern ParsedNode *parserPrint(Node *nodesBegin, Node *nodesEnd, Node *node, + ParsedNode *parent); + +extern ParsedNode *parseParenthesis(Node *nodesBegin, Node *nodesEnd, + Node *node, ParsedNode *parent); + +extern ParsedNode *parseString(Node *node, ParsedNode *parent); + +extern ParsedNode *parseEOL(Node *nodesBegin, Node *nodesEnd,Node *node, ParsedNode *parent); -- cgit v1.2.3