aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/parser/parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/parser/parser.h')
-rw-r--r--src/compiler/parser/parser.h62
1 files changed, 62 insertions, 0 deletions
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 <compiler/lexer/lexer.h>
+
+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);