Mercurial > pasana
diff node_new.c @ 2:ff5e493bc9cb default tip
2003-01-29
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 13 Oct 2012 21:14:50 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/node_new.c Sat Oct 13 21:14:50 2012 +0200 @@ -0,0 +1,120 @@ +/* Pojedynczy wezel drzewa parsowania. */ + +#include "node.h" +#include "node_new.h" +#include "parser.h" +#include "pascal.tab.h" + + +/* Utowrzenie nowego węzła z wyrażeniem. */ +ExprNode * +newExprNode(Parser *parser, enum NodeKind kind) +{ + ExprNode *node; + + node = g_new(ExprNode,1); + node->kind = kind; + node->list = NULL; + node->expr = NULL; + node->expr2 = NULL; + node->symbol = NULL; + node->value = NULL; + + /* Dodajemy komentarze. */ + node->bcomm = parser->blockcomment; + parser->blockcomment = NULL; + parser->codecomment = &(node->ccomm); + return node; +} + +/* Utowrzenie nowego węzła z rozkazem. */ +StmtNode * +newStmtNode(Parser *parser, enum NodeKind kind) +{ + StmtNode *node; + + node = g_new(StmtNode,1); + node->kind = kind; + node->list = NULL; + node->stmt = NULL; + node->stmt2 = NULL; + node->symbol = NULL; + node->expr = NULL; + node->expr2 = NULL; + node->parent = NULL; + node->label = NULL; + + /* Dodajemy komentarze. */ + node->bcomm = parser->blockcomment; + parser->blockcomment = NULL; + parser->codecomment = &(node->ccomm); + return node; +} + +/* Utworzenie nowego węzła z symbolem. */ +SymbolNode * +newSymbolNode(Parser *parser, const char *name, enum NodeKind kind) +{ + SymbolNode *node; + + node = g_new(SymbolNode, 1); + node->kind = kind; + node->name = g_string_new(name); + node->symbols = NULL; + node->stmt = NULL; + node->type = NULL; + node->parent = NULL; + node->list = NULL; + node->base = NULL; + node->expr = NULL; + + /* Stała, jaką ma zwrócic tokenizer. */ + switch (kind) { + case SYM_TYPE_POINTER: + case SYM_TYPE_STRING: + case SYM_TYPE_ARRAY: + case SYM_TYPE_SET: + case SYM_TYPE_SUBRANGE: + case SYM_TYPE_ENUM: + case SYM_TYPE_RECORD: + case SYM_TYPE_FILE: + node->token = ID_TYPE; + break; + case SYM_VAR_LOCAL: + case SYM_VAR_PARAM: + case SYM_VAR_VARPARAM: + case SYM_VAR_DEARR: + case SYM_VAR_DEREF: + case SYM_VAR_CAST: + node->token = ID_VAR; + break; + case SYM_VAR_FIELD: + node->token = ID_FIELD; + break; + case SYM_LABEL: + node->token = ID_LABEL; + break; + case SYM_PROC: + node->token = ID_PROC; + break; + case SYM_FUNC: + node->token = ID_FUNC; + break; + case SYM_CONST: + node->token = ID_CONST; + break; + case SYM_UNIT: + node->token = ID_UNIT; + break; + default: + node->token = 0; + } + + /* Dodajemy komentarze. */ + node->bcomm = parser->blockcomment; + parser->blockcomment = NULL; + parser->codecomment = &(node->ccomm); + + return node; +} +
