void traverse(struct TreeNode *node, char* str, char** paths, int* returnSize) { if(node->left!=NULL) traverse(node->left, stringAdd(str, node->val), paths, returnSize); if(node->right!=NULL) traverse(node->right, stringAdd(str, node->val), paths, returnSize); if(node->left==NULL && node->right==NULL) { *(paths+*returnSize) = stringAdd(str, node->val); (*returnSize)++; } }
static Stmt *parseStmt(Parser *p) { String id; assert(p->tok == TK_ID); if (stringInit(&id, p->toklen)) return 0; stringAdd(&id, p->tokval, p->toklen); p->tok = lexerGetToken(p->lex, &p->tokval, &p->toklen); if (p->tok == TK_COLON_EQ || p->tok == TK_COLON) { enum Token op = p->tok; p->tok = lexerGetToken(p->lex, &p->tokval, &p->toklen); Node *expr = parseExpr(p); if (expr) { if (p->tok == TK_SEMICOLON) { #ifdef LOG_PARSE info("解析得到stmt\n"); #endif return stmtNew(&id, op, expr); } else { handleParserError(p, 0, "解析stmt,缺少;"); } } } else { handleParserError(p, 1, "解析stmt,不识别符号,只能是:=或者:"); } stringFree(&id); return 0; }
static Node *parseIdOrFuncCall(Parser *p) { Node *expr = 0; String id; stringInit(&id, p->toklen); stringAdd(&id, p->tokval, p->toklen); p->tok = lexerGetToken(p->lex, &p->tokval, &p->toklen); if (p->tok == TK_LP) { // ( ExprList *arg; p->tok = lexerGetToken(p->lex, &p->tokval, &p->toklen); arg = parseExprList(p); if (p->tok == TK_RP) { #ifdef LOG_PARSE info("解析得到FuncCall\n"); #endif expr = (Node *)funcCallNew(&id, arg); p->tok = lexerGetToken(p->lex, &p->tokval, &p->toklen); } else { handleParserError(p, 1, "解析FuncCall,缺少)"); } } else { #ifdef LOG_PARSE info("解析得到IdExpr\n"); #endif expr = (Node *)idExprNew(&id); } return expr; }
int main() { int ww; ww = 12; ww = ww - (ww / 10) * 10; //printf("ww %d\n",ww);//d int A, B, N, i; //unsigned long long int fib = 0; //char sss[100]; //stringAdd("1111","222131322",sss);//d //printf("sum: %s\n",sss);//d //return 0; char *prod=(char *)malloc(sizeof(char)*2200000); char *A_str=(char *)malloc(sizeof(char)*2200000); char *B_str=(char *)malloc(sizeof(char)*2200000); char *fib=(char *)malloc(sizeof(char)*2200000); //char prod[100], A_str[100], B_str[100], fib[100]; /* size enough */ memset (prod, 0, 2200000); /* zero out */ memset (A_str, 0, 2200000); /* zero out */ memset (B_str, 0, 2200000); /* zero out */ memset (fib, 0, 2200000); /* zero out */ //mulStringNum ("12300", "923", prod); //d //printf ("prod: %s\n", prod); //d //return 0; scanf ("%d %d %d", &A, &B, &N); A_str[0]=A+48; B_str[0]=B+48; if (N == 1) strcpy(fib,"0"); if (N == 2) strcpy(fib,"1"); N = N - 2; for (i = 0; i < N; i++) { //printf("i: %d\n",i+2);//d mulStringNum(B_str, B_str, prod); stringAdd(prod, A_str, fib); //fib = B * B + A; strcpy(A_str,B_str); strcpy(B_str,fib); //A = B; //B = fib; } printf ("%s", fib); return 0; }
/*opens the config file end returns the FILE pointer to it*/ FILE *i8086OpenConfig(const char *filename) { char *linfilename; FILE *file; #ifdef _WIN32 file = fopen(filename, "r");//if win32 - open the filename in current dir #else linfilename=(char*)calloc(1, sizeof(char)); linfilename=stringAdd(linfilename,getenv("HOME"),"/.i8086emu/",NULL);//get homedir incl. filename string mkdir(linfilename,S_IRWXU); linfilename=stringAdd(linfilename,filename,NULL);//get homedir incl. filename string file = fopen(linfilename, "r");//try to open config file if(file==NULL)//didn't work { copyFile(DATADIR"/"CONFIG_FILE".example",linfilename);//copy standard cfg from datadir to homedir file = fopen(linfilename, "r");//open it } free(linfilename);//all your memory is freed #endif return file; }