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;
+}
+