30 lines
767 B
C
30 lines
767 B
C
#include "../parser.h"
|
|
#include "ast.h"
|
|
|
|
#ifndef PROG_MAX_NODE_SIZE
|
|
#define PROG_MAX_NODE_SIZE (1024 * 4)
|
|
#endif
|
|
|
|
void parse_prog(struct Parser* parser) {
|
|
/**
|
|
* Program := (Declaration | Definition)*
|
|
* same as
|
|
* Program := Declaration* Definition*
|
|
*/
|
|
int child_size = 0;
|
|
parser->root = new_ast_node();
|
|
struct ASTNode* node;
|
|
parser->root->root.children = xmalloc(sizeof(struct ASTNode*) * PROG_MAX_NODE_SIZE);
|
|
while (1) {
|
|
flushpeektok(parser);
|
|
if (peektoktype(parser) == TOKEN_EOF) {
|
|
break;
|
|
}
|
|
node = parse_decl(parser);
|
|
parser->root->root.children[child_size++] = node;
|
|
}
|
|
parser->root->type = NT_ROOT;
|
|
parser->root->root.child_size = child_size;
|
|
return;
|
|
}
|