Mercurial > pasana
view 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 source
/* 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; }
