Exemplo n.º 1
0
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)++;
    }
}
Exemplo n.º 2
0
Arquivo: parser.cpp Projeto: wfwt/jszb
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;
}
Exemplo n.º 3
0
Arquivo: parser.cpp Projeto: wfwt/jszb
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
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;
}