genericLogger_t *genericLogger_clonep(genericLogger_t *genericLoggerp) { if (genericLoggerp == NULL) { return NULL; } return genericLogger_newp(genericLoggerp->logCallbackp, genericLoggerp->userDatavp, genericLoggerp->genericLoggerLeveli); }
int main() { size_t i; /* Object types */ marpaWrapper_t *marpaWrapperp; marpaWrapperRecognizer_t *marpaWrapperRecognizerp; marpaWrapperSymbolArrayp_t symbolArrayp[MAX_SYMBOL]; marpaWrapperSymbolArrayp_t rhsSymbolArrayp[3]; /* Just to have enough room */ /* Options */ marpaWrapperOption_t marpaWrapperOption; marpaWrapperSymbolOption_t marpaWrapperSymbolOption; marpaWrapperRuleOption_t marpaWrapperRuleOption; marpaWrapperValueOption_t marpaWrapperValueOption; marpaWrapperStackOption_t marpaWrapperStackOption; size_t nmarpaWrapperProgressi; marpaWrapperProgress_t **marpaWrapperProgresspp; /* Token values */ const char *token_values[] = { NULL, "1", "2", "3", "0", "-", "+", "*" }; int one = 1; /* Indice 1 in token_values */ int two = 2; /* Indice 2 in token_values */ int three = 3; /* Indice 3 in token_values */ int zero = 4; /* Indice 4 in token_values */ int minus_token_value = 5; /* Indice 5 in token_values */ int plus_token_value = 6; /* Indice 6 in token_values */ int multiply_token_value = 7; /* Indice 7 in token_values */ genericLoggerOption_t genericLoggerOption; genericLogger_t *genericLoggerp; genericLogger_defaultv(&genericLoggerOption); genericLoggerOption.leveli = GENERICLOGGER_LOGLEVEL_TRACE; genericLoggerp = genericLogger_newp(&genericLoggerOption); /* We want TRACE log level */ marpaWrapperOption_defaultb(&marpaWrapperOption); marpaWrapperOption.genericLoggerp = genericLoggerp; /* Grammar */ marpaWrapperp = marpaWrapper_newp(&marpaWrapperOption); /* Symbols */ for (i = 0; i < MAX_SYMBOL; i++) { marpaWrapperSymbolOption_defaultb(&(marpaWrapperSymbolOption)); marpaWrapperSymbolOption.startb = (i == 0) ? MARPAWRAPPER_BOOL_TRUE : MARPAWRAPPER_BOOL_FALSE; symbolArrayp[i] = marpaWrapper_addSymbolp(marpaWrapperp, &marpaWrapperSymbolOption); } /* Rules */ marpaWrapperRuleOption_defaultb(&marpaWrapperRuleOption); marpaWrapperRuleOption.rhsSymbolArraypp = &(rhsSymbolArrayp[0]); /* S ::= E */ marpaWrapperRuleOption.lhsSymbolp = symbolArrayp[S]; rhsSymbolArrayp[0] = symbolArrayp[E]; marpaWrapperRuleOption.nRhsSymboli = 1; marpaWrapperRuleOption.datavp = (void *) START_RULE; marpaWrapper_addRulep(marpaWrapperp, &marpaWrapperRuleOption); /* E ::= E op E */ marpaWrapperRuleOption.lhsSymbolp = symbolArrayp[ E]; rhsSymbolArrayp[0] = symbolArrayp[ E]; rhsSymbolArrayp[1] = symbolArrayp[op]; rhsSymbolArrayp[2] = symbolArrayp[ E]; marpaWrapperRuleOption.nRhsSymboli = 3; marpaWrapperRuleOption.datavp = (void *) OP_RULE; marpaWrapper_addRulep(marpaWrapperp, &marpaWrapperRuleOption); /* E ::= number */ marpaWrapperRuleOption.lhsSymbolp = symbolArrayp[ E]; rhsSymbolArrayp[0] = symbolArrayp[number]; marpaWrapperRuleOption.nRhsSymboli = 1; marpaWrapperRuleOption.datavp = (void *) NUMBER_RULE; marpaWrapper_addRulep(marpaWrapperp, &marpaWrapperRuleOption); marpaWrapper_precomputeb(marpaWrapperp); marpaWrapperRecognizerp = marpaWrapperRecognizer_newp(marpaWrapperp); if (marpaWrapperRecognizer_progressb(marpaWrapperRecognizerp, -1, -1, &nmarpaWrapperProgressi, &marpaWrapperProgresspp) == MARPAWRAPPER_BOOL_TRUE) { for (i = 0; i < nmarpaWrapperProgressi; i++) { GENERICLOGGER_INFOX("Earley Set Id: %4d, Origin Earley Set Id: %4d, Rule: %10p, Position: %3d", marpaWrapperProgresspp[i]->marpaEarleySetIdi, marpaWrapperProgresspp[i]->marpaEarleySetIdOrigini, (void *) marpaWrapperProgresspp[i]->marpaWrapperRulep, marpaWrapperProgresspp[i]->positioni); } marpaWrapperRecognizer_progress_freev(marpaWrapperRecognizerp, &nmarpaWrapperProgressi, &marpaWrapperProgresspp); } marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[number], two, 1); marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[ op], minus_token_value, 1); marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[number], zero, 1); marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[ op], multiply_token_value, 1); marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[number], three, 1); #ifdef _WIN32 // Sleep(10000); #endif if (marpaWrapperRecognizer_progressb(marpaWrapperRecognizerp, 0, -1, &nmarpaWrapperProgressi, &marpaWrapperProgresspp) == MARPAWRAPPER_BOOL_TRUE) { for (i = 0; i < nmarpaWrapperProgressi; i++) { GENERICLOGGER_INFOX("Earley Set Id: %4d, Origin Earley Set Id: %4d, Rule: %10p, Position: %3d", marpaWrapperProgresspp[i]->marpaEarleySetIdi, marpaWrapperProgresspp[i]->marpaEarleySetIdOrigini, (void *) marpaWrapperProgresspp[i]->marpaWrapperRulep, marpaWrapperProgresspp[i]->positioni); } marpaWrapperRecognizer_progress_freev(marpaWrapperRecognizerp, &nmarpaWrapperProgressi, &marpaWrapperProgresspp); } marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[ op], plus_token_value, 1); marpaWrapperRecognizer_readb(marpaWrapperRecognizerp, symbolArrayp[number], one, 1); marpaWrapperValueOption_defaultb(&marpaWrapperValueOption); marpaWrapperValueOption.valueRuleCallbackp = &myValueRuleCallback; marpaWrapperValueOption.valueSymbolCallbackp = &myValueSymbolCallback; marpaWrapperValueOption.valueSymbolCallbackDatavp = (void *) token_values; marpaWrapperValueOption.valueNullingCallbackp = &myValueNullingCallback; marpaWrapperValueOption.valueResultCallbackp = &myValueResultCallback; marpaWrapperValueOption.valueResultCallbackDatavp = genericLoggerp; marpaWrapperStackOption_defaultb(&marpaWrapperStackOption); marpaWrapperStackOption.stackElementSizei = sizeof(myStack_t); marpaWrapperStackOption.stackElementFreeCallbackp = &myStackElementFreeCallback; marpaWrapperStackOption.stackElementCopyCallbackp = &myStackElementCopyCallback; #ifdef _WIN32 // Sleep(10000); #endif marpaWrapper_vb(marpaWrapperRecognizerp, &marpaWrapperValueOption, &marpaWrapperStackOption); marpaWrapperRecognizer_destroyv(marpaWrapperRecognizerp); marpaWrapper_destroyv(marpaWrapperp); genericLogger_destroyv(genericLoggerp); return 0; }