void main(){ char myName[100]; int i; printf("Inserisci il tuo nome: "); scanf("%s", &myName); int nameLen = strlen(myName); printAst(nameLen+6); printf("* %s *\n",myName); printAst(nameLen+6); }
void printAst(tree *node, int nestLevel) { if (node != 0) { //typespec if (node->nodeKind == 4) { printf("%s,%i\n", nodeNames[node->nodeKind], node->val); }//IDS else if (node->nodeKind == 27) { //if (node->val != 0) printf("%s: %s\n", nodeNames[node->nodeKind], symbolTable[node->val]->string); //else // printf("Illegal ID Found, the token is null!\n"); }//CONSTS else if (node->nodeKind == 30) printf("%s: %i\n", nodeNames[node->nodeKind], node->val); else if (node->nodeKind == 29) printf("%s: %c\n", nodeNames[node->nodeKind], node->val); else if (node->nodeKind == 28) printf("%s: %s\n", nodeNames[node->nodeKind], symbolTable[node->val]->string); else if (node->nodeKind == 23 || node->nodeKind == 21 || node->nodeKind == 19) printf("%s :%s\n", nodeNames[node->nodeKind], opNames[node->val]); else//all else printf("%s\n", nodeNames[node->nodeKind]); int i, j; for (i = 0; i < node->numChildren; i++) { for (j = 0; j < nestLevel; j++) printf("\t"); printAst(getChild(node, i), nestLevel + 1); } } else { printf("node is null! @nestLevel: %i\n", nestLevel); } }
void printAst(tree *node, int nestLevel) { //printf("%d with %s with %d children\n",node->nodeKind, nodeNames[node->nodeKind],node->numChildren); if (node->nodeKind == INTEGER) { printf("Line:%d <%d>\n", node->lineno, node->val); } else if(node->nodeKind == IDENTIFIER) { printf("Line:%d %s\n", node->lineno, node->strval); }else if(node->nodeKind == CHARACTER){ printf("Line:%d %c\n", node->lineno, (char *)node->val); }else if(node->nodeKind == STRINGCONS){ printf("Line:%d %s\n", node->lineno, node->strval); }else if(node->nodeKind == TYPESPECIFIER){ if(node->val == 0){ printf("INT\n"); }else if(node->val == 1){ printf("CHAR\n"); }else{ printf("VOID\n"); } }//else if(node->nodeKind == FACTOR){ // printf("factor value : %d\n", node->factor); // } else if(node->nodeKind == NONE){ return; }/*else if(node->nodeKind ==DECLLIST){ }else if(node->nodeKind ==FORMALDECLLIST){ }else if(node->nodeKind == LOCALDECLLIST){ }else if(node->nodeKind == STATEMENTLIST){ }else if(node->nodeKind == ADDEXPR){ }else if(node->nodeKind == TERM){ }else if(node->nodeKind == FACTOR){ }*/else if(node->nodeKind == OPERATOR){ if(node->val == 0){ printf("<\n"); }else if(node->val == 1){ printf(">\n"); }else if(node->val == 2){ printf(">=\n"); }else if(node->val == 3){ printf("<=\n"); }else if(node->val == 4){ printf("==\n"); }else if(node->val == 5){ printf("!=\n"); }else if(node->val == 6){ printf("+\n"); }else if(node->val == 7){ printf("-\n"); }else if(node->val == 8){ printf("*\n"); }else if(node->val == 9){ printf("/\n"); }else if(node->val == 10){ printf("=\n"); } }else if(node->nodeKind == KWDTYPE){ if(node->val == IF){ printf("IF\n"); }else if(node->val == ELSE){ printf("ELSE\n"); }else if(node->val == WHILE){ printf("WHILE\n"); }else if(node->val == RETURN){ printf("RETURN\n"); } }else{ printf("Line:%d %s\n", node->lineno, nodeNames[node->nodeKind]); } int i, j; for (i = 0; i < node->numChildren; i++) { for (j = 0; j < nestLevel; j++){ printf("\t"); } tree *n = getChild(node, i); printAst(getChild(node, i), nestLevel + 1); } }