Exemplo n.º 1
0
errorCode parseNext(Parser* parser)
{
	errorCode tmp_err_code = UNEXPECTED_ERROR;
	SmallIndex tmpNonTermID = GR_VOID_NON_TERMINAL;

	tmp_err_code = processNextProduction(&parser->strm, &tmpNonTermID, &parser->handler, parser->app_data);
	if(tmp_err_code != ERR_OK)
		return tmp_err_code;

	if(tmpNonTermID == GR_VOID_NON_TERMINAL)
	{
		EXIGrammar* grammar;
		popGrammar(&(parser->strm.gStack), &grammar);
		if(parser->strm.gStack == NULL) // There is no more grammars in the stack
		{
			parser->strm.context.currNonTermID = GR_VOID_NON_TERMINAL; // The stream is parsed
		}
		else
		{
			parser->strm.context.currNonTermID = parser->strm.gStack->lastNonTermID;
		}
	}
	else
	{
		parser->strm.context.currNonTermID = tmpNonTermID;
	}

	if(parser->strm.context.currNonTermID == GR_VOID_NON_TERMINAL)
		return PARSING_COMPLETE;

	return ERR_OK;
}
Exemplo n.º 2
0
END_TEST

START_TEST (test_popGrammar)
{
	errorCode err = EXIP_UNEXPECTED_ERROR;
	EXIGrammarStack* testGrStack = NULL;
	EXIGrammar testElementGrammar1;
	EXIStream strm;
	EXIGrammar testElementGrammar;
	QNameID emptyQnameID = {URI_MAX, LN_MAX};

	makeDefaultOpts(&strm.header.opts);
	initAllocList(&strm.memList);

#if BUILD_IN_GRAMMARS_USE
	err = createBuiltInElementGrammar(&testElementGrammar1, &strm);
	fail_if(err != EXIP_OK);

	err = createBuiltInElementGrammar(&testElementGrammar, &strm);
	fail_if(err != EXIP_OK);
#endif

	err = pushGrammar(&testGrStack, emptyQnameID, &testElementGrammar1);
	fail_unless (err == EXIP_OK, "pushGrammar returns error code %d", err);

	err = pushGrammar(&testGrStack, emptyQnameID, &testElementGrammar);
	fail_unless (err == EXIP_OK, "pushGrammar returns error code %d", err);
	fail_if(testGrStack->nextInStack == NULL);

	popGrammar(&testGrStack);
	fail_if(testGrStack->nextInStack != NULL);
}
Exemplo n.º 3
0
void destroyParser(Parser* parser)
{
	EXIGrammar* tmp;
	while(parser->strm.gStack != NULL)
	{
		popGrammar(&parser->strm.gStack, &tmp);
	}

	freeAllMem(&parser->strm);
}