diff options
Diffstat (limited to 'src/compiler/parser/parser.h')
-rw-r--r-- | src/compiler/parser/parser.h | 62 |
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); |