Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
    }


}
Esempio n. 3
0
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);
  }
}