コード例 #1
0
genericLogger_t *genericLogger_clonep(genericLogger_t *genericLoggerp) {
  if (genericLoggerp == NULL) {
    return NULL;
  }

  return genericLogger_newp(genericLoggerp->logCallbackp, genericLoggerp->userDatavp, genericLoggerp->genericLoggerLeveli);
}
コード例 #2
0
ファイル: marpa_wrapper_test.c プロジェクト: kimhanse/kollos
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;
}