Esempio n. 1
0
int main(){
    redisContext* c = redisConnect("127.0.0.1", 6379);
    redisReply *reply;

    if(c->err){
        redisFree(c);
        printf("connection fail\n");
        return;
    }else{
        printf("connection succeed\n");
    }

    if(!freopen("infile","r",stdin)){
        printf("error open\n");
        exit(1);
    }

    char key[10],value[10];
    int i=0;
    for(;i<100;i++){
        scanf("%s %s",key,value);
        setAppend(key,value,c);
    }
    redisGetReply(c,(void **)&reply);
    freeReplyObject(reply);
    redisFree(c);
	return 0;
}
Esempio n. 2
0
File: PreLL1.c Progetto: HsuJv/Note
digType* getSequenceFirst(pRuleNode p) {
	digType* first = (digType*)malloc(sizeof(long));
	int includeEpsilon = 1;

	*first = 0;

	for (pRuleNode i = p; i; i = i->next) {
		pSymbolNode ps = findSymbolPoint(i->serial);
		first = setAppend(&first, ps->first, 0);
		if (*(ps->first + 1)) {
			includeEpsilon = 0;
			break;
		}
	}
	if (includeEpsilon) {
		digType temp[2] = { 1, 0 };
		first = setAppend(&first, temp, 1);
	}

	return first;
}
Esempio n. 3
0
File: PreLL1.c Progetto: HsuJv/Note
void getFollow(pSymbolNode p) {

	// p is the start of grammar
	if (p == ll[2]) {
		if (p->follow) {
			digType temp[2] = { 1, -1 };
			p->follow = setAppend(&p->follow, temp, 1);
		}
		else {
			p->follow = (digType*)malloc(sizeof(long) * 2);
			*(p->follow) = 1;
			*(p->follow + 1) = -1;
		}
	}

	for (pRule r = gRules; r; r = r->next) {
		// Rules in the form of A ::= alpha P beta
		for (pRuleNode pr = r->addr->next; pr; pr = pr->next) {
			if (pr->serial == p->serial) {
				pSymbolNode beta;
				pSymbolNode a = findSymbolPoint(r->addr->serial);
				digType* firstOfBeta;

				// beta = epsilon
				if (!pr->next) {
					if (a->follow)
						if (p->follow)
							p->follow = setAppend(&p->follow, a->follow, 1);
						else {
							digType len = *(a->follow) + 1;

							p->follow = (digType *)malloc(sizeof(long) * len);
							memcpy(p->follow, a->follow, len * sizeof(long));
						}
						continue;
				}

				beta = findSymbolPoint(pr->next->serial);
				firstOfBeta = getSequenceFirst(pr->next);

				// First(beta) without epsilon will be appended to Follow(B);
				if (p->follow) {
					p->follow = setAppend(&p->follow, firstOfBeta, 0);
				}
				else {
					digType len = *(firstOfBeta);

					if (*(firstOfBeta + 1) == 0) len--;
					p->follow = (digType *)malloc(sizeof(long) * (len + 1));
					if (*(firstOfBeta + 1) == 0)
						memcpy((void*)(p->follow + 1), (void*)(firstOfBeta + 2), len * sizeof(long));
					else
						memcpy((void*)(p->follow + 1), (void*)(firstOfBeta + 1), len * sizeof(long));
					*(p->follow) = len;
				}

				// if beta can be generalized to epsilon
				if (!*(firstOfBeta + 1)) {
					if (a->follow)
						if (p->follow)
							p->follow = setAppend(&p->follow, a->follow, 1);
						else {
							digType len = *(a->follow) + 1;

							p->follow = (digType *)malloc(sizeof(long) * len);
							memcpy(p->follow, a->follow, len * sizeof(long));
						}
				}

				free(firstOfBeta);
			}
		}
	}
}
Esempio n. 4
0
File: PreLL1.c Progetto: HsuJv/Note
void getSymbolFirst(pSymbolNode p) {
	// Terminals
	if (p->serial % 2 == 0)
	{
		p->first = (digType*)malloc(sizeof(long) * 2);
		*(p->first) = 1;
		*(p->first + 1) = p->serial;
	}
	// Nonterminals
	else
	{
		for (pRule r = gRules; r; r = r->next) {
			// Rules about P
			if (r->addr->serial == p->serial) {
				// Rules like P ::= p alpha or 0
				if (r->addr->next->serial % 2 == 0) {
					pSymbolNode pa = findSymbolPoint(r->addr->next->serial);

					// P ::= p alpha
					if (r->addr->next->serial) {
						if (p->first) {
							p->first = setAppend(&p->first, pa->first, 1);
						}
						else {
							p->first = (digType*)malloc(sizeof(long) * 2);
							*(p->first) = 1;
							*(p->first + 1) = pa->serial;
						}
					}
					// A ::= 0
					else
					{
						if (p->first) {
							digType temp[2] = { 1, 0 };
							p->first = setAppend(&p->first, temp, 1);
						}
						else {
							p->first = (digType*)malloc(sizeof(long) * 2);
							*(p->first) = 1;
							*(p->first + 1) = 0;
						}
					}
				}
				// Rules like A ::= B1 B2 ... Bk
				else {
					for (pRuleNode pr = r->addr->next; pr; pr = pr->next) {
						pSymbolNode pb = findSymbolPoint(pr->serial);

						if (pb->first) {
							if (p->first)
								p->first = setAppend(&p->first, pb->first, 0);
							else {
								digType len = *(pb->first);

								if (*(pb->first + 1) == 0) len--;
								p->first = (digType *)malloc(sizeof(long) * (len + 1));
								if (*(pb->first + 1) == 0)
									memcpy((void*)(p->first + 1), (void*)(pb->first + 2), len * sizeof(long));
								else
									memcpy((void*)(p->first + 1), (void*)(pb->first + 1), len * sizeof(long));
								*(p->first) = len;
							}
							if (pr->next == 0 && *(pb->first + 1) == 0) {
								if (p->first) {
									digType temp[2] = { 1, 0 };
									p->first = setAppend(&p->first, temp, 1);
								}
								else {
									p->first = (digType*)malloc(sizeof(long) * 2);
									*(p->first) = 1;
									*(p->first + 1) = 0;
								}
							}
							if (*(pb->first + 1) != 0) break;
						}
						else break;
					}
				}
			}
		}
	}
}