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.h92
1 files changed, 72 insertions, 20 deletions
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);